diff --git a/history/2026-05-09-longhorn-snapshot-purge-cron-removal.md b/history/2026-05-09-longhorn-snapshot-purge-cron-removal.md new file mode 100644 index 0000000..df27afd --- /dev/null +++ b/history/2026-05-09-longhorn-snapshot-purge-cron-removal.md @@ -0,0 +1,66 @@ +--- +date: 2026-05-09 +topic: Longhorn snapshot-purge 임시 cron 회수 +areas: [infra/platform/longhorn] +--- + +# 2026-05-09 / longhorn-snapshot-purge cron 회수 + +## 동기 + +2026-05-02 도입한 임시 cron `longhorn-snapshot-purge` (v1.11.1 snapshot 회귀 [#12856](https://github.com/longhorn/longhorn/issues/12856) 우회용) 가 2026-05-07 v1.11.2 업그레이드 (Outline `a0a5ad90-68ed-4939-bbc1-1e20cd25f874`) 로 fix 적용되어 의미 사라짐. 이틀 안정 운영 후 회수. + +## 사전 상태 + +- ArgoCD Application `longhorn-snapshot-purge` Synced/Healthy, `automated.prune=true` +- CronJob `longhorn-system/longhorn-snapshot-purge` 마지막 실행 26초 전 +- ns Warning 0건 +- stuck snapshot CR 0개 +- helm-charts repo 의 `charts/longhorn-snapshot-purge/` 디렉토리 그대로 + +## 회수 단계 + +### ArgoCD Application 삭제 (cascade prune) + +```bash +kubectl -n argocd patch application longhorn-snapshot-purge --type=merge \ + -p '{"metadata":{"finalizers":["resources-finalizer.argocd.argoproj.io"]}}' +kubectl -n argocd delete application longhorn-snapshot-purge --wait=false +``` + +`resources-finalizer.argocd.argoproj.io` 추가로 cascade prune 트리거. ArgoCD 가 `automated.prune=true` 이므로 deployed 리소스 자동 정리. + +### prune 완료 대기 + +CronJob `longhorn-snapshot-purge` 사라질 때까지 폴링. 시작 후 약 수십 초 내 prune 완료. + +### chart 디렉토리 보존 + +`gitea.inouter.com/kaffa/helm-charts` repo 의 `charts/longhorn-snapshot-purge/` 는 그대로 남김. 향후 동일 회귀 발생 시 재활용 가능. + +## 사후 검증 + +``` +$ kubectl -n longhorn-system get cronjob,sa,role,rolebinding | grep snapshot-purge +(no match) + +$ kubectl -n argocd get application longhorn-snapshot-purge +Error: NotFound + +$ ls /tmp/helm-charts/charts/longhorn-snapshot-purge/ +Chart.yaml templates values.yaml ← 보존됨 +``` + +회수 후 5분 폴링 (1분 간격, 5회): + +``` +T+1m ~ T+5m warn_after_baseline=0 stuck_CR=0 +``` + +회귀 신호 없음. + +## 후속 + +- 다음 v1.11.x / v1.12 업그레이드 시 이 임시 cron chart 는 무관 — 정본 helm release 만 다룸 +- 만약 v1.11.x 후속 패치에서 동일 회귀 재현 시 chart 디렉토리 그대로 ArgoCD Application 만 재배포로 복구 가능 +- 본 회수로 longhorn-system 의 ArgoCD App 의존이 다시 0 (longhorn 본체는 helm 직접 관리 그대로 유지) diff --git a/infra/platform/longhorn.md b/infra/platform/longhorn.md index 2e7b3e9..c6dcff5 100644 --- a/infra/platform/longhorn.md +++ b/infra/platform/longhorn.md @@ -1,6 +1,6 @@ --- title: Longhorn 분산 블록 스토리지 -updated: 2026-05-07 +updated: 2026-05-09 tags: [infra, platform, longhorn, storage, k3s] --- @@ -57,13 +57,13 @@ defaultSettings: - 복구 시 주의: `longhorn.io/fromBackup` annotation은 Longhorn v1.8+ CSI에서 무시됨 → Volume CR 직접 생성 후 `longhorn-static` SC PV 만드는 절차. 상세 [[../data/k3s-backup|k3s-backup]] - 주기 백업 라벨 키는 **대시 포함**: `recurring-job-group.longhorn.io/=enabled` (과거 오타 이슈 [[../../history/2026-04-15-longhorn-backup-label-typo|history]]) -## Stuck snapshot 임시 cron (v1.11.1 워크어라운드 — 회수 대상) +## Stuck snapshot 임시 cron (v1.11.1 워크어라운드 — 2026-05-09 회수 완료) -> **상태 (2026-05-07): v1.11.2 업그레이드로 fix 적용됨** — 업그레이드 직후 stuck CR 12개 자연 cleanup, 23:00 UTC RecurringJob 사이클부터 신규 Warning 0건. 임시 cron 은 **회수 대상**. ArgoCD `longhorn-snapshot-purge` Application 만 삭제, chart 디렉토리는 repo 보존 (재현 시 재활용 가능). +> **상태 (2026-05-09): 회수 완료**. ArgoCD Application `longhorn-snapshot-purge` 삭제 (cascade prune 으로 CronJob / SA / Role / RoleBinding 자동 정리). helm-charts repo 의 chart 디렉토리는 재현 시 재활용 위해 **보존**. 회수 5분 사후 관측 신규 Warning / stuck CR 0건. -v1.11.1 instance-manager 재시작 후 일부 snapshot CR 이 `status.markRemoved=true && status.readyToUse=false && status.ownerID=""` 상태로 멈췄다. ownerId 가 비어 longhorn-manager 가 reconcile 못 했고, 수동 `kubectl delete` / finalizer patch 시 admission webhook 이 finalizer 를 즉시 재추가해 정리 불가했다. +(과거 기록) v1.11.1 instance-manager 재시작 후 일부 snapshot CR 이 `status.markRemoved=true && status.readyToUse=false && status.ownerID=""` 상태로 멈췄다. ownerId 가 비어 longhorn-manager 가 reconcile 못 했고, 수동 `kubectl delete` / finalizer patch 시 admission webhook 이 finalizer 를 즉시 재추가해 정리 불가였다. -근본 fix 는 **v1.11.2 백포트 [#12856](https://github.com/longhorn/longhorn/issues/12856)**. 그 전까지 임시로 snapshotPurge API 를 cron 으로 자동 호출해 engine 단 chain cleanup 을 주기 트리거했다. +근본 fix 는 **v1.11.2 백포트 [#12856](https://github.com/longhorn/longhorn/issues/12856)** (2026-05-07 적용). 그 전까지 임시로 snapshotPurge API 를 cron 으로 자동 호출해 engine 단 chain cleanup 을 주기 트리거했다. ### 구성 @@ -102,7 +102,7 @@ kubectl -n longhorn-system logs -l job-name --tail=50 --selector='batch.kubernet kubectl get snapshots.longhorn.io -A -o json | jq '[.items[] | select(.status.markRemoved == true and .status.readyToUse == false)] | length' ``` -상세 도입 기록: [[../../history/2026-05-02-longhorn-snapshot-purge-cron|2026-05-02 도입]] / [[../../history/2026-05-07-longhorn-1-11-2-upgrade|2026-05-07 fix 적용]] +상세 도입 기록: [[../../history/2026-05-02-longhorn-snapshot-purge-cron|2026-05-02 도입]] / [[../../history/2026-05-07-longhorn-1-11-2-upgrade|2026-05-07 fix 적용]] / [[../../history/2026-05-09-longhorn-snapshot-purge-cron-removal|2026-05-09 회수]] ## 업그레이드 절차 (표준)