GitOps 개요
목적
Lumie의 인프라 저장소는 Argo CD의 app-of-apps 패턴을 사용해 lumie-infra로부터 클러스터를 reconcile합니다. Ansible은 Argo CD의 첫 설치와 소수의 bootstrap 시크릿만 수행하고, 그 이후에는 desired state가 Git에서 Argo CD Application을 거쳐 네임스페이스 워크로드로 흘러가야 합니다.
이 페이지는 lumie-infra, bootstrap 자동화, GitOps 전달 경로를 변경하는 개발자를 위한 overview 문서입니다. 컨트롤러별 상세 내용은 Argo CD, CI/CD, Gitea, Tekton, Zot를 참고하세요.
소스 경로
| 경로 | 역할 |
|---|---|
lumie-infra/provision/ansible/roles/argocd-bootstrap/tasks/main.yml | Argo CD, bootstrap 네임스페이스, 정적 MinIO 또는 Vault 시크릿의 첫 설치 경로 |
lumie-infra/provision/ansible/roles/argocd-bootstrap/defaults/main.yml | Argo CD 준비 후 Ansible이 적용하는 루트 앱 목록 |
lumie-infra/bootstrap/application.yaml | wave -1로 sync되는 bootstrap 서브트리용 루트 Application |
lumie-infra/bootstrap/kustomization.yaml | bootstrap 하위 순서: MinIO, Zot, Vault, 그다음 Gitea |
lumie-infra/{platform,storage,security,observability,applications}/application.yaml | 나머지 GitOps 계층의 루트 Application |
lumie-infra/applications/kustomization.yaml | Tekton, Argo CD self-management, Lumie 서비스를 포함한 application 서브트리 등록 |
lumie-infra/applications/cluster-bootstrap/** | ClusterIssuer, 기본 StorageClass 같은 클러스터 범위 one-shot 리소스 |
소유권 경계
| 계층 | 단일 출처 | 비고 |
|---|---|---|
| 첫 설치 | provision/ansible/roles/argocd-bootstrap/** | 최소 Helm 릴리스로 Argo CD를 설치하고 루트 Application 매니페스트를 적용 |
| 루트 GitOps 트리 | bootstrap/, platform/, storage/, security/, observability/, applications/ | 각 디렉터리가 하나의 루트 Application CR과 그 하위 트리를 소유 |
| 하위 애플리케이션 | applications/**, platform/** 및 동급 디렉터리 | 개별 앱이 네임스페이스 범위 워크로드 매니페스트와 Helm values를 소유 |
| 빌드 출력 | applications/tekton/ci-cd/** | Tekton이 이미지를 빌드하고 배포 values를 갱신하며, 실제 롤아웃은 Argo CD가 수행 |
클러스터는 bootstrap 이후 수동 구성 대상이 아닙니다. 어떤 controller, secret, queue, ingress가 장기적으로 필요하다면 라이브 클러스터에만 존재하는 것이 아니라 lumie-infra에 desired state가 있어야 합니다.
런타임 흐름
코드에서 보이는 sync 순서는 다음과 같습니다.
| 단계 | 근거 |
|---|---|
| 나머지보다 먼저 bootstrap 루트 서브트리 | bootstrap/application.yaml이 argocd.argoproj.io/sync-wave: "-1" 설정 |
| 일반 애플리케이션보다 먼저 cluster-scoped bootstrap | applications/cluster-bootstrap/argocd.yaml이 sync wave -2 설정 |
| bootstrap 내부 순서 | bootstrap/kustomization.yaml이 minio -> zot -> vault -> gitea 순서를 지정 |
운영 메모
- 모든 루트 Application은
prune: true와selfHeal: true가 켜진 자동 sync를 사용합니다. applications/argocd/argocd.yaml은 초기 Ansible 설치 후 Argo CD를 self-managed 상태로 전환합니다.- GitOps 접근 경로는 분리되어 있습니다. Argo CD 루트 Application은 여전히
https://github.com/Lumie-Edu/lumie-infra.git에서lumie-infra를 가져오지만, CI/CD 경로는 인클러스터 Gitea를 통해 저장소를 clone하고 갱신합니다. 자세한 내용은 CI/CD와 Gitea를 참고하세요.