CGOA — GitOps 인증 어소시에이트 · 진짜 Argo CD 에서 확인하기 · 이론
한 방향으로는 진실의 원천이 되지 못한다
한 줄 요약
git 이 유일한 진실의 원천이라는 주장은 양방향일 때만 성립합니다. automated 만 켜면 한 방향이라 git 과 클러스터가 조용히 갈라집니다.
왜 양방향이어야 하나
GitOps 의 핵심 주장은 하나입니다. git 이 유일한 진실의 원천이고, 클러스터는 그 사본이다.
그 주장이 성립하려면 양방향이어야 합니다.
| 설정 | 하는 일 |
|---|---|
| automated | git 을 고치면 클러스터가 따라온다 |
| selfHeal | 클러스터를 고치면 되돌아온다 |
| prune | git 에서 지운 것을 클러스터에서도 지운다 |
automated 만 켜면 한 방향입니다. kubectl 로 직접 고친 것이 그대로 남고, git 과 클러스터가 조용히 갈라집니다. 대개 급한 장애 때문입니다 — 새벽에 kubectl scale 로 늘리고 아침에 git 반영을 잊습니다. 그러면 다음 배포 때 그 차이가 한꺼번에 되돌려집니다.
sync 와 health 는 다른 것을 말합니다
sync— git 과 클러스터가 같은가health— 배포된 것이 잘 도는가
OutOfSync 인데 Healthy 일 수 있습니다. 누가 손으로 고쳤지만 그 상태로 잘 도는 경우입니다. 반대로 Synced 인데 Degraded 일 수도 있습니다.
selfHeal 에는 대가가 있습니다
긴급 조치를 할 수 없습니다. 그리고 손으로 고친 것이 흔적도 없이 사라지므로, 고친 사람은 자기 변경이 왜 사라졌는지 모릅니다. 그래서 "긴급 조치도 git 을 거친다" 를 팀이 미리 합의해 두어야 합니다.
또 HPA 와 싸웁니다. git 에 replicas 를 적어 두면 HPA 가 늘릴 때마다 Argo 가 되돌립니다.
실무에서 진짜 중요한 것
selfHeal 을 켜기 전에 긴급 조치 절차를 먼저 합의합니다. 손으로 고친 것이 흔적도 없이 사라지므로, 고친 사람은 자기 변경이 왜 없어졌는지 모릅니다. "긴급 조치도 git 을 거친다" 가 합의되지 않은 팀에서 켜면 새벽 장애가 두 번 납니다.
HPA 를 쓰는 워크로드는 git 에서 replicas 를 빼야 합니다. 적어 두면 HPA 가 늘릴 때마다 Argo 가 되돌려, 부하가 오르는 동안 두 컨트롤러가 서로 싸웁니다.
Synced 초록불을 배포 완료로 읽지 않습니다. sync 는 git 과 같다는 뜻이고 health 는 잘 돈다는 뜻이라, Synced 이면서 Degraded 인 상태가 실제로 존재합니다. 배포 판정은 두 값을 함께 봐야 합니다.
다음 실습에서 진짜 Argo CD 위에 git 서버까지 세우고, 이것들을 직접 일으켜 봅니다.