들어가기 앞서
Argo CD는 Git에 저장된 원하는 매니페스트와 클러스터 내 실제 상태가 다를 때 애플리케이션을 자동으로 동기화(sync)할 수 있는 기능을 제공한다. 자동 동기화의 장점은 CI/CD 파이프라인이 Argo CD API 서버에 직접 접근하지 않고도 배포를 수행할 수 있다는 점이다. 대신 파이프라인은 Git 저장소에 매니페스트 변경 사항을 커밋하고 푸시함으로써 배포를 트리거한다. 자동 동기화를 설정하려면 다음 명령어를 실행한다.
argocd app set <APPNAME> --sync-policy automated
또는 애플리케이션 매니페스트를 생성할 때 syncPolicy에 automated 정책을 명시할 수 있다.
spec:
syncPolicy:
automated: {}
ApplicationSet이 관리하는 애플리케이션의 자동 동기화 일시 토글
독립형 애플리케이션의 경우, 자동 동기화 토글은 애플리케이션의 spec.syncPolicy.automated 필드를 변경해서 가능하다. 하지만 ApplicationSet이 관리하는 애플리케이션은 이 필드 변경이 동작하지 않는다. ApplicationSet 관리 하의 애플리케이션 자동 동기화 토글 방법은 별도 문서를 참고해야 한다.
Automated.prune
기본적으로 자동 동기화는 안전 장치로서 Git에서 더 이상 정의되지 않은 자원을 삭제하지 않는다. 즉, 자동 동기화만으로는 자원 삭제가 발생하지 않는다. 자원 삭제를 원할 경우 수동 동기화를 수행하며, 이때 prune 옵션을 활성화해야 한다. 매니페스트 내 자동 동기화 정책에 prune: true 옵션을 설정한다.
spec:
syncPolicy:
automated:
prune: true
Automated.allowEmpty (v1.8 이상)
기본적으로(안전 장치로서) 자동 동기화 + prune 시, 타깃 자원이 없으면 애플리케이션을 빈 상태로 만드는 작업을 방지한다. 즉, 애플리케이션이 빈 자원을 가지는 것을 기본적으로 막는다. 매니페스트 내 자동 동기화 정책에 allowEmpty: true 옵션을 추가한다.
spec:
syncPolicy:
automated:
prune: true
allowEmpty: true
Automated.selfHeal
기본적으로 클러스터 내 라이브 상태 변경은 자동 동기화를 트리거하지 않는다. Git에 정의된 상태와 라이브 상태가 달라질 때 자동 동기화를 활성화하려면 매니페스트 내 자동 동기화 정책에 selfHeal: true 옵션을 추가한다.
spec:
syncPolicy:
automated:
selfHeal: true
자동 복구 기능을 끈다고 해서 멀티 소스 애플리케이션에서 라이브 상태 변경이 되돌려지지 않는다는 보장은 없다. 한 소스의 리소스가 변하지 않아도 다른 소스의 변경으로 인해 자동 동기화가 트리거될 수 있다. 이 경우 자동 동기화를 완전히 끄는 것을 고려해야 한다.
자동 동기화의 작동 방식 (Semantics)
- 자동 동기화는 애플리케이션 상태가 OutOfSync일 때만 수행된다. 상태가 Synced이거나 에러 상태인 경우 자동 동기화 X
- 자동 동기화는 각 커밋 SHA1과 애플리케이션 파라미터 조합에 대해 한 번만 동기화를 시도한다. 동일한 커밋 SHA1과 파라미터에 대해 이전에 성공한 동기화가 있다면 다시 시도하지 않는다. 단, selfHeal 플래그가 true인 경우에는 별도의 self-heal 타임아웃(기본 5초) 후 다시 동기화를 시도한다. self-heal 타임아웃은 argocd-application-controller 배포의 --self-heal-timeout-seconds 플래그로 조정 가능하다.
- 이전 동기화 시도가 실패한 경우, 동일 커밋 SHA1과 파라미터 조합에 대해 재시도하지 않는다.
- 자동 동기화가 활성화된 애플리케이션에서는 롤백(rollback)이 불가능하다.
자동 동기화 주기
자동 동기화 간격은 argocd-cm ConfigMap의 timeout.reconciliation 값으로 결정된다. 기본값은 120초이며, 최대 3분(180초)까지 최대 60초의 무작위 지터(jitter)가 더해진다.
Best Practice
프로덕션 환경에서는 Sync Policy를 사용하지 않도록 해야 한다. Sync Policy는 로컬과 원격 상태를 비교해주는 유용한 도구이다. 하지만 프로덕션 환경에서는 정기적인 백업이 없을 경우 데이터 손실이 불가피해질 수 있으므로 권장되지 않는다.
'CICD > argoCD 공부 기록' 카테고리의 다른 글
| [argocd] argocd-cm ConfigMap (1) | 2025.06.26 |
|---|---|
| [argocd] argocd-rbac-cm ConfigMap (0) | 2025.06.26 |
| [argocd] Argo CD Finalizer로 인한 삭제 사고를 피하는 방법 (0) | 2025.06.23 |
| [argocd] 핵심 컴포넌트 정리 (0) | 2025.06.20 |
| [argocd] ArgoCD Architecture (0) | 2025.06.03 |