[CI/CD]3주차 - Argo Rollout + K8S(Kind)
쿠버네티스 Deployment는 기본적으로 RollingUpdate 전략을 가져 가는데
Argo Rollouts을 사용하게 되면 blue-green, canary, canary analysis, experimentation, progressive delivery와 같은 고급 배포 전략을 사용할 수 있다
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가 생성된다
http://127.0.0.1:30003로 argo rollouts 대시보드에 접속한다
pod를 배포할 기본 네임스페이스는 default다
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
아래와 같이 데모 프로젝트가 생성되고
처음 배포는 blue 태그로 생성되었다
처음에는 신규 버전에 가중치 20프로만 주고 기다린(Pause) 다음에 사용자의 선택에 따라 신규 배포를 더 진행할 수 있다
그 다음 순차적으로 40프로, 10초 기다리고, 60프로, 10초 기다리고, 80프로, 10초 기다리고 나면 최종적으로 canary 배포를 마칠 수 있다.
kubectl edit rollouts rollouts-demo
로 현재 태그를 blue에서 yellow로 변경해 보자
그럼 자동으로 rollouts이 실행되고 사용자가 promote를 누르기 전까지 pause 상태에 멈춰있다
Yes를 눌러 주면 다음 Steps으로 바로 넘어 간다
마지막까지 실행되고 나면 마지막 pod까지 terminating되고 있는 중이고 Rollback 버튼을 통해 다시 blue 버전으로 롤백도 가능하다
변경이 완료되었다!
실습이 종료되면 모든 리소스를 삭제하자
helm uninstall 헬름차트 --namespace 네임스페이스
로 설치된 헬름차트를 전부 삭제 해준다
docker compose down -v
으로 jenkins랑 gogs 볼륨까지 삭제해 준다!
kind delete cluster --name myk8s
로 클러스터를 삭제하고 unset KUBECONFIG
으로 kubeconfig도 날려 준다!