1. Rollout 플러그인 설치
# argo-rollouts namespace 생성
kubectl create namespace argo-rollouts
# argo-rollouts latest 버전 설치
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
Canary 배포를 하려면 ArgoCD Rollout 플러그인 설치가 필요하다.
2. GitOps
2.1. Rollout.yml
Blue Green 배포때 작성했던 Rollout 과 마찬가지로
apiVersion : argoproj.io/v1alpha1
kind: Rollout 으로 작성한다.
- strategy.canary : 카나리아 전략에 구성 가능한 옵션을 제공하는 데 사용되는 새로운 필드
- strategy.canary.steps.setWeight : 카나리아로 전송해야하는 트래픽의 백분율
- strategy.canary.steps.pause : 롤아웃을 일시 중시하도록 지시한다.
pause 구조체 내에 duration 필드가 설정되어 있으면 duration 필드의 값만큼 기다린 후 롤아웃을 진행한다.
그렇지 않으면, 일시 중지 조건이 제거될 때 까지 롤아웃이 무기한 대기한다. duration 값 입력시 Auto Promotion Time 을 의미
(+) canary option more
spec:
strategy:
canary:
analysis: object
antiAffinity: object
canaryService: string
stableService: string
maxSurge: stringOrInt
maxUnavailable: stringOrInt
trafficRouting: object
- maxSurge: 배포되는 Pod의 비율
- maxUnavailable : 배포될 때 이용 불가능해져도 되는 Pod의 수
- maxSurge는 deployment에 설정되어 있는 기본 pod개수보다 여분의 pod가 몇개가 더 추가될 수 있는지를 설정할 수 있다.
- maxUnavailable 는 업데이트하는 동안 몇 개의 pod가 이용 불가능하게 되어도 되는지를 설정하는데 사용된다.
- 이 두개의 옵션을 운영중인 서비스의 특성에 맞게 적절히 조절해 주어야 항상 일정 개수 이상의 pod 가 이용 가능 하게 되기 때문에 배포중 트래픽 유실이 없게 된다. 둘 다 한꺼번에 0으로 설정되면 pod가 존재하지 않는 경우가 발생하기 때문에 한꺼번에 0으로 설정할 수는 없다.
https://argoproj.github.io/argo-rollouts/features/canary/
'DevOps, Infra' 카테고리의 다른 글
[k6] 성능테스트 도구 (0) | 2023.01.10 |
---|---|
[Keycloak] MSA 인증/인가 Open Source Solution Keycloak ? (0) | 2023.01.05 |
[ArgoCD] 블루그린 배포(Blue Green Deployment) (0) | 2022.12.30 |
[ArgoCD] 롤링 배포 (Rolling Deployment) (0) | 2022.12.30 |
[skaffold] window 에 설치한 skaffold Trouble Shooting (0) | 2022.12.29 |