애플리케이션과 싱크¶
개요¶
ArgoCD가 "어떤 레포의 어느 경로를, 어느 클러스터에 배포할지"를 알아야 실제 일을 하죠. 이 배포 단위를 애플리케이션(Application)이라는 커스텀 리소스로 정의해요. 애플리케이션은 원하는 상태가 있는 레포의 위치(소스)와 그 상태가 적용될 대상(클러스터·네임스페이스)을 묶는 설명서예요.
상위 문서: ArgoCD · GitOps · 헬스 상태
핵심 개념¶
Application 리소스. ArgoCD는 아무것도 알지 못하면 아무것도 배포하지 못해요. Application CRD에 다음을 적어요.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: api
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/org/cluster-config
path: apps/api
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: backend
syncPolicy:
automated:
prune: true
selfHeal: true
- source — 원하는 상태가 있는 곳(레포 URL, 경로, 브랜치/리비전)
- destination — 배포할 대상(클러스터 서버, 네임스페이스)
- project — ArgoCD 프로젝트로 권한·대상을 묶는 그룹
싱크(Sync). ArgoCD는 레포의 원하는 상태와 클러스터의 현재 상태를 비교해요. 다르면 그 차이를 싱크(동기화)로 메워요. 싱크가 일어나면 매니페스트가 클러스터에 적용되고, 상태가 "OutOfSync → Synced"로 넘어가요.
자동 싱크(자동화). 특히 중요한 설정이 syncPolicy.automated예요.
- selfHeal — 누가 kubectl로 클러스터를 손대서 상태가 어긋나면, ArgoCD가 다시 레포 상태로 되돌려요.
- prune — 매니페스트에서 삭제된 리소스를 클러스터에서도 실제로 지워요. 끼워두면 삭제된 것이 계속 남을 수 있어요.
기본값은 수동이에요. 자동화를 끄면 배포가 "검토 후 동기화"로 이뤄져요. 운영 환경에선 자동 + selfHeal을 쓰는 편이 GitOps의 약속을 지키는 데 유리해요.
헬름·쿠스토마이즈 지원. source의 경로가 Helm 차트라면 helm.values로 값을 넣고, 쿠스토마이즈라면 쿠스토마이즈 빌드를 그대로 적용해요. 그래서 매니페스트만이 아니라 차트 단위 배포도 한 애플리케이션으로 다룰 수 있어요.
실제 적용(데이터스케쳐스)¶
각 서비스(마케팅 Astro, 위키, 백엔드 API)마다 Application 리소스를 두고, 같은 설정 레포의 서로 다른 경로를 가리켜요. 헬름 차트를 쓰는 부분은 helm.values로 환경별 값을 넣어요. 자동 싱크와 selfHeal을 켜서, 레포에 머지되는 순간 배포가 자동 반영되고 실수로 지워도 복구되게 해요.
더 알아보기¶
- 공식 문서 (1차): Getting Started, Core Concepts, Application spec
- 큐레이션/블로그 (2차): Declarative setup blog