Argo CD는 Kubernetes를 위한 선언형 GitOps 지속적 배포 도구다. Git에 기록한 애플리케이션 정의를 원하는 상태로 보고 실제 클러스터 상태와 비교한다. 소스코드를 컴파일하고 이미지를 만드는 CI와 역할이 다르며, CI가 준비한 이미지 참조를 선언에 반영한 뒤 배포를 연결할 수 있다. 공식 개요가 이 동작 모델을 설명한다.
원하는 상태와 실제 상태
Application은 저장소·리비전·경로 같은 소스와 배포 대상 클러스터·네임스페이스를 연결한다. 일반 YAML뿐 아니라 Helm 등 여러 구성 방식을 사용할 수 있다. Argo CD는 생성한 선언과 현재 자원을 비교해 동기화 차이를 표시하고, 설정에 따라 수동 또는 자동으로 동기화한다.
동기화 상태와 건강 상태는 구별한다. Git 내용과 같더라도 애플리케이션이 준비되지 않았을 수 있고, 동작 중이더라도 수동 변경으로 Git과 다를 수 있다. 자동 동기화, Git에서 빠진 자원 정리, 수동 변경 복구는 각각 정책으로 이해해야 한다. 자동 동기화 문서가 그 차이를 설명한다.
장점과 한계
리뷰한 Git 변경을 배포 의도와 연결하여 누가 무엇을 바꿨는지 추적하기 좋다. 여러 애플리케이션의 차이와 상태를 한곳에서 살펴볼 수 있다. 반면 저장소 접근과 대상 클러스터 권한이 중요한 운영 경계가 되며, 다른 배포 도구가 같은 자원을 계속 변경하면 두 도구가 서로의 변경을 되돌릴 수 있다.
Git 롤백이 데이터베이스 스키마나 이미 삭제된 데이터를 자동 복구해 주는 것은 아니다. Secret 관리, 백업, 마이그레이션 호환성과 이미지 보관도 별도로 설계한다. 자동 삭제나 자동 복구는 편리하지만 적용 범위와 검토 절차가 분명해야 한다.
독서실 애플리케이션 선언
아래는 Argo CD와 제한된 library-lab AppProject가 준비되었다는 전제의 예시다. Git 주소는 가상 주소이며 사용 가능한 저장소로 대체해야 한다. 자동 동기화 설정을 생략했으므로 이 예시는 수동 검토 흐름을 설명한다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: reading-room
namespace: argocd
spec:
project: library-lab
source:
repoURL: https://git.example.test/library/operations.git
targetRevision: v1.0.0
path: reading-room
destination:
server: https://kubernetes.default.svc
namespace: reading-roomsource는 어떤 선언을 읽을지, destination은 어디에 반영할지를 정한다. 대상 네임스페이스와 저장소 접근 권한, Project의 허용 범위도 준비되어야 한다. 먼저 생성된 차이를 보고 의도한 자원만 포함하는지 확인한 뒤 동기화 결과와 애플리케이션 상태를 따로 검증한다.
자주 생기는 오해
클러스터에서 긴급 수정한 값을 Git에 남기지 않으면 이후 동기화에서 사라질 수 있다. 반대로 모든 차이를 자동으로 복구하도록 켜기 전에 사람이 변경해야 하는 필드와 다른 컨트롤러의 소유 필드를 구분한다. Git의 변경 이력과 실제 배포 시점·상태도 함께 추적해야 한다.
참고 자료
Kubernetes 클러스터 구성 길잡이 | |
|---|---|
전체 구조 | |
설치와 조작 | |
컨테이너 실행 | |
네트워크와 이름 | |
진입과 메시 | |
설치와 배포 관리 | Helm · Argo CD · Argo Rollouts |
이미지 공급 | |