ArgoCD
Git에 적힌 것과 실제 클러스터를 견주고, 다르면 그 차이를 메운다.
한눈에
- 버튼이 아니라 감시자 — Git과 클러스터를 계속 대조한다
- Synced = Git과 클러스터가 같다 / Healthy = Pod이 잘 떠 있다. 둘은 다른 얘기
- 손으로 kubectl 을 쳐서 바꿔 놔도 OutOfSync 로 잡힌다
- 되돌리기의 정석은 git revert. UI 롤백은 Git이 그대로라 다시 어긋난다
- Jenkins가 클러스터 자격증명을 안 들어도 되게 만드는 장치이기도 하다
- 자동 동기화 · 셀프힐 · 가지치기는 처음엔 꺼 두고 시작하는 편이 낫다
Jenkins가 이미지를 굽고 values.yaml의 태그를 고치는 데서 끝났다. 그 다음을 맡는 것이 ArgoCD다.
버튼이 아니다
ArgoCD 화면에 SYNC 버튼이 있어서 "누르면 배포되는 것"으로 기억하기 쉽다. 수동 동기화로 설정하면 실제로 그걸 누른다. 하지만 본질은 다르다.

manifest 레포를 계속 지켜보다가, Git에 적힌 것과 실제 클러스터가 다르면 그 차이를 메운다. 자동 동기화를 켜 두면 아무도 안 눌러도 반영된다.
그리고 ArgoCD가 Pod을 직접 재생성하지도 않는다. Deployment를 갱신하는 데까지가 ArgoCD고, 그 다음은 쿠버네티스가 롤링 업데이트로 처리한다.
뱃지 둘은 다른 얘기다
| 뱃지 | 무엇을 말하나 |
|---|---|
| Synced / OutOfSync | Git과 클러스터가 같은가 |
| Healthy / Degraded / Progressing | Pod이 실제로 잘 떠 있는가 |
Synced인데 Degraded일 수 있다. 시킨 대로 배포는 됐는데 앱이 죽어 있는 경우다. 이미지 태그는 맞게 바뀌었는데 그 이미지가 부팅에 실패하는 상황이 흔하다.
반대로 OutOfSync인데 Healthy일 수도 있다. 지금 도는 것은 멀쩡한데 Git에 새 버전이 올라온 상태다.
둘을 같이 봐야 무슨 일인지 갈린다.
GitOps라는 말
이 방식을 GitOps라고 한다. 요지는 Git이 진실의 원천이라는 것이다.
마지막 항목이 폐쇄망에서 특히 크다. Jenkins가 뚫려도 운영 클러스터로 바로 이어지지 않는다.
Application 하나가 무엇을 가리키나
ArgoCD의 단위는 Application이다. 화면의 카드 하나가 이것이다.
spec:
source:
repoURL: https://gitlab.example.com/team/my-app-manifest
targetRevision: main # 어느 브랜치·태그를 볼 것인가
path: charts/base-chart # 레포 안 어디를 볼 것인가
helm:
valueFiles: [../../envs/prod/values.yaml]
destination:
server: https://k8s.example.com
namespace: my-app
읽는 자리(repo · revision · path)와 놓는 자리(cluster · namespace)를 짝지은 것이 전부다. 환경이 둘이면 Application도 둘이고, 대개 values 파일만 다르다.
targetRevision을 HEAD로 두면 그 브랜치의 최신을 계속 따라간다. 태그로 못 박아 두면 사람이 태그를 옮길 때만 배포된다. 운영은 후자가 안전하다.
세 가지 스위치
처음 붙일 때 헷갈리는 옵션 셋이다.
| 옵션 | 켜면 | 처음엔 |
|---|---|---|
| Auto Sync | Git이 바뀌면 자동으로 적용 | 꺼 두고 눈으로 보며 시작 |
| Self Heal | 손으로 바꾼 것을 Git 상태로 되돌린다 | 꺼 둔다. 긴급 조치가 되돌려지면 곤란하다 |
| Prune | Git에서 지운 리소스를 클러스터에서도 지운다 | 꺼 둔다. 켜면 실수로 지운 것이 실제로 지워진다 |
셋 다 켜는 것이 최종 목표이긴 하다. 다만 순서가 있다. 파이프라인을 믿을 수 있게 된 다음에 하나씩 켠다.
되돌리는 법 셋
| 방법 | 무엇을 하나 | 언제 |
|---|---|---|
values.yaml의 태그를 옛 값으로 고쳐 커밋 | Git이 진실이므로 이게 정석 | 대부분 |
| ArgoCD History에서 이전 리비전으로 롤백 | 클러스터만 되돌린다 | 급할 때만 |
git revert 후 파이프라인 재실행 | 소스까지 되돌린다 | 코드 자체가 문제일 때 |
두 번째를 쓰면 반드시 Git도 맞춰 놔야 한다. Git은 그대로 새 버전이라 다음 동기화 때 문제가 다시 배포된다. Self Heal이 켜져 있으면 몇 초 만에 되돌아온다.
자주 걸리는 것
손으로 익히려면
맥에서 k3d 클러스터 하나에 ArgoCD를 깔고, 로컬 Git 레포를 바라보게 걸어 보면 감이 온다.
values.yaml의 replicaCount를 1에서 3으로 고쳐 커밋하고, 아무것도 안 눌렀는데 Pod이 셋으로 늘어나는 것을 보는 것. 그게 이 도구의 전부다.
전체 배포 흐름은 DevOps와 CI/CD에 있다.