쿠버네티스에서는 배포 방법으로 블루/그린 배포, 카나리 배포, 롤링 업데이트 등을 사용할 수 있다. 롤링 업데이트 방식은 운영중인 어플리케이션의 파드 수를 하나씩 줄이고, 새로운 어플리케이션의 파드 수를 하나씩 늘려가며 변경하는 방법이다. 쿠버네티스는 어플리케이션 이미지를 업데이트 하면 롤링 업데이트 방식으로 배포를 진행할 것이다. 쿠버네티스에서 배포 업데이트는 버전으로 관리되고, 이전의 안정적인 버전으로도 복구가 가능하다.
다음 테스트는 kubernetes-bootcamp:v1 이미지를 사용 중인 서비스 환경에서 v2 이미지로 교체하였을 때 어플리케이션의 배포 진행을 파악하고, 다시 v1 이미지로 복원하는 시나리오 이다.
4개의 파드에 kubernetes-bootcamp:v1 이미지를 구동하여, 이미 서비스로 운영중임을 확인.
$ kubectl get deployment -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR kubernetes-bootcamp 4/4 4 4 11m kubernetes-bootcamp gcr.io/google-samples/kubernetes-bootcamp:v1 run=kubernetes-bootcamp | cs |
해당 deployment 에 어플리케이션 이미지를 교체할 때, kubectl edit deployment 명령을 사용하거나 kubectl set image 명령을 사용할 수 있다.
$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2 | cs |
위 명령은 deployment 에 다른 이미지를 사용하도록 변경하고, 롤링 업데이트를 시작하도록 한다. 업데이트 확인.
$ kubectl get deployment -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR kubernetes-bootcamp 4/4 4 4 26m kubernetes-bootcamp jocatalin/kubernetes-bootcamp:v2 run=kubernetes-bootcamp | cs |
잠시 후에 서비스 ip 로 접근해 보면, 다음과 같이 새로운 v2 버전의 파드에 로드 밸런싱 되는 것을 확인할 수 있다.
$ curl service_ip Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-nqlrr | v=2 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-tjdrs | v=2 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-b6sdv | v=2 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-sr2aw | v=2 | cs |
그렇다면 업데이트 과정을 살펴보자.
$ kubectl describe deployment Scaled up replica set kubernetes-bootcamp-6bf84cb898 to 4 Scaled up replica set kubernetes-bootcamp-5bf4d5689b to 1 Scaled down replica set kubernetes-bootcamp-6bf84cb898 to 3 Scaled up replica set kubernetes-bootcamp-5bf4d5689b to 2 Scaled down replica set kubernetes-bootcamp-6bf84cb898 to 2 Scaled up replica set kubernetes-bootcamp-5bf4d5689b to 3 Scaled down replica set kubernetes-bootcamp-6bf84cb898 to 1 Scaled up replica set kubernetes-bootcamp-5bf4d5689b to 4 Scaled down replica set kubernetes-bootcamp-6bf84cb898 to 0 | cs |
새로 생성된 ReplicaSet(5bf4d5689b) 의 파드 수가 하나씩 늘어나고, 동시에 ReplicaSet(6bf84cb898) 의 파드 수가 줄어들며 롤링 업데이트가 진행되는 것을 확인할 수 있다.
만약에 경우에 이전 버전의 업데이트로 돌아가려면 rollout undo 명령으로 가능하다.
$ kubectl rollout undo deployments/kubernetes-bootcamp deployment.extensions/kubernetes-bootcamp rolled back $ curl service_ip Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-nqlrr | v=1 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-tjdrs | v=1 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-b6sdv | v=1 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5bf4d5689b-sr2aw | v=1 | cs |
여기서 또 다시 rollout undo 명령을 실행하면 v1 버전보다 더 예전의 업데이트가 아닌 바로 전인 v2 버전으로 다시 돌아가는 것에 주의하자.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.