Canary 배포

carlkim·2023년 10월 19일
0

먼저 롤 아웃 네임스페이스를 생성하고 롤아웃을 설치
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
kubectl용 plugin 설치를 진행합니다.

다운로드
curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64

권한 변경
chmod +x ./kubectl-argo-rollouts-linux-amd64

파일이동
sudo mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts

설치 확인
kubectl argo rollouts version

Canary 배포용 YAML 파일 작성

apiVersion: argoproj.io/v1alpha1
kind: Rollout                    # Rollout으로 생성
metadata:
  name: canary-rollout
spec:
  replicas: 10
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: canary
  template:
    metadata:
      labels:
        app: canary
    spec:
      containers:
      - name: canary-rollouts-demo
        image: mirrorkyh/osc-board-front-java:v1
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
  # 이 부분에서 카나리로 지정
  strategy:
    canary:
      maxSurge: "10%"    # canary 배포로 생성할 pod의 비율
      maxUnavailable: 0  # 업데이트 될 때 사용할 수 없는 pod의 최대 수
      steps:
      - setWeight: 25    # 카나리로 배포된 서버로 전송해야될 트래픽 비율
      - pause: {}        # AutoPromotion Time (하단 설명 참조)
---
kind: Service
apiVersion: v1
metadata:
  name: canary-service
spec:
  selector:
    app: canary
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 32000
  type: NodePort

부하 걸리기를 바라고 배포했으나 부하 걸리지 않았다.
다시 해봐야한다.

rollouts promote 명령으로 카나리 전략을 승인해줘야 작동합니다.
kubectl argo rollouts promote -n canary canary-rollout
리스트 확인해 보면 정상적으로 배포되고 있습니다.

profile
기본부터 가면 됩니다.

0개의 댓글