ArgoCD Blue/Green 설정 (6부)

mcock·2022년 6월 7일
0

NKS CI/CD구축

목록 보기
7/7

ArgoCD Rollout Blue/Green 배포 설정을 합니다.
우선 helm help 로 helm 이 설치 되어있는지 확인 합니다.

설치가 안되어있다면 아래 명령어로 Helm 을 설치 합니다.

snap install helm --classic


아래와 같이 argo-rollouts 네이스페이스를 생성하고 설치 합니다.

helm repo add stable https://charts.helm.sh/stable
helm repo update
# argo-rollouts 네임스페이스 생성
kubectl create namespace argo-rollouts 
kubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml # argo-rollouts 생성

#다운로드
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

설치가 완료 되었다면 이제 기존 jenkins pipeline 의 pipeline script 에서 Push Yaml 스테이지의 deployment.yaml 부분을 아래과 같이 수정 합니다.

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  labels:
    app: review
  name: review-rollout
  namespace: default
spec:
  selector:
    matchLabels:
      app: review
  replicas: 2
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: review
    spec:
      containers:
      - image: ${NCR_TASK_URL}/review:ver${env.BUILD_NUMBER}
        name: review
        ports:
        - containerPort: 7000
      imagePullSecrets:
      - name: regcred
  strategy:
    blueGreen:
      activeService: review-svc-active
      previewService: review-svc-preview
      autoPromotionEnabled: false	  

---
apiVersion: v1
kind: Service
metadata:
  name: review-svc-active
  namespace: default
spec:
  ports:
    - port: 7000
      name: http
      protocol: TCP
      targetPort: 7000
  type: NodePort
  selector:
    app: review

---
apiVersion: v1
kind: Service
metadata:
  name: review-svc-preview
  namespace: default
spec:
  ports:
    - port: 7000
      name: http
      protocol: TCP
      targetPort: 7000
  type: NodePort
  selector:
    app: review

Blue/Green 배포를 하기 위해 기존 deployment.yaml 파일을 위와 같이 수정 하였습니다
위 내용에서 눈여겨볼 부분은 아래와 같습니다.

autoPromotionEnabled: false	

이 값이 false 이면 자동이 아닌 수동으로 rollout 승인을 해줘야 배포가 됩니다.

기존 review 의 deployment 와 svc, ingress 를 지우고 위 jenkins pipeline 을
실행 합니다.
두번 실행 하고 나서 아래 명령어로 확인해 보면 총 4개의 pod 가 생성 되고 그중 2개가 READY 상태이며 STATUS 는 Paused 입니다.

kubectl argo rollouts list rollout -n default


아래와 같이 argocd 콘솔에서도 확인 할 수 있습니다.

이제 아래와 같이 Promote 승인 합니다.

kubectl argo rollouts promote -n default review-rollout

또는 argocd 콘솔에서 아래와 같이 Promote-full 승인 합니다.

그리고 아래와 같이 변화를 확인 합니다.

review-svc-active 서비스에 로드밸런서 ALB 를 연결하여 확인 하겠습니다.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: review-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
    alb.ingress.kubernetes.io/description: 'alb ingress controller'
  labels:
    app: review-ingress
spec:
  backend:
    serviceName: review-svc-active
    servicePort: 7000
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: review-svc-active
              servicePort: 7000

위와 같이 mysample-rollout-ingress.yaml 파일을 생성 후 kubectl apply -f mysample-rollout-ingress.yaml 을 실행하여 로드밸런서를 생성 하였습니다.



preview Service 테스트는 아래와 같이 port-forward 로 확인 합니다.

kubectl port-forward --address 0.0.0.0 pod/[pod name] 7000:7000 -n default

이상 Blue/Green 배포까지 완료 하였습니다.
오늘도 셋팅 하시느라 고생 많으셨습니다.

0개의 댓글