diff --git a/history/2026-05-07-longhorn-1-11-2-upgrade.md b/history/2026-05-07-longhorn-1-11-2-upgrade.md new file mode 100644 index 0000000..b120297 --- /dev/null +++ b/history/2026-05-07-longhorn-1-11-2-upgrade.md @@ -0,0 +1,91 @@ +--- +date: 2026-05-07 +topic: Longhorn 1.11.1 → 1.11.2 patch upgrade +areas: [infra/platform/longhorn] +--- + +# 2026-05-07 / Longhorn 1.11.1 → 1.11.2 업그레이드 + +## 동기 + +v1.11.2 GA (2026-05-05 06:11 UTC, [release notes](https://github.com/longhorn/longhorn/releases/tag/v1.11.2)) 백포트 [#12856](https://github.com/longhorn/longhorn/issues/12856) 적용 — `snapshot becomes not ready to use` Warning 회귀 fix. 2026-05-02 도입한 임시 cron `longhorn-snapshot-purge` 가 릴리스 직전까지 운영 안전망 역할을 했고, 이번 업그레이드로 정식 fix 적용. + +## 사전 점검 + +- 4 노드 Ready (kr2 도 회복 — 5월 4일 leewell 인시던트 이후 정상 복구) +- 25 volumes attached/healthy +- backup target available, last sync 5분 전 (강제 backup 트리거 불필요) +- helm rev 5, chart longhorn-1.11.1, app v1.11.1 +- helm chart 1.11.2 가용 +- breaking change 없음 (release notes 검토) + +## 업그레이드 단계 + +### 1) helm upgrade + +``` +helm upgrade longhorn longhorn/longhorn -n longhorn-system \ + --version 1.11.2 --reset-then-reuse-values +→ NAMESPACE: longhorn-system STATUS: deployed REVISION: 6 +``` + +values 그대로 (defaultSettings: nodeDownPodDeletionPolicy / nodeDrainPolicy / replicaAutoBalance). + +### 2) longhorn-manager DS 롤링 + +``` +Waiting for daemon set "longhorn-manager" rollout to finish: 2 of 4 updated pods are available... +Waiting for daemon set "longhorn-manager" rollout to finish: 3 of 4 updated pods are available... +daemon set "longhorn-manager" successfully rolled out +``` + +4/4 pod 2 컨테이너 모두 Running, 25초 내 완료. + +### 3) 신규 engine image 배포 + +``` +ei-75a03ec3 deployed longhorn-engine:v1.11.1 refcount=125 +ei-c9fa6d45 deploying longhorn-engine:v1.11.2 refcount=0 +``` + +70초 후 신규 EI 4/4 deployed. + +### 4) 모든 볼륨 live engine upgrade + +```bash +NEW_IMG="docker.io/longhornio/longhorn-engine:v1.11.2" +for v in $(kubectl -n longhorn-system get volumes.longhorn.io --no-headers -o custom-columns=:.metadata.name); do + kubectl -n longhorn-system patch volume.longhorn.io $v --type=merge \ + -p "{\"spec\":{\"image\":\"$NEW_IMG\"}}" +done +``` + +25 볼륨 모두 patched. 약 30초 내 전수 `status.currentImage` = `v1.11.2`, 25 볼륨 attached/healthy 유지. + +## 사후 관측 (35분) + +업그레이드 직후 baseline 시각 (`2026-05-06T22:37:42Z`) 이후의 Warning 만 카운트: + +``` +T+1m ~ T+30m warn_after_baseline=0 stuck_snap_CR=0 vol_unhealthy=0 +T+22m (08:00 KST = 23:00 UTC) — critical-snapshot RecurringJob 정시 사이클 통과 +``` + +- **stuck CR 즉시 0** — 업그레이드 직후 manager ownership reset 흐름 회복으로 12개 CR 자연 cleanup +- **신규 Warning 0건** — 23:00 UTC RecurringJob 사이클에서도 발생 안 함 +- **볼륨 헬스 100% 유지** — engine upgrade 동안 단 한 건도 unhealthy 진입 없음 + +#12856 fix 가 즉시 효과 발휘. + +## 후속 + +1. **임시 cron 회수 작업** (별건). ArgoCD `longhorn-snapshot-purge` Application 삭제, helm-charts repo 의 chart 디렉토리는 재현 시 재활용 위해 보존. +2. 구 EI `ei-75a03ec3` (v1.11.1) refcount 0 확인 후 manager 자동 정리 (기본 timeout ~10분). +3. 다음 출시 (v1.11.3 또는 v1.12.x) 까지 별다른 작업 없음. 이번 fix 가 backport 라 v1.12 에도 동일 fix 포함될 것. + +## 산출물 + +- helm rev 5 → 6 +- chart longhorn-1.11.1 → longhorn-1.11.2 +- engine image v1.11.1 → v1.11.2 (25/25 볼륨) +- Outline `heimdall/2026-05-07 longhorn 1.11.2 업그레이드` 참조 diff --git a/infra/platform/longhorn.md b/infra/platform/longhorn.md index bd15845..2e7b3e9 100644 --- a/infra/platform/longhorn.md +++ b/infra/platform/longhorn.md @@ -1,6 +1,6 @@ --- title: Longhorn 분산 블록 스토리지 -updated: 2026-05-02 +updated: 2026-05-07 tags: [infra, platform, longhorn, storage, k3s] --- @@ -11,7 +11,7 @@ Longhorn은 K3s 클러스터의 **분산 블록 스토리지**. 각 노드 로 | 항목 | 값 | |---|---| | Helm release | `longhorn` (ns `longhorn-system`) | -| Chart / App | `longhorn-1.11.1` / `v1.11.1` | +| Chart / App | `longhorn-1.11.2` / `v1.11.2` | | 노드 | incus-kr1, incus-kr2, incus-hp1, incus-hp2 (4) | | Data engine | v1 (v2 미사용) | | Default data path | `/var/lib/longhorn/` | @@ -20,17 +20,17 @@ Longhorn은 K3s 클러스터의 **분산 블록 스토리지**. 각 노드 로 | 정적 복구 SC | `longhorn-static` (Volume CR 경유 복구 시) | | Backup target | `s3://longhorn-backup@auto/` (Cloudflare R2) — [[../data/k3s-backup|k3s-backup]] 참조 | -## 컴포넌트 (helm rev 5 기준) +## 컴포넌트 (helm rev 6 기준) | 컴포넌트 | 종류 | 이미지 | |---|---|---| -| longhorn-manager | DaemonSet | `longhorn-manager:v1.11.1` + `longhorn-share-manager:v1.11.1` | -| longhorn-csi-plugin | DaemonSet | `csi-node-driver-registrar:v2.16.0`, `livenessprobe:v2.18.0`, `longhorn-manager:v1.11.1` | -| longhorn-driver-deployer | Deployment (1) | `longhorn-manager:v1.11.1` | -| longhorn-ui | Deployment (2) | `longhorn-ui:v1.11.1` | +| longhorn-manager | DaemonSet | `longhorn-manager:v1.11.2` + `longhorn-share-manager:v1.11.2` | +| longhorn-csi-plugin | DaemonSet | `csi-node-driver-registrar:v2.16.0`, `livenessprobe:v2.18.0`, `longhorn-manager:v1.11.2` | +| longhorn-driver-deployer | Deployment (1) | `longhorn-manager:v1.11.2` | +| longhorn-ui | Deployment (2) | `longhorn-ui:v1.11.2` | | csi-attacher / provisioner / resizer / snapshotter | Deployment (3 replicas each) | `csi-attacher:v4.x`, `csi-provisioner:v5.x`, `csi-resizer:v1.x`, `csi-snapshotter:v8.x` | -| engine-image | DaemonSet (per-version) | `longhorn-engine:v1.11.1` (ei-75a03ec3) | -| instance-manager | per-node per-version | `longhorn-instance-manager:v1.11.1` | +| engine-image | DaemonSet (per-version) | `longhorn-engine:v1.11.2` (ei-c9fa6d45). 신규 EI 적용 후 모든 25 볼륨 live engine upgrade 완료, 구 EI `ei-75a03ec3` (v1.11.1) 는 refcount 0 으로 자동 정리 대기 | +| instance-manager | per-node per-version | `longhorn-instance-manager:v1.11.2` | ## Helm values (커스텀) @@ -57,11 +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 워크어라운드 — 회수 대상) -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 를 즉시 재추가해 정리 불가. +> **상태 (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 보존 (재현 시 재활용 가능). -근본 fix 는 **v1.11.2 / v1.12 업그레이드**. 그때까지 임시로 snapshotPurge API 를 cron 으로 자동 호출해 engine 단의 chain cleanup 을 주기적으로 트리거. +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 을 주기 트리거했다. ### 구성 @@ -100,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|history]] +상세 도입 기록: [[../../history/2026-05-02-longhorn-snapshot-purge-cron|2026-05-02 도입]] / [[../../history/2026-05-07-longhorn-1-11-2-upgrade|2026-05-07 fix 적용]] ## 업그레이드 절차 (표준) @@ -118,6 +120,18 @@ minor skip 금지 — 한 단계씩 순차. 각 단계 공통: ## 최근 버전 변경 +### 2026-05-07: 1.11.1 → 1.11.2 (patch, snapshot warning 회귀 fix) + +| 단계 | Helm rev | Chart | 결과 | +|---|---|---|---| +| 1.11.1 → 1.11.2 | 6 | longhorn-1.11.2 | 25/25 볼륨 healthy | + +- 백포트 [#12856](https://github.com/longhorn/longhorn/issues/12856) 적용 — `snapshot becomes not ready to use` Warning 사이클 해소 +- 업그레이드 직후 stuck CR 12개 자연 cleanup (manager ownership reset 흐름 회복) +- 35분 관측 동안 신규 Warning 0건, 23:00 UTC `critical-snapshot` RecurringJob 사이클 통과 +- 신규 EI `ei-c9fa6d45` (v1.11.2), 25 볼륨 모두 live engine upgrade 완료 +- 상세: [[../../history/2026-05-07-longhorn-1-11-2-upgrade|history]] + ### 2026-04-23: 1.8.2 → 1.11.1 (3단계 minor 순차) | 단계 | Helm rev | Chart | 결과 |