From 738a60b093fe806964f8f5726c670f65441e5d9e Mon Sep 17 00:00:00 2001 From: heimdall Date: Thu, 23 Apr 2026 09:06:21 +0900 Subject: [PATCH] =?UTF-8?q?longhorn:=201.8.2=20->=201.11.1=20=EC=97=85?= =?UTF-8?q?=EA=B7=B8=EB=A0=88=EC=9D=B4=EB=93=9C=20(2026-04-23)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/compute/infra-hosts.md | 4 +- infra/platform/_index.md | 3 +- infra/platform/longhorn.md | 93 ++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 infra/platform/longhorn.md diff --git a/infra/compute/infra-hosts.md b/infra/compute/infra-hosts.md index 5aec35c..07f882e 100644 --- a/infra/compute/infra-hosts.md +++ b/infra/compute/infra-hosts.md @@ -131,7 +131,7 @@ HP ProLiant DL360p Gen8 iLO 4 관리 포트. MAC 기반 고정 할당 (uci `dhcp | argocd | argocd | argo-cd-9.4.16 | v3.3.5 | | cert-manager | cert-manager | cert-manager-v1.20.0 | v1.20.0 | | gitea | gitea | gitea-12.5.0 | 1.25.4 | -| longhorn | longhorn-system | longhorn-1.8.2 | v1.8.2 | +| longhorn | longhorn-system | longhorn-1.11.1 | v1.11.1 | | metallb | metallb-system | metallb-0.15.3 | v0.15.3 | | n8n | n8n | n8n-2.0.1 | 1.122.4 | | nfs-provisioner | nfs-provisioner | nfs-subdir-external-provisioner-4.0.18 | 4.0.2 | @@ -179,7 +179,7 @@ db (proxysql, pgcat), kroki, mq (RabbitmqCluster CR), openmemory (mcp/ui/qdrant) | cert-manager | K3s 클러스터 (cert-manager ns) | kubectl | | [[gitea]] | K3s 클러스터 (gitea ns): gitea, postgresql, valkey | kubectl, gitea.inouter.com | | Kroki | K3s 클러스터 (kroki ns) | kubectl | -| Longhorn | K3s 클러스터 (longhorn-system ns): 분산 스토리지 v1.8.2 | kubectl | +| [[../platform/longhorn]] | K3s 클러스터 (longhorn-system ns): 분산 스토리지 v1.11.1 | kubectl | | n8n | K3s 클러스터 (n8n ns, Helm) | kubectl | | NocoDB | K3s 클러스터 (tools ns, kubectl 직접) | kubectl, nocodb.inouter.com | | OpenMemory | K3s 클러스터 (openmemory ns): mcp, ui, qdrant | kubectl | diff --git a/infra/platform/_index.md b/infra/platform/_index.md index 904d93b..91d899b 100644 --- a/infra/platform/_index.md +++ b/infra/platform/_index.md @@ -1,6 +1,6 @@ --- title: platform 인덱스 -updated: 2026-04-21 +updated: 2026-04-23 tags: [moc, platform] --- @@ -14,6 +14,7 @@ tags: [moc, platform] | [[infra-forge]] | Forge 인프라 에이전트 (지식 베이스 + LLM 보고) | | [[infra-tofu]] | 인프라 프로비저닝 (OpenTofu) | | [[kaniko]] | Kaniko K8s 네이티브 컨테이너 이미지 빌드 | +| [[longhorn]] | Longhorn 분산 블록 스토리지 (K3s) | | [[ollama]] | Ollama LLM 로컬 추론 엔드포인트 (kr1 호스트) | | [[outline]] | Outline Wiki (팀 문서 관리) | | [[victorialogs]] | VictoriaLogs K3s 로그 저장소 | diff --git a/infra/platform/longhorn.md b/infra/platform/longhorn.md new file mode 100644 index 0000000..010df56 --- /dev/null +++ b/infra/platform/longhorn.md @@ -0,0 +1,93 @@ +--- +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 릴리스 전수 인벤토리