쿠버네티스 Deployment는 기본적으로 RollingUpdate 전략을 가져 가는데

Argo Rollouts을 사용하게 되면 blue-green, canary, canary analysis, experimentation, progressive delivery와 같은 고급 배포 전략을 사용할 수 있다

image

Architecture - Argo Rollouts - Kubernetes Progressive Delivery Controller

rollouts 기능을 사용하기 위해 argo-rollouts 네임스페이스를 생성해 주고 아래 argorollouts-values.yaml파일을 만들어 준다

cat <<EOT > argorollouts-values.yaml
dashboard:
  enabled: true
  service:
    type: NodePort
    nodePort: 30003
EOT

helm install argo-rollouts argo/argo-rollouts --version 2.35.1 -f argorollouts-values.yaml --namespace argo-rollouts로 헬름차트로 인스톨해 주면 argo-rollouts 리소스와 crd가 생성된다

image 1

http://127.0.0.1:30003로 argo rollouts 대시보드에 접속한다

pod를 배포할 기본 네임스페이스는 default다

image 2

argo 프로젝트에서 데모로 rollout이랑 service를 하나씩 생성할 수 있다

kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/rollout.yaml
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/service.yaml

아래와 같이 데모 프로젝트가 생성되고

image 3

처음 배포는 blue 태그로 생성되었다

image 4

처음에는 신규 버전에 가중치 20프로만 주고 기다린(Pause) 다음에 사용자의 선택에 따라 신규 배포를 더 진행할 수 있다

그 다음 순차적으로 40프로, 10초 기다리고, 60프로, 10초 기다리고, 80프로, 10초 기다리고 나면 최종적으로 canary 배포를 마칠 수 있다.

image 5

kubectl edit rollouts rollouts-demo로 현재 태그를 blue에서 yellow로 변경해 보자

image 6

그럼 자동으로 rollouts이 실행되고 사용자가 promote를 누르기 전까지 pause 상태에 멈춰있다

Yes를 눌러 주면 다음 Steps으로 바로 넘어 간다

image 7

마지막까지 실행되고 나면 마지막 pod까지 terminating되고 있는 중이고 Rollback 버튼을 통해 다시 blue 버전으로 롤백도 가능하다

image 8

변경이 완료되었다!

image 9

실습이 종료되면 모든 리소스를 삭제하자

helm uninstall 헬름차트 --namespace 네임스페이스로 설치된 헬름차트를 전부 삭제 해준다

docker compose down -v으로 jenkins랑 gogs 볼륨까지 삭제해 준다!

kind delete cluster --name myk8s로 클러스터를 삭제하고 unset KUBECONFIG으로 kubeconfig도 날려 준다!

image 10

image 11

Categories:

Updated: