Files
obsidian/infra/helm-charts.md
kappa 427ed307e1 Add Helm charts management and ESO documentation
- infra/helm-charts.md: 전체 Helm 관리 체계, 차트 구조, ArgoCD 앱 목록, 배포 워크플로우
- infra/external-secrets.md: ESO 구성, ExternalSecret 목록, Vault 경로 정리, 운영 가이드
2026-04-13 16:15:51 +09:00

148 lines
5.1 KiB
Markdown

---
title: Helm 차트 관리 체계
updated: 2026-04-13
tags: [infra, k3s, helm, argocd, gitops]
---
## 개요
K3s 클러스터의 모든 서비스를 Helm으로 관리. 자체 차트는 Gitea에 호스팅하고 ArgoCD로 GitOps 배포.
## 차트 저장소
| 항목 | 값 |
|------|-----|
| Git 레포 | `gitea.inouter.com/kaffa/helm-charts` (private) |
| Helm 레지스트리 | `gitea.inouter.com/api/packages/kaffa/helm` |
| ArgoCD 레포 시크릿 | `repo-helm-charts` (argocd 네임스페이스) |
### BunnyCDN 캐시 바이패스
`iron-git` Pull Zone (ID 5584382)에 Edge Rule 적용:
- 패턴: `*/api/packages/*`
- ActionType: 3 (OverrideCacheTime), 값: 0
- 차트 업로드 후 index.yaml 캐시 문제 방지
## 자체 차트 구조
```
helm-charts/
├── charts/
│ ├── app/ # 범용 차트 (v0.4.0) — 단순 서비스용
│ ├── kroki/ # 전용 차트 — Kroki + Mermaid
│ ├── searxng/ # 전용 차트 — SearXNG + UA 패치 + TLS proxy CA
│ ├── outline/ # 전용 차트 — Outline Wiki + Redis
│ └── openmemory/ # 전용 차트 — MCP + UI + Qdrant
└── values/ # app 차트용 서비스별 values
├── juiceshop.yaml
├── cfb-manager.yaml
├── bunnycdn-mcp.yaml
├── smtp-relay.yaml
├── namecheap-api.yaml
├── vultr-api.yaml
├── pgcat.yaml # sidecar(monitor) 포함
├── proxysql.yaml # Galera 설정 포함
├── nas-proxy.yaml # external service (Synology NAS)
└── vault-mcp.yaml # external service (Vault) + extraIngressRoutes
```
### app 차트 기능 (v0.4.0)
- Deployment + Service + IngressRoute 기본 구성
- `sidecars` — 사이드카 컨테이너 지원
- `configMaps` — multiline ConfigMap 생성
- `secrets` — Secret 생성
- `external` — selector 없는 Service + EndpointSlice (외부 서비스 프록시)
- `extraIngressRoutes` — 복수 도메인 IngressRoute
- `probes` — liveness/readiness probe
## 전체 Helm 릴리스 목록
### 공식/외부 차트 (20개)
| 릴리스 | 네임스페이스 | 차트 |
|--------|-------------|------|
| apisix | apisix | apisix |
| apisix-ingress-controller | apisix | apisix-ingress-controller |
| argocd | argocd | argo-cd |
| cert-manager | cert-manager | cert-manager |
| external-secrets | external-secrets | external-secrets |
| gitea | gitea | gitea |
| longhorn | longhorn-system | longhorn |
| metallb | metallb-system | metallb |
| n8n | n8n | n8n |
| nfs-provisioner | nfs-provisioner | nfs-subdir-external-provisioner |
| nocodb | tools | zekker6/nocodb |
| portainer | portainer | portainer |
| reflector | kube-system | reflector |
| safeline | safeline | safeline |
| sftpgo | sftpgo | sftpgo |
| sshpiper | sshpiper | sshpiper |
| synology-iscsi | democratic-csi | democratic-csi |
| teleport-cluster | teleport | teleport-cluster |
| traefik | kube-system | traefik |
| vector | logging | vector |
| vlogs | logging | victoria-logs-single |
| vm-stack | monitoring | victoria-metrics-k8s-stack |
### 자체 app 차트 (10개, ArgoCD 관리)
| 릴리스 | 네임스페이스 | 비고 |
|--------|-------------|------|
| juiceshop | juiceshop | |
| cfb-manager | tools | SSH key 마운트 |
| bunnycdn-mcp | mcp | IngressRoute: bunny.inouter.com |
| smtp-relay | mail | Mailgun relay |
| namecheap-api | api | |
| vultr-api | api | |
| pgcat | db | monitor sidecar 포함 |
| proxysql | db | Galera hostgroup 설정 |
| nas-proxy | tools | external → 192.168.9.100:5000 |
| vault-mcp | tools | external → 10.253.101.58, hcv.inouter.com + vault-mcp.inouter.com |
### 전용 차트 (4개, ArgoCD 관리)
| 릴리스 | 네임스페이스 | 구성 |
|--------|-------------|------|
| kroki | kroki | kroki + mermaid sidecar |
| searxng | searxng | UA 패치, TLS proxy CA, Google proxy |
| outline | outline | outline + redis + PVC + IngressRoute |
| openmemory | openmemory | MCP + UI + Qdrant + PVC 2개 |
### Operator 관리 (ArgoCD/Helm 외)
| 서비스 | 네임스페이스 | 관리 방식 |
|--------|-------------|-----------|
| rabbitmq-cluster-operator | rabbitmq-system | 직접 매니페스트 |
| rabbitmq-server | mq | RabbitmqCluster CRD → Operator |
## ArgoCD 앱 목록
14개 Application, 모두 `automated + prune + selfHeal`:
```
juiceshop, cfb-manager, bunnycdn-mcp, smtp-relay, namecheap-api, vultr-api,
pgcat, proxysql, nas-proxy, vault-mcp, kroki, searxng, outline, openmemory
```
### 주의사항
- **EndpointSlice는 ArgoCD 제외 대상** — `discovery.k8s.io` 그룹이 argocd-cm에서 제외됨. external service의 EndpointSlice는 수동 관리 필요
- ArgoCD 앱 소스는 Gitea `helm-charts` 레포의 `charts/` 경로 참조
## 배포 워크플로우
```
1. charts/ 또는 values/ 수정
2. helm template 로 렌더링 확인
3. git push → Gitea helm-charts
4. ArgoCD 자동 sync (또는 hard refresh)
5. 동작 확인
```
## 관련 문서
- [[external-secrets]] — ESO + Vault 시크릿 동기화
- [[k3s-ingress-architecture]] — Traefik/APISIX 인그레스 구조
- [[cert-manager]] — TLS 인증서