디플로이먼트는 레플리카셋의 상위 오브젝트이기 때문에 디플로이먼트를 생성하면 해당 디플로이먼트에 대응하는 레플리카셋과 포드도 함께 생성된다. 삭제 시에도 상위 오브젝트인 디플로이먼트를 먼저 삭제해야 레플리카셋과 포드도 삭제된다.(디플로이먼트가 있는 상태에서 레플리카셋이나 포드를 삭제해도 다시 생성됨)
디플로이먼트 YAML파일 작성(파일명: my-nginx-deployment)
레플리카셋과 다른 점은 "kind" 항목에 Delployment로 바뀐 것뿐이다
디플로이먼트 생성
# kubectl apply -f <yaml파일명>
READY 항목에 3/3을 통해 3개의 포드가 정상적으로 준비되었음을 알 수 있다
사실 3개의 포드가 유지되도록 생성하는 것은 레플리카셋이기 때문에 디플로이먼트와 함께 레플리카셋도
생성되었을 것이다(빨간 테두리 안의 숫자를 기억해두자)
레플리카셋 확인
포드 확인
레플리카셋을 그대로 사용하지 않고 디플로이먼트를 사용하는 이유는 뭘까?
애플리케이션의 업데이트와 배포를 더욱 편하게 만들기 위해서다. 애플리케이션을 업데이트할 때 레플리카셋의 변경 사항을 저장하는 리비전을 남겨 롤백을 가능하게 해주고, 무중단 서비스를 위해 포드의 롤링 업데이트도 지원해준다.
지금부터 애플리케이션 이미지 버전이 업데이트 되었을 때(nginx:1.10에서 nginx:1.11로 변경) 디플로이먼트를 수정하거나 업데이트하는 "kubectl set" 명령어 사용을 통해 버전관리 및 롤링 업데이트를 알아보자
우선 기존의 deployment는 삭제한 다음 동일한 YAML파일인(my-nginx-deployment)에서 생성하되 "--record"라는 옵션을 추가해서 생성한다. "--record"옵션을 추가하는 이유는 kubectl 명령을 실행했는지에 대한 기록을 남기기 위해서다.
디플로이먼트 삭제
# kubectl delete deploy(ment) my-nginx-deployment
디플로이먼트 생성
# kubectl apply -f my-nginx-deployment --record
포드의 이미지 버전 변경
"kubectl edit deploy my-enginx-deployment" 명령어를 이용하여 변경해도 된다
# kubectl set image deployment my-nginx-deployment nginx=nginx:1.11 --record
이미지를 변경하고 포드를 확인해보면 기존에 있었던 nginx:1.10 버전의 포드들은(my-nginx-deployment-7484748~) 제거되고 nginx:1.11 버전의 새로운 포드들이(5my-nginx-deployment-556b5794~) 생성되는 것을 볼 수 있다
디플로이먼트 리비전 정보 출력
디플로이먼트 리비전에 대한 자세한 정보를 출력해보면 이미지 업데이트 전 1버전과 업데이트 후 2버전이 있는 것을 볼 수 있는데 이는 디플로이먼트가 포드의 정보가 업데이트 되었을 때 이전의 정보를 리비전으로 보존하는 것이다
# kubectl rollout histort deploy my-nginx-deployment
디플로이먼트 자세한 정보 출력
디플로이먼트에 대한 자세한 정보를 출력해보면 Image가 nginx:1.11 버전으로 변경되고, "Annotations"에 revision이 2로 바뀐 것을 확인할 수 있다. (revision은 업데이트가 될 때마다 1씩 증가)
# kubectl describe deploy my-nginx-deployment
레플리카셋을 보면 기존에 있었던 레플리카셋(my-nginx-deployment-7484748b57)은 replicas의 값이 0인 것으로 보아 더 이상 포드를 생성하지 않고, 이미지를 업데이트함으로써 새롭게 생성된 레플리카셋(my-nginx-deployment-556b57945d)이 포드를 생성하는 것을 볼 수 있다
롤백
만약 이전 버전의 레플리카셋으로 되돌리고 싶다면 다음의 명령어를 사용한다
# kubectl rollout undo deploy my-nginx-deployment --to-revision=리비전번호
롤백 이후 레플리카셋을 보면 새롭게 생성된 레플리카셋(my-nginx-deployment-556b57945d)은 더 이상 포드를 생성하지 않고, 이전 버전의 레플리카셋(my-nginx-deployment-7484748b57)이 다시 포드를 생성하고 있는 것을 알 수 있다
디플로이먼트 상세정보를 보면 image는 다시 1.10 버전으로 돌아왔고, revision은 3으로 변경되었다
'쿠버네티스' 카테고리의 다른 글
쿠버네티스 서비스(Service)를 이용해 포드를 외부에 노출 (0) | 2021.04.28 |
---|---|
kops를 이용해 AWS에 쿠버네티스 설치 (0) | 2021.04.28 |
구글 클라우드(GCP)에 쿠버네티스 연동하기 (0) | 2021.04.26 |
쿠버네티스 라벨을 이용한 레플리카셋 설정 (0) | 2021.04.26 |
쿠버네티스 Pod(포드) 사용하기 (0) | 2021.04.26 |