본문으로 건너뛰기

Argo CD

목적

Argo CD는 Lumie의 GitOps reconciler입니다. 한 번은 Ansible이 설치하고, 곧바로 applications/argocd app-of-apps 서브트리를 통해 자기 자신의 릴리스와 나머지 클러스터 소유권을 다시 Git으로 넘깁니다.

이 페이지는 Argo CD bootstrap, reconciliation 설정, 앱 등록, controller 동작을 변경하는 개발자를 위한 reference 문서입니다. 컨트롤러 간 흐름은 GitOps Overview를 참고하세요.

소스 경로

경로역할
lumie-infra/provision/ansible/roles/argocd-bootstrap/tasks/main.ymlHelm을 이용한 Argo CD 첫 설치와 루트 Application CR의 초기 적용
lumie-infra/provision/ansible/roles/argocd-bootstrap/files/bootstrap-values.yamlGitOps가 제어권을 넘겨받기 전의 최소 bootstrap 전용 Helm values
lumie-infra/applications/argocd/argocd.yamlself-managed Argo CD Application CR
lumie-infra/applications/argocd/common-values.yaml중복 Service 또는 Deployment 리소스를 비활성화하는 공통 차트 wrapper
lumie-infra/applications/argocd/helm-values.yaml런타임 controller, server, repo-server, Redis, metrics, ignore-differences 동작
lumie-infra/{bootstrap,platform,storage,security,observability,applications}/application.yamlArgo CD가 reconcile하는 루트 Application

퍼블릭 표면

Argo CD는 퍼블릭 ingress가 아니라 내부 control-plane 서비스입니다.

표면소스비고
argocd 네임스페이스의 Application CR루트 및 하위 앱 매니페스트Argo CD가 desired state를 감시하고 워크로드를 생성 또는 prune
Argo CD API serverapplications/argocd/helm-values.yamlserver.ingress.enabled: false; 직접 ingress 대신 Teleport를 통한 접근 예상
Metrics 서비스controller.metrics, server.metrics, repoServer.metricsPrometheus 스크레이프를 위해 ServiceMonitor 활성화

bootstrap 전용 Helm 설치는 Git 관리 릴리스보다 의도적으로 약합니다. bootstrap values는 ApplicationSet과 notifications를 비활성화하고 리소스를 더 작게 잡아, 전체 구성이 Git에서 reconcile되기 전에 controller가 빠르게 시작되도록 합니다.

런타임 흐름

핵심 구성

이 발췌는 sync 동작을 읽을 때 중요한 활성 controller 계약을 보여줍니다.

configs:
cm:
users.anonymous.enabled: "true"
timeout.reconciliation: "60000"
resource.exclusions: |
- apiGroups:
- tekton.dev
kinds:
- PipelineRun
- TaskRun
params:
server.insecure: "true"

applications/argocd/helm-values.yaml의 중요한 런타임 선택은 다음과 같습니다.

  • Dex와 notifications는 비활성화됩니다.
  • ingress는 비활성화되어 있고, server는 외부 접근 계층 뒤에서 insecure mode로 실행됩니다.
  • Tekton PipelineRunTaskRun 리소스는 prune 대상에서 제외되어, Argo CD가 CI 런타임 오브젝트를 드리프트로 취급하지 않습니다.
  • self-managed Application은 런타임에 Secret payload가 회전하는 argocd-secretargocd-initial-admin-secret의 diff를 무시합니다.
  • repo server는 많은 외부 Helm 차트를 렌더링하므로 API server보다 훨씬 크게 잡혀 있습니다.

소유권 경계

책임소유자
초기 네임스페이스 생성, bootstrap 시크릿, 첫 Helm 설치Ansible role
장기적인 Argo CD 버전, 리소스, controller 플래그, metrics, ignore-differences 규칙applications/argocd/**
앱 등록Argo CD 차트 밖의 루트 및 하위 kustomization.yaml 파일
argocd-secret, TLS material 같은 런타임 시크릿Git이 아니라 Kubernetes 또는 외부 controller

장애 및 드리프트 동작

장애 지점동작
kustomization.yaml에 하위 등록 누락Argo CD가 앱을 보지 못해 Git 변경이 비활성 상태로 남음
런타임 관리 Secret 변경명시된 Argo CD Secret에 대해서는 무시되어 OutOfSync 상태가 계속 발생하지 않음
Tekton PipelineRun 또는 TaskRun 변화resource.exclusions로 무시되어 CI가 GitOps 상태를 오염시키지 않음
저장소 렌더링 압력repoServer.resources.limits.memory는 외부 차트 렌더링이 가장 무거운 Argo 워크로드였기 때문에 3Gi로 설정됨

검증

cd lumie-infra
rg -n "users.anonymous.enabled|resource.exclusions|CreateNamespace|ignoreDifferences" \
applications/argocd provision/ansible/roles/argocd-bootstrap
kubectl get applications -n argocd
kubectl get application argocd -n argocd -o yaml

성공은 다음을 의미합니다. 저장소 grep에서 anonymous access, Tekton exclusion, namespace 생성, ignore-difference 규칙이 계속 보이고, 라이브 클러스터에서 argocd Application이 Synced/Healthy이며, kubectl get application argocd -o yaml에 저장소가 관리하는 Helm values 소스가 포함됩니다.