LabHub

CAPA — Argo 프로젝트 인증 어소시에이트 · 진짜 클러스터에서 확인하기 · 이론

선언과 동작 사이

LabHub 에서 이어서 보기

한 줄 요약

Argo 의 오브젝트는 의도를 적은 것일 뿐이고, 그 의도를 현실로 만드는 것은 컨트롤러입니다. 컨트롤러가 없으면 YAML 이 맞는지조차 알 수 없습니다.

왜 컨트롤러가 있어야 하나

앞 모듈들에서 Workflow 와 Rollout 을 여러 개 썼습니다. 그런데 그 실습들이 도는 곳에는 컨트롤러가 없어서, 그 YAML 이 실제로 무엇을 하는지 확인할 방법이 없었습니다.

Argo 의 네 프로젝트는 전부 컨트롤러가 있어야 의미가 생기는 물건입니다. 오브젝트는 의도를 적은 것일 뿐이고, 그 의도를 현실로 만드는 것은 컨트롤러입니다.

Workflows   컨테이너를 실제로 돌린다      없으면 단계가 진행되지도 실패하지도 않는다Rollouts    파드를 실제로 띄우고 나눈다    없으면 카나리가 몇 퍼센트인지 볼 수 없다Analysis    Job 을 띄워 판정한다          없으면 자동 롤백이 통째로 빠진다

되돌아간 것은 트래픽이지 선언이 아니다

가장 값진 함정입니다. 분석이 실패해 자동 롤백이 일어나도 spec.template 의 이미지는 새 판 그대로입니다.

고치려면 선언을 되돌려야 합니다 — 저장소의 이미지 태그를 되돌리는 커밋입니다.

limit 은 재시도 횟수다

Workflows 의 retryStrategy.limit재시도 횟수입니다. 첫 시도는 여기 들어가지 않습니다. limit: 2 면 실제 시도는 3번입니다.

도는 중에 템플릿을 고쳐도 바뀌지 않는다

컨트롤러가 시작 시점의 정의를 status.storedTemplates 에 박아 둡니다. 재현성을 위해서입니다. "템플릿을 고쳤는데 왜 그대로냐" 의 답이 이것이고, 다음 워크플로부터 바뀝니다.

실무에서 진짜 중요한 것

자동 롤백 뒤에는 반드시 선언을 되돌리는 커밋을 넣습니다. 롤백은 트래픽만 되돌리고 spec.template 은 새 판 그대로 남습니다. GitOps 를 쓰면 저장소가 여전히 새 이미지를 가리키므로 같은 배포를 무한히 다시 시도합니다.

배포 판정은 Healthy 가 아니라 status.stableRS 로 합니다. 승격이 끝나고 Healthy 가 된 뒤에도 옛 파드가 Terminating 으로 잠시 남아, 이미지를 세면 두 종류가 나옵니다. 안정 판을 가리키는 해시가 유일하게 흔들리지 않는 기준입니다.

retryStrategy.limit 은 총 시도 횟수가 아닙니다. 첫 시도는 여기 들어가지 않으므로 limit: 2 는 실제로 3번 돕니다. 타임아웃 예산을 계산할 때 한 번씩 빠뜨리는 자리입니다.

다음 두 실습에서 이것들을 진짜 컨트롤러 위에서 직접 확인합니다.