argo-rollouts의 namespace 생성
kubectl create namespace argo-rollouts
manifest 파일 이용하여 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
Blue/Green 이미지 준비
Blue/Green 배포하기
아래 예제를 사용하여 Blue/Green 배포할 Rollout과 Service를 생성합니다.
다음과 같이 Manifest 파일을 사용 할 repository에 push한다.
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: board-front-bluegreen
namespace: front
spec:
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
app: board-front-bluegreen
template:
metadata:
labels:
app: board-front-bluegreen
spec:
containers:
- name: board-api-bluegreen
# image: mirrorkyh/osc-board-front-java:blue
image: mirrorkyh/osc-board-front-java:green
ports:
- name: http
containerPort: 8080
strategy:
blueGreen:
# blue 버전 서비스
activeService: rollout-bluegreen-active
# Green 버전 서비스
previewService: rollout-bluegreen-preview
#autoPromotioEnabled 옵션은 Blue/Green 배포를 자동으로 진행할 것인지 여부. false 옵션을 사용해 수동으로 지정
autoPromotionEnabled: false
---
# active가 blue 버전
kind: Service
apiVersion: v1
metadata:
name: rollout-bluegreen-active
spec:
selector:
app: board-front-bluegreen
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
# preview가 green 버전
kind: Service
apiVersion: v1
metadata:
name: rollout-bluegreen-preview
spec:
selector:
app: board-front-bluegreen
ports:
- protocol: TCP
port: 80
targetPort: 8080
아르고씨디 내부 모습
블루 버전 파드와 그린 버전 파드가 모두 성공적으로 실행되고 있습니다.
블루/그린 교체 선언
롤아웃 리스트 확인
kubectl argo rollouts list rollout -n front
롤아웃 승인
kubectl argo rollouts promote board-front-bluegreen -n front
리스트 확인
상태가 Healthy로 바뀐 것을 확인 가능합니다.
kubectl argo rollouts list rollout -n front
아르고cd 내부에서 확인 한 모습입니다.