본문으로 건너뛰기

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.ymlArgo CD, bootstrap 네임스페이스, 정적 MinIO 또는 Vault 시크릿의 첫 설치 경로
lumie-infra/provision/ansible/roles/argocd-bootstrap/defaults/main.ymlArgo CD 준비 후 Ansible이 적용하는 루트 앱 목록
lumie-infra/bootstrap/application.yamlwave -1로 sync되는 bootstrap 서브트리용 루트 Application
lumie-infra/bootstrap/kustomization.yamlbootstrap 하위 순서: MinIO, Zot, Vault, 그다음 Gitea
lumie-infra/{platform,storage,security,observability,applications}/application.yaml나머지 GitOps 계층의 루트 Application
lumie-infra/applications/kustomization.yamlTekton, 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.yamlargocd.argoproj.io/sync-wave: "-1" 설정
일반 애플리케이션보다 먼저 cluster-scoped bootstrapapplications/cluster-bootstrap/argocd.yaml이 sync wave -2 설정
bootstrap 내부 순서bootstrap/kustomization.yamlminio -> zot -> vault -> gitea 순서를 지정

운영 메모

  • 모든 루트 Application은 prune: trueselfHeal: 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/CDGitea를 참고하세요.

계약 드리프트

검사한 소스는 현재 GitOps 경계에 대해 완전히 일치하지 않습니다.

소스주장
provision/ansible/roles/argocd-bootstrap/defaults/main.ymlbootstrap에 여전히 web-apps/application.yamlapp_of_apps_paths로 포함됨
lumie-infra 저장소 트리검사한 저장소에는 web-apps/application.yaml 경로가 없음
2026년 6월 14일 라이브 클러스터루트 Application은 여섯 개뿐이며 web-apps 루트 Application은 없음

bootstrap 기본값이 정리되기 전까지 활성 계약은 여섯 루트 모델로 문서화하세요.

가시성을 유지해야 할 Git 호스트 분리도 하나 더 있습니다.

소스주장
루트 Argo CD Application과 Ansible bootstrapGitHub에서 lumie-infra를 pull
applications/tekton/ci-cd/manifests/tasks/git-update-values.yamlhttp://gitea-http.gitea.svc.cluster.local:3000/Lumie-Edu/lumie-infra.git로 배포 values 변경을 push

저장소에는 이 둘 사이를 이어 주는 브리지가 들어 있지 않습니다. 이를 검사한 GitOps 매니페스트 밖의 운영 의존성으로 취급하세요.

검증

GitOps 영역을 변경할 때는 저장소와 클러스터를 함께 확인하세요.

cd lumie-infra
rg -n "sync-wave|app_of_apps_paths|repoURL: https://github.com/Lumie-Edu/lumie-infra.git" \
bootstrap applications platform storage security observability provision/ansible
kubectl get applications -n argocd
kubectl get applications bootstrap platform storage security observability applications -n argocd -o wide

성공 신호:

  • 저장소 점검에서 체크인된 여섯 개 루트 Application 경로와 applications/ 아래의 cluster-bootstrap 하위 애플리케이션이 계속 보입니다.
  • 라이브 클러스터에는 bootstrap, platform, storage, security, observability, applications 여섯 개의 활성 루트 애플리케이션이 보입니다.
  • 오래된 Ansible 기본값을 실제 저장소 경로와 함께 다시 도입하지 않는 한, web-apps라는 이름의 루트 Application은 존재하지 않습니다.