CAPA — Argo 프로젝트 인증 어소시에이트 · 진짜 클러스터에서 확인하기 · 이론
선언과 동작 사이
한 줄 요약
Argo 의 오브젝트는 의도를 적은 것일 뿐이고, 그 의도를 현실로 만드는 것은 컨트롤러입니다. 컨트롤러가 없으면 YAML 이 맞는지조차 알 수 없습니다.
왜 컨트롤러가 있어야 하나
앞 모듈들에서 Workflow 와 Rollout 을 여러 개 썼습니다. 그런데 그 실습들이 도는 곳에는 컨트롤러가 없어서, 그 YAML 이 실제로 무엇을 하는지 확인할 방법이 없었습니다.
Argo 의 네 프로젝트는 전부 컨트롤러가 있어야 의미가 생기는 물건입니다. 오브젝트는 의도를 적은 것일 뿐이고, 그 의도를 현실로 만드는 것은 컨트롤러입니다.
Workflows 컨테이너를 실제로 돌린다 없으면 단계가 진행되지도 실패하지도 않는다Rollouts 파드를 실제로 띄우고 나눈다 없으면 카나리가 몇 퍼센트인지 볼 수 없다Analysis Job 을 띄워 판정한다 없으면 자동 롤백이 통째로 빠진다되돌아간 것은 트래픽이지 선언이 아니다
가장 값진 함정입니다. 분석이 실패해 자동 롤백이 일어나도 spec.template 의 이미지는 새 판 그대로입니다.
- 그대로 두면 다음에 다른 것을 고쳐 배포할 때 그 이미지가 같이 나갑니다
- GitOps 를 쓰면 저장소가 여전히 새 이미지를 가리키므로 다시 같은 배포를 시도합니다. 무한히 되돌아가는 고리가 됩니다
고치려면 선언을 되돌려야 합니다 — 저장소의 이미지 태그를 되돌리는 커밋입니다.
limit 은 재시도 횟수다
Workflows 의 retryStrategy.limit 은 재시도 횟수입니다. 첫 시도는 여기 들어가지 않습니다. limit: 2 면 실제 시도는 3번입니다.
도는 중에 템플릿을 고쳐도 바뀌지 않는다
컨트롤러가 시작 시점의 정의를 status.storedTemplates 에 박아 둡니다. 재현성을 위해서입니다. "템플릿을 고쳤는데 왜 그대로냐" 의 답이 이것이고, 다음 워크플로부터 바뀝니다.
실무에서 진짜 중요한 것
자동 롤백 뒤에는 반드시 선언을 되돌리는 커밋을 넣습니다. 롤백은 트래픽만 되돌리고 spec.template 은 새 판 그대로 남습니다. GitOps 를 쓰면 저장소가 여전히 새 이미지를 가리키므로 같은 배포를 무한히 다시 시도합니다.
배포 판정은 Healthy 가 아니라 status.stableRS 로 합니다. 승격이 끝나고 Healthy 가 된 뒤에도 옛 파드가 Terminating 으로 잠시 남아, 이미지를 세면 두 종류가 나옵니다. 안정 판을 가리키는 해시가 유일하게 흔들리지 않는 기준입니다.
retryStrategy.limit 은 총 시도 횟수가 아닙니다. 첫 시도는 여기 들어가지 않으므로 limit: 2 는 실제로 3번 돕니다. 타임아웃 예산을 계산할 때 한 번씩 빠뜨리는 자리입니다.
다음 두 실습에서 이것들을 진짜 컨트롤러 위에서 직접 확인합니다.