From 2901cdf0ce264f79646e032e65cce3f62d381c47 Mon Sep 17 00:00:00 2001 From: kappa Date: Wed, 25 Mar 2026 10:03:58 +0900 Subject: [PATCH] =?UTF-8?q?kine=20=EB=B0=B1=EC=97=85=20=ED=8C=8C=EC=9D=B4?= =?UTF-8?q?=ED=94=84=EB=9D=BC=EC=9D=B8=20=EC=B6=94=EA=B0=80=20(Supabase=20?= =?UTF-8?q?PostgreSQL=20=E2=86=92=20NAS=20=E2=86=92=20R2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/backup.md | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/infra/backup.md b/infra/backup.md index a932303..53b1246 100644 --- a/infra/backup.md +++ b/infra/backup.md @@ -1,6 +1,6 @@ --- title: 백업 파이프라인 -updated: 2026-03-22 +updated: 2026-03-25 tags: [infra, backup] --- @@ -54,6 +54,40 @@ tags: [infra, backup] | NAS 장애 | R2에서 rclone copy로 복원 | | kr2 장애 | NAS rsync 미러에서 복원 | +## kine 백업 (Supabase PostgreSQL) + +K3s datastore인 Supabase PostgreSQL의 kine 테이블 백업. pg_dump → NAS → R2 3단계. + +### 1. pg_dump (kr2) + +- **호스트**: incus-kr2 +- **스크립트**: `/usr/local/bin/kine-backup.sh` +- **systemd**: `kine-backup.timer` / `kine-backup.service` +- **스케줄**: 매일 03:30 (±5분) +- **DB**: Supabase Pooler (`aws-1-ap-southeast-1.pooler.supabase.com`) +- **인증**: Vault `secret/cloud/supabase` +- **출력**: `/opt/kine-backup/kine-YYYYMMDD.sql.gz` +- **보관**: 7일 초과 자동 삭제 +- **크기**: ~9.3MB (gzip) + +### 2. rsync → NAS (같은 스크립트) + +- pg_dump 완료 직후 자동 실행 (같은 스크립트) +- **대상**: `kaffa@192.168.205.100:/volume1/k3s-backup/kine/` +- **SSH 키**: `/home/kaffa/.ssh/id_ed25519` + +### 3. R2 sync (기존 r2-backup.timer로 자동 포함) + +NAS `/volume1/k3s-backup/` → R2 `k3s-backup` 버킷 (매일 05:00) + +### 복구 방법 + +```bash +# NAS 또는 R2에서 덤프 파일 가져온 후 +gunzip kine-YYYYMMDD.sql.gz +psql "$DB_URL" < kine-YYYYMMDD.sql +``` + ## etcd 스냅샷 백업 K3s datastore인 외부 etcd 클러스터의 스냅샷 백업.