설치 시 service account, clusterrole, configmap, secret, svc, pod 등이 생성된다.
# Argo Rollouts에서 사용할 Namespace 생성
kubectl create namespace argo-rollouts
# 공식적으로 지원하는 manifest인 install.yaml을 사용하여 설치 진행
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
Argo Rollouts Kubectl plugin 은 선택 사항이나 명령 줄에서 롤아웃을 관리하고 시각화하는 데 편리하다.
# Argo Rollouts Kubectl 플러그인 설치
curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
# kubectl-argo-rollouts 바이너리 권한 변경
chmod +x ./kubectl-argo-rollouts-linux-amd64
# kubectl-argo-rollouts 바이너리 파일 PATH로 이동
sudo mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
# 설치 테스트
kubectl argo rollouts version
3. Blue/Green 배포 테스트
1) Blue/Green Manifest 배포
spec.strategy를 blueGreen으로 지정한다.
activeService: rollout-bluegreen-active → 현재 운영 중인 서비스
previewService: rollout-bluegreen-preview → 새 버전의 배포에 연결되는 서비스
autoPromotionEnabled: false → 자동으로 Blue/Green 변경되지 않고 사용자 승인 후 교체 진행
boc@vm-bastion-hub:~/test$ k get svc -n my-ns
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/rollout-bluegreen-active LoadBalancer 192.168.0.199 20.249.192.1 80:30664/TCP 15m
service/rollout-bluegreen-preview LoadBalancer 192.168.0.112 20.249.192.39 80:31609/TCP 15m
2) Manifest 수정
하기와 같이 Manifest를 수정하여 Green 버전을 배포한다.
k edit rollouts.argoproj.io -n my-ns rollout-bluegreen
# image: argoproj/rollouts-demo:blue -> image: argoproj/rollouts-demo:green 변경
새로운 버전의 replicaset이 배포되면 preview 서비스는 기존의 replicaset(Blue버전)에서 새로운 replicaset(Green버전)으로 트래픽이 변경된다. 이에, preview 서비스 IP로 접속했을 때 Green 버전으로 변경된 것을 확인할 수 있다.
autoPromotionEnabled 옵션이 false로 설정되어 있어 Blue에서 Green으로 자동으로 배포되지 않고 Pause 상태로 멈춰 있는 것을 확인할 수 있다.
boc@vm-bastion-hub:~/test$ k argo rollouts list rollout -n my-ns
NAME STRATEGY STATUS STEP SET-WEIGHT READY DESIRED UP-TO-DATE AVAILABLE
rollout-bluegreen BlueGreen Paused - - 3/6 3 3 3
3) promote 진행
Green 버전이 정상적으로 배포된 것을 확인한 후 promote를 진행한다.
promote과정을 통해 Blue 버전으로 배포되어있던 pod들이 모두 삭제되고 Rollouts의 상태가 healthy로 변한다.
active와 preview 접속 시 모두 Green으로 바뀐것을 확인할 수 있다.
# promote 진행
boc@vm-bastion-hub:~/test$ kubectl argo rollouts promote rollout-bluegreen -n my-ns
rollout 'rollout-bluegreen' promoted
# argo rollouts list 확인
boc@vm-bastion-hub:~/test$ kubectl argo rollouts list rollout -n my-ns
NAME STRATEGY STATUS STEP SET-WEIGHT READY DESIRED UP-TO-DATE AVAILABLE
rollout-bluegreen BlueGreen Healthy - - 3/3 3 3 3
# pod 확인
boc@vm-bastion-hub:~/test$ kubectl get pods -n my-ns
NAME READY STATUS RESTARTS AGE
rollout-bluegreen-84d95ffc99-flqkt 1/1 Running 0 42m
rollout-bluegreen-84d95ffc99-pw7m9 1/1 Running 0 42m
rollout-bluegreen-84d95ffc99-z77lw 1/1 Running 0 42m