CAPA — Argo 프로젝트 인증 어소시에이트 · Argo Rollouts 점진적 배포 · 실습
카나리·블루그린과 되돌리기
목표
카나리와 블루그린 Rollout 매니페스트, 그리고 지표 기반 자동 롤백을 담당하는 AnalysisTemplate 을 작성하고, 대응되는 Service 와 Deployment 를 실제로 올려 롤아웃과 되돌리기를 손으로 수행합니다.
왜 중요한가
점진적 배포의 핵심은 "새 버전을 얼마나 노출할지" 와 "무엇을 보고 계속할지 결정할지" 두 가지입니다. setWeight 는 앞의 답이고 analysis 는 뒤의 답입니다. duration 없는 pause 는 그 판단을 사람에게 넘기는 자리이고, AnalysisTemplate 은 같은 판단을 지표에 맡기는 자리입니다. 한편 되돌리기 자체는 Argo Rollouts 의 발명이 아니라 쿠버네티스가 ReplicaSet 을 리비전으로 남겨 두기 때문에 가능한 일입니다. 이 실습에서 두 층을 모두 만져 보면 Rollout 이 어디까지 새로운 것인지 구분이 섭니다.
단계
1. /root/capa-rollout/ 디렉터리를 만들고 rollout.yaml 에 apiVersion argoproj.io/v1alpha1, kind Rollout, metadata.name capa-web, metadata.namespace capa-rollout, spec.replicas 4, spec.selector.matchLabels.app capa-web, 컨테이너 이미지 nginx:1.27 을 쓰세요.
2. 같은 파일의 spec.strategy.canary.steps 를 다섯 개 이상으로 만들되, 첫 스텝은 setWeight: 20, 두 번째는 pause: {duration: 30s}, 세 번째는 setWeight: 50, 마지막 스텝은 setWeight: 100 이 되게 하세요.
3. /root/capa-rollout/analysistemplate.yaml 에 kind AnalysisTemplate, metadata.name capa-success-rate 를 쓰고 spec.metrics[0] 에 name success-rate, interval 30s, failureLimit 3, 0.95 이상을 요구하는 successCondition, 그리고 provider.prometheus.address 를 채우세요.
4. rollout.yaml 의 카나리 스텝 중 하나를 analysis 스텝으로 만들어 templates[0].templateName 이 capa-success-rate 를 가리키게 하고, spec.strategy.canary.canaryService 를 capa-web-canary, stableService 를 capa-web-stable, trafficRouting.nginx.stableIngress 를 capa-web-stable 로 지정하세요.
5. /root/capa-rollout/rollout-bluegreen.yaml 에 kind Rollout, metadata.name capa-api 를 쓰고 spec.strategy.blueGreen 아래에 activeService capa-api-active, previewService capa-api-preview, autoPromotionEnabled false, scaleDownDelaySeconds 60 을 넣으세요. 이 파일에는 canary 를 함께 쓰지 마세요.
6. 클러스터에 네임스페이스 capa-rollout 을 만들고 그 안에 Service capa-web-stable 과 capa-web-canary 를 실제로 만드세요. 둘 다 type ClusterIP, spec.selector.app capa-web, 포트 80 입니다.
7. 같은 네임스페이스에 Deployment capa-web 을 실제로 만드세요. replicas 는 4, spec.selector.matchLabels.app 은 capa-web, 컨테이너 이미지는 nginx:1.27 입니다.
8. capa-web 의 이미지를 nginx:1.28 로 한 번 바꿔 새 리비전을 만든 뒤 되돌리세요. 최종 상태는 이미지가 다시 nginx:1.27 이고 리비전 번호가 3 이상이어야 합니다.
참고
kubectl set image deploy/capa-web nginx=nginx:1.28 -n capa-rollout와kubectl rollout undo deploy/capa-web -n capa-rollout를 씁니다.- 리비전은
kubectl rollout history deploy/capa-web -n capa-rollout로 확인할 수 있습니다. - 흔한 실수 1: 되돌린 뒤 리비전이 줄어들 것이라 기대하는 것. 되돌리기도 새 리비전으로 기록됩니다.
- 흔한 실수 2: 한 Rollout 에 canary 와 blueGreen 을 같이 쓰는 것. 전략은 하나만 고를 수 있습니다.
단계 8개
- Rollout 골격
- 가중치와 멈춤 스텝
- AnalysisTemplate 작성
- 분석 스텝과 트래픽 라우팅 연결
- 블루그린 전략
- 안정·카나리 서비스 두 개 만들기
- 대응되는 Deployment 올리기
- 올렸다가 되돌리기