--- title: Longhorn 분산 블록 스토리지 updated: 2026-04-23 tags: [infra, platform, longhorn, storage, k3s] --- ## 개요 Longhorn은 K3s 클러스터의 **분산 블록 스토리지**. 각 노드 로컬 NVMe에 replica 분산 저장, CSI 드라이버로 PV/PVC 공급. 기본 StorageClass `longhorn` (default), 정적 복구용 `longhorn-static`. | 항목 | 값 | |---|---| | Helm release | `longhorn` (ns `longhorn-system`) | | Chart / App | `longhorn-1.11.1` / `v1.11.1` | | 노드 | incus-kr1, incus-kr2, incus-hp1, incus-hp2 (4) | | Data engine | v1 (v2 미사용) | | Default data path | `/var/lib/longhorn/` | | Default replica count | 2 (`{"v1":"2","v2":"2"}`) | | Default SC | `longhorn` — WaitForFirstConsumer 아님, Immediate / ReclaimPolicy Delete / ExpansionAllowed true | | 정적 복구 SC | `longhorn-static` (Volume CR 경유 복구 시) | | Backup target | `s3://longhorn-backup@auto/` (Cloudflare R2) — [[../data/k3s-backup|k3s-backup]] 참조 | ## 컴포넌트 (helm rev 5 기준) | 컴포넌트 | 종류 | 이미지 | |---|---|---| | 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` | | 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` | ## Helm values (커스텀) ```yaml defaultSettings: nodeDownPodDeletionPolicy: delete-both-statefulset-and-deployment-pod nodeDrainPolicy: always-allow replicaAutoBalance: best-effort ``` - `nodeDownPodDeletionPolicy`: 노드 다운 시 StatefulSet / Deployment 파드 양쪽 모두 강제 삭제하여 PV 재attach 허용 - `nodeDrainPolicy: always-allow`: `kubectl drain` 시 볼륨 attach 여부 무관하게 허용 - `replicaAutoBalance: best-effort`: 노드 간 replica 분포 자동 밸런싱 시도 ## UI - https://longhorn.inouter.com — Traefik IngressRoute 경유 - 백업 탭에서 R2 저장된 backup volume / snapshot 시각 확인 ## 볼륨 운영 - 기본 PVC 생성: StorageClass `longhorn` (default) - 백업/복구·라벨 기반 recurring job: [[../data/k3s-backup|k3s-backup]] - 복구 시 주의: `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]]) ## 업그레이드 절차 (표준) minor skip 금지 — 한 단계씩 순차. 각 단계 공통: 1. Pre-check: 볼륨 healthy/attached, backup target available, ongoing snapshot 없음, 4노드 Ready 2. `helm upgrade longhorn longhorn/longhorn -n longhorn-system --version --reset-then-reuse-values` 3. `longhorn-manager` DS 롤링 대기 4. 신규 `engine-image` DS 4/4 state=deployed 확인 5. 모든 볼륨 `spec.image` 를 신규 engine image 로 일괄 패치 (live engine upgrade, v1 data engine) 6. `status.currentImage` 전수 확인 7. 구 engine-image CR refcount=0 확인 — Longhorn 자동 정리 대상 구 engine-image CR 과 구 instance-manager pod 는 refcount 0 확인 후 manager가 자동 정리 (기본 timeout ~10분). 수동 삭제 불필요. ## 최근 버전 변경 ### 2026-04-23: 1.8.2 → 1.11.1 (3단계 minor 순차) | 단계 | Helm rev | Chart | 결과 | |---|---|---|---| | 1.8.2 → 1.9.2 | 3 | longhorn-1.9.2 | 27/27 볼륨 healthy | | 1.9.2 → 1.10.2 | 4 | longhorn-1.10.2 | 27/27 볼륨 healthy | | 1.10.2 → 1.11.1 | 5 | longhorn-1.11.1 | 27/27 볼륨 healthy | - 전 단계 live engine upgrade (v1 data engine만 사용 중이라 가능) - 전 단계 무중단 — attached 25 + detached 2(safeline) 볼륨 전수 신규 엔진 이미지로 이행 - 각 단계 breaking change 없음 (공식 릴리스 노트 기준) - 상세 로그·검증 스냅샷: Outline `heimdall/2026-04-23 Longhorn 업그레이드` (id `750faea0-6720-4e27-b219-0942247d53aa`) ## 관련 문서 - [[../data/k3s-backup|k3s-backup]] — Longhorn → R2 백업 구성, 라벨 기반 recurring job, 복구 절차 - [[../data/storage-plan|storage-plan]] — 스토리지 전략 전반 - [[../compute/infra-hosts|infra-hosts]] — Helm 릴리스 전수 인벤토리