이번 포스팅에서는 지난 포스팅에 이어 공식 튜토리얼 마지막 단계인 6단계를 실습해 보도록 한다.
2021.04.04 - [클라우드 컴퓨팅 & NoSQL] - 쿠버네티스(Kubernetes) 공식 튜토리얼 #6
튜토리얼 모듈 6은 "Performing a Rolling Update"에 관한 것이다.
이번 시나리오의 목표는 deploy된 애플리케이션을 Kubectl set imagne로 업데이트시키고 rollout undo 명령어를 이용하여 롤백(rollback) 시키는 기능을 사용해 보는 것이다.
1. Deployment 확인
$ kubectl get deployments
Deployment를 확인해보면 현재 4개의 pod이 있는것을 확인할 수 있다.
Pod 정보를 확인해보면 다음과 같다.
$ kubectl get pods
각기 다른 Key값이 붙어서 pod들이 실행되고 있는 것을 확인할 수 있다.
2. 애플리케이션 Image 버전 확인
다음으로는 kubectl describe pods 명령어를 실행하여 애플리케이션의 버전을 확인해본다.
$ kubectl describe pods
실행결과 중 Image 부분을 보면 gcr.io/google-samples/kubernetes-bootcamp:v1이라고 되어 있다.
3. 애플리케이션 Image 버전 업데이트
다음으로는 set image 명령어를 이용하여 어플리케이션 image 버전을 2로 업데이트한다.
$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
get pods를 실행해보면 이전과 다른 pod들이 배포된 것을 확인할 수 있다.
$ kubectl get pods
1번에서 확인한 실행결과는 다음과 같았다.
뒤의 키값이 달라진 것으로 이전 pod들은 종료되고 새로운 pod들이 생성되었음을 알 수 있다.
4. 애플리케이션 업데이트 내용 확인
다음으로는 애플리케이션이 정상 작동 중인지 확인한다.
describe service 명령어를 이용하여 현지 외부로 노출된 IP와 port를 확인해 보도록 한다.
$ kubectl describe services/kubernetes-bootcamp
CURL을 사용하여 애플리케이션에 접근한다.
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
$ echo NODE_PORT=$NODE_PORT
NODE_PORT를 설정해주고,
$ curl $(minikube ip):$NODE_PORT
curl을 이용하여 에코 서버에 요청을 보내면 다음과 같이 애플리케이션이 잘 실행되고 있음을 확인할 수 있다.
또한 애플리케이션의 버전이 v=2로 변경된 것도 확인할 수 있다.
rollout status 명령어를 이용하여 deployment가 성공적으로 rolled out 되었는지 확인 가능하다.
$ kubectl describe pods
describe pods 명령어로 확인을 해보면 2번 때와 달리 image 버전이 2로 바뀐 것을 확인할 수 있다.
4. 롤백(Rollback) 기능 확인
소프트웨어를 롤백한다는 의미는 이전 상태로 되돌린다는 의미이다.
이번 과정에서는 애플리케이션 업데이트 내역을 롤백하는 기능에 대한 실습을 진행한다.
$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
kubernetes-bootcamp 버전 10 이미지를 이용하여 deploy를 진행한다.
Deployment를 확인해보면 다음과 같다.
$ kubectl get deployments
Deployment를 살펴보면 레디 상태의 pod이 3개뿐인 것을 확인할 수 있다.
뭔가 문제가 생긴 상황이다!!
$ kubectl get pods
다음과 같이 하나의 pod의 상태가 ImagePullBackOff 상태인 것을 확인할 수 있다.
$ kubectl describe pods
descibe pods 명령어를 실행결과를 살펴보면 v10 이미지를 가져오는데 실패한 것을 확인할 수 있다.
kubectl rollout undo deployments/kubernetes-bootcamp
문제가 생긴 상황이 확인되었으므로 rollout undo 명령어를 사용하여 set image 작업을 rollback 시킨다.
실행결과 다음과 같이 rollback 작업이 성공적으로 진행된 것을 확인할 수 있다.
$ kubectl describe pods
describe pods 명령어를 이용하여 pod의 상태가 정상적인지 다시 확인한다.
다음과 같이 pod들의 상태가 v2로 정상적으로 돌아온 것을 확인할 수 있다.
$ kubectl get deployments
get deployments의 결과도 정상적인 것을 확인할 수 있다.
이로써 쿠버네티스에서 제공하는 공식 튜토리얼들을 모두 진행해 보았다. 어플리케이션의 Depolyment, 로드밸런싱, 버전업, 롤백 등 다양
한 쿠버네티스 기능들을 사용해 보니 백엔드 관리가 많이 편해졌다고 느꼈다.
하지만 튜토리얼이다 보니 사용하는 명령어에 대해서 깊이 이해하지 못하고 넘어가는 부분이 있어서 아쉬웠다.
또한 image를 이용하여 update를 수행하는 것을 보면서 '컨테이너 image 제작법에 대해서 더 많이 학습해야 할 것 같다.'는 생각이 들었다.
이제 쿠버네티스의 Docs를 참고하여 더 학습하고, 책에서 예제로 나오는 OSS(Open Source Software)를 이용하여 더욱 다양한 상황에서 쿠버네티스를 사용하며 이해해 보려고 한다.
-ps. 내가 정리한 튜토리얼 진행 내용이 처음 쿠버네티스를 시작하는 많은 백엔드 개발자 분들에게 조금이나마 도움이 되었으면 좋겠다.
참고자료
[1] kubernetes.io | Kubernetes Tutorial | 링크
'클라우드 컴퓨팅 & NoSQL > Kubernetes' 카테고리의 다른 글
[Kubernetes] DEVOCEAN - 김정기 전문가(SK Telecom)님의 멘토링 (2) | 2022.10.09 |
---|---|
[Kubernetes]Nginx 이미지를 이용한 간단한 쿠버네티스 프로젝트 (0) | 2022.07.13 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #6 (0) | 2021.04.04 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #5 (0) | 2021.04.03 |
쿠버네티스(Kubernetes) 공식 튜토리얼 #4 (0) | 2021.04.02 |