--- 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`로 변경