-
클라우드: 쿠버네티스 디플로이먼트(Deployment) 실습하기K8S 2021. 2. 14. 11:04
앞서 레플리카셋을 yaml파일로 작성하고 이를 이용해서 레플리카셋을 만들었다.
하지만 실제 쿠버네티스 운영에서는 레플리카셋과 포드의 정보를 정의하는 디플로이먼트(Deployment)라는 오브젝트를 yaml파일에 정의하여 사용한다.
디플로이먼트는 레플리카 셋의 상위 오브젝트이기 때문에 디플로이먼트를 생성하면 해당 디플로이먼트에 대응하는 레플리카셋도
함께 생성된다.
다음 yaml 파일을 이용해서 디플로이먼트에 대해서 알아보자
< deployment-nginx.yaml >
apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx-deployment spec: replicas: 3 selector: matchLabels: app: my-nginx template: metadata: name: my-nginx-pod labels: app: my-nginx spec: containers: - name: nginx image: nginx:1.10 ports: - containerPort: 80
위 파일을 클러스터에 적용시킨다.
kubectl apply -f deployment-nginx.yaml
다음과 같이 디플로이먼트를 생성하면서 레플리카셋과 포드가 함께 생성되었음을 알 수 있다.
레플리카셋을 삭제하면 레플리카셋에 의해 만들어진 포드는 삭제된다.
마찬가지로 디플로이먼트를 삭제하면 레플리카셋과 포드 또한 함께 삭제된다.
그렇다면 왜 굳이 디플로이먼트를 사용하는 걸까?
디플로이먼트 없이도 레플리카셋만으로 포드를 동일한 개수의 포드를 유지할 수 있다.
디플로이먼트를 사용하는 이유는 어플리케이션의 업데이트와 배포를 편하게 만들기 위해서 사용한다.
말그대로 Deployment다.
이번에는 디플로이먼트를 이용해 어플리케이션의 버전을 업데이트하고 이를 배포하는 실습을 해본다.
먼저 위에서 실습했을 때 yaml파일을 이용해서 클러스터에 적용시킨다.
단, --record 옵션을 추가한다.
kubectl apply -f deployment-nginx.yaml --record
다음과 같이 레플리카셋이 생성된 것을 알 수 있다. 이 때 뒤의 해쉬값에 유의하자.
이후 nginx 이미지버전을 1.10에서 1.11로 업데이트한다.
kubectl set image deployment my-nginx-deployment nginx=nginx:1.11 --record
다음은 이미지 버전 업데이트 후, deployment, replicaset, pods의 상태이다.
디플로이먼트에서는 변화를 찾을 수 없다.
반면 레플리카셋에서는 하나의 레플리카셋이 추가로 생성되었음을 알 수 있다.
이렇게 디플로이먼트는 포드의 정보가 변경되어 업데이트가 발생했을 때, 이전 버전의 레플리카셋은
삭제하지 않고, 남겨둔다.
이번에는 업데이트 전 디플로이먼트에 대한 정보를 알아보자
kubectl rollout history deployment my-nginx-deployment
이전에 커맨드에 --record 옵션을 주었는데 이는 디플로이먼트에 변경사항을 기록함으로써
이전버전의 레플리카셋을 보존하기 위함이다.
만약 이전의 버전으로 돌아가고 싶다면 다음과 같이 롤백을 한다.
kubectl rollout undo deployment my-nginx-deployment --to-revision=1
다음과 같이 롤백을 하면서, 레플리카 셋의 포드 수가 변하는 것을 볼 수 있다.
디플로이먼트의 정보를 자세히 출력해서 알아보려면 다음과 같이 입력한다.
kubectl describe deploy my-nginx-deployment
용찬호 개발자님의 "시작하세요! 도커/쿠버네티스"를 인용해서 작성했습니다.
반응형'K8S' 카테고리의 다른 글
클라우드: 쿠버네티스 네임스페이스(namespace) 실습하기 (0) 2021.03.28 클라우드: 쿠버네티스 서비스(Service) ClusterIP와 NodePort 실습하기 (0) 2021.02.18 클라우드: 쿠버네티스 레플리카셋(Replica Set) 실습하기 (2) 2021.02.05 클라우드: 쿠버네티스 포드(Pod) 오브젝트 사용하기 (0) 2021.02.01 클라우드: 쿠버네티스 설치하기 (0) 2021.01.31