DevOps, Infra

[ArgoCD]카나리 배포 (Canary Deployment)

seulseul 2022. 12. 30. 00:21

    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 플러그인 설치가 필요하다.

     

    참고 : ArgoCD Rollouts

    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/

     

    Canary - Argo Rollouts - Kubernetes Progressive Delivery Controller

    Canary Deployment Strategy A canary rollout is a deployment strategy where the operator releases a new version of their application to a small percentage of the production traffic. Overview Since there is no agreed upon standard for a canary deployment, th

    argoproj.github.io