Files
obsidian/infra/k3s-backup.md

76 lines
2.0 KiB
Markdown

---
title: K3s 백업 파이프라인
updated: 2026-03-16
tags: [infra, backup, k3s, r2, synology]
---
## 아키텍처
```
K3s PVC → NFS → Synology NAS (/volume1/k3s-backup/) → Cloudflare R2 (k3s-backup)
```
## K3s → NAS (NFS)
### NFS PV/PVC
| 네임스페이스 | PVC 이름 | NFS 경로 | 비고 |
|-------------|----------|----------|------|
| gitea | gitea-backup-nfs | /volume1/k3s-backup/gitea | gitea dump |
- NFS 서버: 192.168.9.100 (Synology NAS)
- PV reclaim policy: Retain
### CronJob
| 네임스페이스 | CronJob | 스케줄 | 내용 |
|-------------|---------|--------|------|
| gitea | gitea-backup | 0 3 * * * (UTC) | gitea dump → NFS |
## NAS → R2 (Synology systemd timer)
### Synology 구성
- **rclone 설정**: `/volume1/docker/rclone/rclone.conf`
- **rclone 실행**: Docker 컨테이너 (`rclone/rclone:latest`)
- **systemd service**: `r2-backup.service`
- **systemd timer**: `r2-backup.timer` — 매일 05:00 KST (±5분 jitter)
### R2 버킷
- 버킷명: `k3s-backup`
- 엔드포인트: `https://d8e5997eb4040f8b489f09095c0f623c.r2.cloudflarestorage.com`
- 크레덴셜: [[vault]] `secret/cloud/cloudflare/r2`
### 관리 명령 (Synology SSH)
```bash
# 수동 sync
sudo systemctl start r2-backup.service
# 상태 확인
sudo systemctl status r2-backup.timer
sudo systemctl list-timers r2-backup.timer
# 로그
sudo journalctl -u r2-backup.service
# R2 내용 확인
sudo /usr/local/bin/docker run --rm \
-v /volume1/docker/rclone:/config:ro \
rclone/rclone:latest \
--config /config/rclone.conf \
ls r2:k3s-backup/
```
## 보존 정책
- NAS: 수동 관리 (디스크 여유에 따라)
- R2: lifecycle rule 설정 필요 (Cloudflare 대시보드에서 30일 만료 설정)
## TODO
- [ ] R2 lifecycle rule 설정 (대시보드에서 30일 만료)
- [ ] vault, openmemory, anvil, ironclad 등 추가 서비스 NFS 백업 CronJob 구성
- [ ] postgres 백업 CronJob NFS 경로 `/volume1/k3s-backup/postgres`로 변경