devops
쿠버네티스 디플로이먼트로 블루/그린, 카나리 배포하기 본문
블루/그린 배포
기존 버전을 교체할 최신 버전 디플로이먼트 세트를 생성하고 service의 spec.selector를 이용하여 이미 생성된 파드를 교체하는 작업을 하면된다.
이 후 최신 버전에서 문제 발생시 재교체하며 롤백한다.
https://www.cncf.io/wp-content/uploads/2020/08/CNCF-Presentation-Template-K8s-Deployment.pdf
https://semaphoreci.com/blog/continuous-blue-green-deployments-with-kubernetes
카나리 배포
카나리 배포는 v1을 v2로 배포하지만 v2로 유입되는 트래픽을 서서히 늘리는 방법이다. 배포 중 오류가 발생하면 자동으로 롤백되어야 하고, 오류가 발생하지 않으면 v2로 100% 트래픽이 유입되어야 한다.
카나리 디플로이먼트에는 main, canary, baseline 3개의 subset을 사용한다
- main (v1): 이미 배포되어 100%의 traffic을 받는 v1 Pod 그룹이다. 배포 과정이 성공적으로 끝나면 그룹 내의 모든 Pod이 v2가 되며 다시 100%의 traffic을 받게 된다.
- canary (v2): Canary pod의 그룹이다. 전체 traffic의 n%를 유입시키며 각종 지표를 비교한다.
- baseline (v1): Canary subset의 지표를 비교하기 위해 생성한 v1 Pod 그룹이다. Canary subset과 지표를 비교해야 하므로 전체 traffic의 n%를 넣는다.
1. Baseline과 canary subset을 배포한다.
2. n%의 traffic을 각각 baseline과 canary subset에 전달한다. main subset은 당연히 100-2*n%의 traffic을 받는다.
3. 이제 baseline과 canary subset의 metric을 비교한다. 둘 다 n%의 동일한 traffic을 받으며, 버전만 다르기 때문에 모든 metric은 동등해야 한다. (이 과정은 사람이 직접 하거나, 자동으로 수행할 수 있다)
4. 문제가 없으면 n을 조금씩 올리며 2~3단계를 반복한다. 이때, traffic을 처리하는 데 문제가 없도록 baseline과 canary subset의 Pod 개수를 잘 조절해야 한다.
5. n을 50%까지 올린다. 이 단계가 되면 main subset은 traffic을 받지 않으며, baseline과 canary subset이 각각 50%씩 traffic을 받는다.
6. 50%에서도 문제가 없으면, main subset을 v2로 update한 뒤 main subset에 100%의 traffic을 전달한다.
7. 마지막으로 baseline subset과 canary subset을 삭제한다.
https://hyperconnect.github.io/2020/08/19/microsrv-deploy-3.html
'DevOps > Kubernetes' 카테고리의 다른 글
쿠버네티스 오류 Unable to connect to the server: dial tcp 192.168.49.5:8443: connect: no route to host (1) | 2022.06.30 |
---|---|
ClusterIP, NodePort, LoadBalancer, ExternalName (0) | 2022.06.30 |
nginx 디플로이먼트 간단 실습 (0) | 2022.06.30 |
파드( Pods)와 디플로이먼트(Deployment) (0) | 2022.06.30 |
쿠버네티스(Kubernetes) 설치 가이드 (0) | 2022.06.30 |