먼저 롤 아웃 네임스페이스를 생성하고 롤아웃을 설치
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
리스트 확인해 보면 정상적으로 배포되고 있습니다.