서비스
목적
이 페이지는 Lumie 클러스터 위에 배포된 공유 서비스를 위한 레퍼 런스 가이드입니다. 제품 기능 동작이 아니라 GitOps 소유권 경계에 초점을 맞춥니다. 즉, 어떤 Argo CD 루트가 어떤 종류의 서비스를 소유하는지, 클러스터 범위 선행 조건은 어디에 있는지, 공유 인프라를 추가하거나 변경하기 전에 운영자가 무엇을 확인해야 하는지를 설명합니다.
소스 경로
| 경로 | 역할 |
|---|---|
lumie-infra/provision/ansible/roles/argocd-bootstrap/defaults/main.yml | 주요 GitOps 슬라이스용 루트 App-of-Apps seed 목록 |
lumie-infra/applications/kustomization.yaml | cluster-bootstrap, Argo CD self-management, 제품 워크로드, docs, 선택적 체크인 도구를 포함한 applications 슬라이스 등록 |
lumie-infra/applications/cluster-bootstrap/ | StorageClass와 ClusterIssuer 리소스를 위한 wave -2 매니페스트 |
lumie-infra/bootstrap/kustomization.yaml | wave -1 기반 서비스 |
lumie-infra/platform/kustomization.yaml | 공유 플랫폼 인프라 |
lumie-infra/storage/kustomization.yaml | 공유 데이터 플레인 인프라 |
lumie-infra/security/kustomization.yaml | 클러스터 보안 서비스 |
lumie-infra/observability/kustomization.yaml | 메트릭, 로그, 트레이스, 알림 지원 |
런타임 계층 구조
루트별 서비스 카탈로그
| 루트 | 핵심 서비스 | 존재 이유 |
|---|---|---|
cluster-bootstrap | minio-local StorageClass, letsencrypt-* ClusterIssuer 리소스 | 워크로드가 참조하기 전에 먼저 존재해야 정상 reconcile이 가능한 클러스터 범위 선행 조건 |
bootstrap | MinIO, Zot, Vault + Vault Secrets Operator, Gitea | 이후 앱들이 오브젝트 스토리지, 이미지 가져오기, 시크릿, Git에 의존할 수 있게 하는 기반 서비스 |
platform | CoreDNS config, Traefik config, cert-manager, RabbitMQ operator, RabbitMQ, KEDA | 여러 워크로드가 공유하는 플랫폼 런타임 |
storage | CNPG, infra-db, Redis | 앱과 운영자를 위한 상태 저장 백엔드 서비스 |
security | Kyverno, Falco, Teleport | admission guardrail, 런타임 보안, 접근 도구 |
observability | Prometheus, Grafana, Loki, Tempo, OpenTelemetry, Alertmanager, node-exporter, kube-state-metrics | day-two telemetry와 알림 지원 |
applications | Argo CD self-management, Lumie backend/frontend/workers, docs, dev env | 플랫폼 위에서 동작하는 제품 및 운영자 대상 워크로드. Tekton 매니페스트는 체크인되어 있지만 applications/kustomization.yaml에서 등록되지 않으면 비활성입니다. |
클러스터 범위 서비스와 네임스페이스 서비스
모든 공유 서비스가 일반적인 네임스페이스 로컬 앱은 아닙니다.
cluster-bootstrap은ClusterIssuer와StorageClass리소스가 클러스터 범위이므로 워크로드보다 먼저 반영되어야 해서 의도적으로 분리되어 있습니다.platform/의priority-classes도 Argo CDApplication을 통해 reconcile되지만 역시 클러스터 범위입니다.local-path-provisioner나 일부 addon 소유 ConfigMap 같은 K3s 관리 런타임 오브젝트는 App-of-Apps 루트 밖에 존재합니다.
운영자는 모든 공유 리소스가 네임스페이스별 Helm values 파일 아래에 있을 것이라고 가정하지 않도록 주의해야 합니다.
소유권 및 의존성 규칙
| 의존성 | 상위 소유자 | 하위 영향 |
|---|---|---|
| Vault와 VSO | bootstrap/vault | 거의 모든 루트의 VaultStaticSecret 소비자는 Vault가 정상화될 때 까지 대기 |
| Zot 레지스트리 | bootstrap/zot | 클러스터 워크로드의 이미지 pull과 노드의 레지스트리 미러 동작 |
| Traefik | k3s addon + platform/traefik-config | 제품 앱, docs, Gitea, 커스텀 도메인의 ingress |
| cert-manager issuer | applications/cluster-bootstrap | ingress와 명시적 Certificate 오브젝트용 TLS 시크릿 발급 |
| RabbitMQ | platform/rabbitmq | 비동기 워커와 백엔드 메시징 계약 |
| CNPG와 Redis | storage/ | 제품 데이터베이스, 캐시, 내부 운영자 데이터베이스 |
운영 메모
- 서비스 디렉터리를 추가하는 것만으로는 충분하지 않습니다. 상위
kustomization.yaml에 대응하는argocd.yaml을 등록해야 Argo CD가 이를 볼 수 있습니다. - 공유
charts/common차트는 많은 서비스의 기본 배포 표면이므로 ingress, service,VaultStaticSecret,ServiceMonitor, RBAC 동작이 원시 매니페스트가 아니라 재사용 템플릿에서 오는 경우가 많습니다. - 2026년 6월 14일에 확인한 라이브 클러스터에서는
cluster-bootstrap,platform,storage,security,observability,applications를 포함한 모든 활성 Argo CD 애플리케이션이Synced및Healthy상태였습니다.
계약 드리프트
검사한 소스에는 중요한 부트스트랩 불일치가 하나 있습니다.
lumie-infra/provision/ansible/roles/argocd-bootstrap/defaults/main.yml에는 여전히app_of_apps_paths에web-apps/application.yaml이 남아 있지만, 저장소에는 더 이상lumie-infra/web-apps/가 없습니다. 현재 클러스터는 루트 애플리케이션이 이미 존재하므로 정상이나, 기본값을 갱신하거나 경로를 복구하지 않으면 새 부트스트랩은 실패합니다.
장애 지점
| 장애 지점 | 영향 |
|---|---|
| 부모 kustomization에 앱 매니페스트가 등록되지 않음 | 서비스가 Argo CD reconcile까지 도달하지 못함 |
| 부트스트랩 순서가 깨짐 | Vault, Gitea, 레지스트리 소비자가 선행 조건을 기다리며 멈출 수 있음 |
| 클러스터 범위 선행 조건 누락 | 앱 네임스페이스가 sync되어도 ingress TLS와 스토리지 프로비저닝 실패 |
| 저장소 전용 레거시 디렉터리를 활성 서비스로 오인 | 운영자가 잘못된 런타임 경로를 추적할 수 있음 |
검증
kubectl get applications -n argocd
kubectl get clusterissuers
kubectl get storageclass
rg -n "argocd.yaml|cluster-bootstrap|platform|storage|security|observability|applications" \
lumie-infra/provision/ansible/roles/argocd-bootstrap/defaults/main.yml \
lumie-infra/applications/kustomization.yaml \
lumie-infra/bootstrap/kustomization.yaml \
lumie-infra/platform/kustomization.yaml \
lumie-infra/storage/kustomization.yaml \
lumie-infra/security/kustomization.yaml \
lumie-infra/observability/kustomization.yaml