Files
obsidian/ops-agents/heimdall/history/2026-04-20-k3s-detailed-inspection.md
heimdall 0d1bf40cfe history: 2026-04-20 K3s 상세 점검 리포트
Outline 업로드가 BunnyCDN Shield 403 으로 상세 본문 차단되어
요청자(kappa) 열람 경로를 Obsidian history 로 대체. Outline
parent 요약 문서 ID: c1ec3f2c-0fa8-49f8-9d0b-3d619a0e4715.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 19:11:06 +09:00

336 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: 2026-04-20
topic: K3s 상세 점검 (기본 점검 이후 심화)
areas:
- infra/k8s/overview
- infra/data/longhorn
- infra/platform/argocd
- infra/observability/vector
---
# 2026-04-20 K3s 상세 점검
수집 시점 **2026-04-20 19:10 KST**. K3s v1.34.5+k3s1, containerd 2.1.5, Longhorn 1.8.2. 요청자: kappa.
## 종합 판정
| 섹션 | 판정 | 핵심 |
|---|---|---|
| 1. 노드 | OK | 전 노드 req/lim 40% 이하 |
| 2. NS 리소스 | OK | apisix mem 1위 3456Mi |
| 3. 파드 이슈 | OK | CrashLoop 0 |
| 4. PV/PVC | OK | 26 PVC 모두 Bound |
| 5. Longhorn | OK | 25 볼륨 healthy, 스냅샷 97/97 |
| 6. ArgoCD 14앱 | OK | 14/14 Synced+Healthy |
| 7. cert-manager | OK | 최단 62일 |
| 8. 네트워크 | OK | metallb 14%, 라우팅 24개 |
| 9. Helm 28 releases | OK | 모두 deployed |
| 10. 오늘 변경 | OK | 4/4 반영 |
| 11. graphify | OK | 불일치 없음 |
---
## 1. 노드 상세 — OK
### Capacity / Allocatable / Kernel
| Node | Role | CPU cap | Mem cap | Mem alloc | Kernel | Ready since |
|---|---|---|---|---|---|---|
| incus-hp1 | worker | 32 | 198.0 Gi | 198.0 Gi | 6.12.74+deb13+1 | 2026-04-19 12:43 |
| incus-hp2 | worker | 32 | 198.0 Gi | 198.0 Gi | 6.12.74+deb13+1 | 2026-04-13 19:51 |
| incus-kr1 | control-plane | 28 | 65.7 Gi | 65.7 Gi | 6.12.74+deb13+1 | 2026-04-16 07:33 |
| incus-kr2 | control-plane | 16 | 32.0 Gi | 21.6 Gi | 6.12.74+deb13+1 | 2026-04-19 12:08 |
kr2 `alloc mem` 21.6Gi < capacity 32Gi → 10.4Gi system-reserved. 타 노드 reserve 없음 (의도성 확인 여지).
### Requests / Limits
| Node | CPU req / lim | Mem req / lim |
|---|---|---|
| incus-hp1 | 5 (15%) / 420m (1%) | 4680 Mi (2%) / 11236 Mi (5%) |
| incus-hp2 | 5.7 (17%) / 1.8 (5%) | 7593 Mi (3%) / 18584 Mi (9%) |
| incus-kr1 | 5.34 (19%) / 5.8 (20%) | 3477 Mi (5%) / 8058 Mi (12%) |
| incus-kr2 | 2.29 (14%) / 400m (2%) | 1654 Mi (7%) / 3514 Mi (16%) |
전 노드 req/lim 40% 이하. 성장 여유 충분.
### Pressure / PLEG
전 노드 MemoryPressure/DiskPressure/PIDPressure=False. `reason=PLEGUnhealthy` 이벤트 0건.
### Longhorn 디스크 사용률
| Node | Available | Maximum | Scheduled | 사용률 |
|---|---|---|---|---|
| incus-hp1 (nvme) | 909 Gi | 938 Gi | 65 Gi | 3.1% |
| incus-hp2 | 895 Gi | 938 Gi | 137 Gi | 4.6% |
| incus-kr1 | 798 Gi | 936 Gi | 137 Gi | 14.7% |
| incus-kr2 | 798 Gi | 936 Gi | 64 Gi | 14.8% |
`/var/lib/rancher` 측정 미수행 (heimdall 컨테이너에서 호스트 SSH 불가). 다음 점검에서 longhorn-manager daemonset exec 경로로 수집.
---
## 2. NS 리소스 상위 10 — OK
파드 단위 CPU/메모리 request 합계 기준.
| # | Namespace | Pods | CPU req (core) | Mem req (MiB) |
|---|---|---|---|---|
| 1 | apisix | 7 | 0.64 | 3 456 |
| 2 | monitoring | 10 | 0.27 | 2 162 |
| 3 | kube-system | 22 | 1.45 | 1 770 |
| 4 | teable | 2 | 0.15 | 832 |
| 5 | logging | 5 | 0.30 | 768 |
| 6 | open-webui | 1 | 0.10 | 768 |
| 7 | teleport | 3 | 0.60 | 768 |
| 8 | openmemory | 3 | 0.15 | 704 |
| 9 | metallb-system | 5 | 0.00 | 640 |
| 10 | argocd | 7 | 0.20 | 600 |
apisix 메모리 1위 (etcd 3-member + dashboard + ingress-controller).
---
## 3. 파드 레벨 이슈 — OK
| 지표 | 값 |
|---|---|
| CrashLoopBackOff | 0 |
| Pending | 0 |
| Unknown | 0 |
| Non-Running pods | 0 |
| 재시작 ≥1회 (lifetime) | 28 |
재시작 누적 상위 10 (lifetime, 최근 6h 아님):
| NS | Pod | Restarts |
|---|---|---|
| democratic-csi | synology-iscsi-node-hlsr2 | 8 |
| longhorn-system | longhorn-csi-plugin-cqndq | 6 |
| monitoring | vm-stack-vmop | 5 |
| democratic-csi | synology-iscsi-node-287g6 | 5 |
| longhorn-system | longhorn-manager-l5smc | 4 |
| longhorn-system | csi-resizer-qk99l | 4 |
| kube-system | kube-multus-ds-sk7hh | 4 |
| longhorn-system | longhorn-csi-plugin-dt5hg | 3 |
| longhorn-system | longhorn-csi-plugin-97ssq | 3 |
| longhorn-system | csi-provisioner-vfbj2 | 3 |
재시작은 누적. "최근 6h" 판정 위해서는 `lastTerminated` 시각 필요 (본 점검에서 미수집). CrashLoop 0 이라 영향 없음. **주의**: democratic-csi 8회는 iSCSI 노드 드라이버 특성상 높은 편 — 원인 확인 여지.
---
## 4. PV / PVC — OK
| StorageClass | PVC 수 | Bound | Pending | Provisioner |
|---|---|---|---|---|
| longhorn | 25 | 25 | 0 | driver.longhorn.io |
| nfs (legacy 1개) | 1 | 1 | 0 | cluster.local/...nfs-subdir-external-provisioner |
| synology-iscsi | 0 | — | — | org.democratic-csi.iscsi.synology (준비됨, 미사용) |
| local-path | 0 | — | — | rancher.io/local-path |
| **합계** | **26** | **26** | **0** | |
기본 SC 2개 공존 (`local-path`, `longhorn`). **주의**: 이중 default 는 권장되지 않음 — 정리 검토.
---
## 5. Longhorn 디테일 — OK
### 볼륨/Replica 요약
- 전체 볼륨: **25** (모두 attached+healthy)
- 전체 replica: **72** 개, 모두 running, failedAt="", rebuildRetryCount=0
- 배치: hp2 25, kr1 25, kr2 15, **hp1 3** (신규 노드, rebalance 미완)
### Replica 정책
| numberOfReplicas | 볼륨 수 |
|---|---|
| 3 | 18 |
| 2 | 7 (safeline 7개: chaos/tengine-logs/detector-logs/luigi/mgt/detector/database) |
**주의**: safeline 2-replica 정책 의도성 확인 필요. 2-replica 는 단일 노드 장애 시 복구 안전지대 없음.
### 최근 6h 스냅샷
| 구분 | 성공 | 실패 |
|---|---|---|
| critical-snapshot (hourly) | 91 | 0 |
| standard-snapshot (daily 18:00) | 6 | 0 |
| **합계** | **97** | **0** |
### RecurringJob
| Name | Schedule | Retain | Task |
|---|---|---|---|
| critical-snapshot | `0 * * * *` | 24 | snapshot |
| critical-backup | `0 */6 * * *` | 28 | backup |
| standard-snapshot | `0 18 * * *` | 7 | snapshot |
| standard-backup | `0 19 * * *` | 7 | backup |
graphify `K3s Backup Pipeline` / `Longhorn RecurringJob (4 jobs)` 노드와 일치.
---
## 6. ArgoCD 14 앱 — OK
| App | Sync | Health | Last Sync (UTC) | Revision |
|---|---|---|---|---|
| bunnycdn-mcp | Synced | Healthy | 2026-04-13 07:03 | f9054536 |
| cfb-manager | Synced | Healthy | 2026-04-13 07:30 | 07dd408c |
| juiceshop | Synced | Healthy | 2026-04-13 06:43 | 550488f8 |
| kroki | Synced | Healthy | 2026-04-13 06:43 | 550488f8 |
| namecheap-api | Synced | Healthy | 2026-04-13 06:43 | 550488f8 |
| nas-proxy | Synced | Healthy | 2026-04-13 06:43 | 550488f8 |
| openmemory | Synced | Healthy | 2026-04-19 05:56 | c572d356 |
| outline | Synced | Healthy | 2026-04-19 05:56 | c572d356 |
| pgpool | Synced | Healthy | 2026-04-16 07:39 | 0a94c94f |
| proxysql | Synced | Healthy | 2026-04-13 06:43 | 550488f8 |
| searxng | Synced | Healthy | 2026-04-13 06:43 | 550488f8 |
| smtp-relay | Synced | Healthy | 2026-04-13 07:30 | 07dd408c |
| vault-mcp | Synced | Healthy | 2026-04-13 06:53 | 0f5a662a |
| vultr-api | Synced | Healthy | 2026-04-13 06:43 | 550488f8 |
- 14/14 Synced + Healthy
- 전 앱 `operationState.phase=Succeeded`
- 가장 오래된 sync 2026-04-13 (7일 전) — auto-sync 하 드리프트 없음
---
## 7. cert-manager — OK
| Certificate | Domain | Ready | NotAfter (UTC) | 만료까지 (일) |
|---|---|---|---|---|
| wildcard-actions-it-com | *.actions.it.com | True | 2026-06-21 18:19 | 62 |
| wildcard-anvil-it-com | *.anvil.it.com | True | 2026-06-21 18:14 | 62 |
| wildcard-api-inouter | *.api.inouter.com | True | 2026-06-24 02:54 | 64 |
| wildcard-inouter | *.inouter.com | True | 2026-06-21 18:12 | 62 |
| wildcard-ironclad-it-com | *.ironclad.it.com | True | 2026-06-21 18:12 | 62 |
| wildcard-keepanker-cv | *.keepanker.cv | True | 2026-06-21 18:12 | 62 |
| wildcard-mcp-inouter | *.mcp.inouter.com | True | 2026-06-24 03:56 | 64 |
| wildcard-servidor-it-com | *.servidor.it.com | True | 2026-06-21 18:12 | 62 |
30일 이내 만료 0건. 최단 잔여 62일.
---
## 8. 네트워크 — OK
### MetalLB
- Pool: `default-pool` = `192.168.9.50-192.168.9.99` (50 IPs)
- 할당: 7 / 50 (14%)
| IP | Namespace | Service |
|---|---|---|
| 192.168.9.50 | apisix | apisix-gateway |
| 192.168.9.51 | sshpiper | sshpiper |
| 192.168.9.52 | teleport | teleport-cluster |
| 192.168.9.53 | kube-system | traefik |
| 192.168.9.54 | gitea | gitea-ssh |
| 192.168.9.55 | sftpgo | sftpgo |
| 192.168.9.56 | db | haproxy-pg |
### 라우팅 리소스
| 타입 | 개수 | 비고 |
|---|---|---|
| Traefik IngressRoute | 13 | argocd-server, bunnycdn-mcp-tls, longhorn-ui(+tls), nas-proxy-tls, open-webui-tls, outline, portainer-tls, teable-tls, vault-mcp(+hcv)-tls, vector, vlogs |
| Gateway API HTTPRoute | 11 | argocd, bunnycdn-mcp, gitea, grafana, kroki, n8n, nocodb, openmemory-mcp, safeline-mgt, searxng, sftpgo-web |
| APISIXRoute | 0 | APISIX 설치됨(helm)이나 CR 미사용 |
| Ingress | 0 | |
graphify `Traefik DaemonSet + Gateway API`, `APISIX→Traefik 메인 라우팅 전환` 기록과 정합.
---
## 9. Helm releases — OK
**28개** 릴리스, 모두 `deployed`.
| NS | Release | Chart | App Ver | Updated |
|---|---|---|---|---|
| apisix | apisix | apisix-2.13.0 | 3.15.0 | 2026-04-20 08:21 |
| apisix | apisix-ingress-controller | apisix-ingress-controller-1.1.2 | 2.0.1 | 2026-04-19 14:53 |
| argocd | argocd | argo-cd-9.4.16 | v3.3.5 | **2026-04-20 12:01** |
| cert-manager | cert-manager | cert-manager-v1.20.0 | v1.20.0 | 2026-04-19 14:54 |
| kube-system | descheduler | descheduler-0.35.1 | 0.35.1 | 2026-04-19 14:25 |
| external-secrets | external-secrets | external-secrets-2.3.0 | v2.3.0 | 2026-04-19 14:55 |
| gitea | gitea | gitea-12.5.0 | 1.25.4 | 2026-04-19 14:54 |
| db | haproxy-pg | haproxy-pg-0.1.0 | 3.1 | 2026-04-16 17:31 |
| longhorn-system | longhorn | longhorn-1.8.2 | v1.8.2 | 2026-04-19 15:05 |
| metallb-system | metallb | metallb-0.15.3 | v0.15.3 | 2026-04-20 08:14 |
| n8n | n8n | n8n-2.0.1 | 1.122.4 | 2026-03-25 10:15 |
| nfs-provisioner | nfs-provisioner | nfs-subdir-external-provisioner-4.0.18 | 4.0.2 | 2026-04-19 14:55 |
| tools | nocodb | nocodb-1.10.0 | 0.301.5 | 2026-04-13 15:29 |
| open-webui | open-webui | open-webui-13.3.1 | 0.8.12 | 2026-04-19 16:25 |
| db | pgcat | pgcat-0.1.0 | 0.2.5 | 2026-04-16 17:07 |
| portainer | portainer | portainer-239.1.0 | ce-latest-ee-2.39.1 | 2026-04-19 14:55 |
| kube-system | reflector | reflector-10.0.21 | 10.0.21 | 2026-04-19 14:55 |
| safeline | safeline | safeline-10.1.0 | 9.3.2 | 2026-03-23 20:12 |
| sftpgo | sftpgo | sftpgo-0.44.0 | 2.7.1 | 2026-03-27 16:13 |
| sshpiper | sshpiper | sshpiper-0.4.6 | v1.5.0 | 2026-04-19 14:55 |
| democratic-csi | synology-iscsi | democratic-csi-0.15.1 | 1.0 | 2026-04-20 08:54 |
| teable | teable | teable-0.1.0 | latest | 2026-04-19 14:57 |
| teleport | teleport-cluster | teleport-cluster-18.7.3 | 18.7.3 | 2026-04-13 15:14 |
| kube-system | traefik | traefik-39.0.6 | v3.6.11 | 2026-04-19 14:54 |
| logging | vector | vector-0.51.0 | 0.54.0-distroless-libc | **2026-04-20 12:04** |
| velero | velero | velero-12.0.0 | 1.18.0 | 2026-04-20 10:04 |
| logging | vlogs | victoria-logs-single-0.11.31 | v1.49.0 | 2026-04-08 20:22 |
| monitoring | vm-stack | victoria-metrics-k8s-stack-0.72.6 | v1.139.0 | 2026-04-19 14:54 |
outdated 판정 본 점검 미수행. 2주 이상 `Updated` 없는 릴리스: n8n(3-25), sftpgo(3-27), safeline(3-23). ArgoCD auto-sync 커버리지 여부 확인 여지.
---
## 10. 오늘(2026-04-20) 변경 반영 확인 — OK (4/4)
| 항목 | 기대 | 실제 | 판정 |
|---|---|---|---|
| argocd-application-controller memory limit | 1Gi | `1Gi` | ✅ |
| vector container memory limit | 512Mi | `512Mi` | ✅ |
| vector buffer `max_events` | 10000 | `10000` | ✅ |
| vector buffer `retry_max_duration_secs` | 300 | `300` | ✅ |
참고:
- vector DS 4개 파드 restart count **0**, 시작 시각 2026-04-20 12:04:22~30 UTC
- 재시작 시점(03:04 UTC)에 `vlogs` 싱크 Healthcheck 400 1회 — 이후 30분간 동일 에러 미발생, buffer retry 로 복구
- vector `retry_initial_backoff_secs: 2`
- argocd application-controller `requests` 는 384Mi 유지
---
## 11. graphify 크로스체크 — OK
| graphify 노드 | 라이브 상태 | 정합 |
|---|---|---|
| Longhorn v1.8.2 | helm `longhorn-1.8.2` | ✅ |
| Traefik DaemonSet + Gateway API | traefik v3.6.11 + 13 IngressRoute + 11 HTTPRoute | ✅ |
| MetalLB L2 도입 | metallb v0.15.3, pool 9.50-99 | ✅ |
| Longhorn RecurringJob (4 jobs: critical/standard) | 4 RecurringJob (snapshot×2 + backup×2) | ✅ |
| Vector Log Collector → VictoriaLogs Log Pipeline | vector→vlogs 구성 | ✅ |
| APISIX→Traefik 메인 라우팅 전환 (2026-03-25 history) | Traefik 중심 HTTPRoute, APISIX CR 0 | ✅ |
| K3s PostgreSQL 백엔드 이전 (2026-03-24 history) | hp2 합류·운영 (uptime 6d23h+) | ✅ |
graphify 기록과 라이브 상태 불일치 없음.
---
## 후속 권장
1. Heimdall: longhorn-manager daemonset 으로 호스트 `/var/lib/rancher` 사용률 측정 경로 마련.
2. Heimdall: safeline 7볼륨 replica=2 정책 의도 확인 → 백서 기준 확정.
3. Heimdall: hp1 신규 노드로 Longhorn replica rebalance (scheduled=65Gi 만).
4. Heimdall: vector → vlogs 초기 healthcheck 400 원인 조사.
5. Heimdall: default StorageClass 2개 중 하나로 통일 검토.
6. Heimdall: iSCSI democratic-csi node-plugin 8회 재시작 원인 (syslog/dmesg).
---
## 비고: 본 리포트 산출 경로
- 원래 Outline `heimdall` 컬렉션에 업로드 시도했으나 **BunnyCDN Shield 403** 로 상세 본문 차단 (요약 문서 ID `c1ec3f2c-0fa8-49f8-9d0b-3d619a0e4715` 만 생성 완료, 부모 아래 하위 섹션 생성 시 WAF 차단).
- Gitea 업스트림 504 로 `git push` 도 대기. 로컬에 파일 먼저 commit, push 는 gitea 회복 시 재시도.
- Syn 에게 Outline 업로드 경로 WAF 룰 확인 요청 대상 (본 점검 범위 외 follow-up).