devops

쿠버네티스 디플로이먼트로 블루/그린, 카나리 배포하기 본문

DevOps/Kubernetes

쿠버네티스 디플로이먼트로 블루/그린, 카나리 배포하기

vataops 2022. 6. 30. 17:12
반응형

블루/그린 배포

기존 버전을 교체할 최신 버전 디플로이먼트 세트를 생성하고 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

 

Continuous Blue-Green Deployments With Kubernetes - Semaphore

Learn how to create a CI/CD pipeline that deploys an application in Kubernetes using the blue-green methodology.

semaphoreci.com

카나리 배포

카나리 배포는 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

 

Kubernetes에 Microservice 배포하기 3편 - Canary Deployments with Istio

Istio를 사용하여 microservice를 canary 배포한 과정을 공유합니다.

hyperconnect.github.io

 

반응형
Comments