Deployment
ReplicaSet과 Pod의 배포 관리, 선언적 업데이트를 제공한다.
ReplicaSet의 상위 오브젝트이다.
쿠버네티스에서 공식적으로 Deployment를 사용해서 애플리케이션 배포를 권장한다.
<ReplicaSet만 가지고 배포를 한다면?>
- Pod의 개수를 유동적으로 조절할 수 있다. 하지만, 코드를 수정하고 배포했는데 코드가 잘못된 경우 이전 버전으로 배포해야 하는 경우는 코드를 원래대로 수정하고 이미지로 만들어서 업데이트해야 한다.
- 실제로 운영 환경에서는 ReplicSet만 가지고 배포하지 않는다. 대신, Deployment 오브젝트를 정의해서 배포하게 된다.
<Deployment를 사용하는 이유?>
- Deployment를 생성하면 ReplicaSet과 그 안에서 관리하는 Pod도 자동으로 생성이 된다.
- Deployment는 애플리케이션의 업데이트와 배포를 편리하게 사용하기 위해서 만들어져있다.
- ReplicSet의 변경사항을 저장하는 Revision을 통해 쉽게 Rollback이 가능하고 무중단 서비스를 위한 Pod의 롤링 업데이트 전략을 제공해준다.
▶ Deployment API 확인
kubectl api-resources
Deployment Yaml 파일 작성
▷ matchLabels : ReplicaSet에서 개수를 유지해야 하는 Pod를 찾을 때, 이 라벨을 가지는 Pod를 n개 생성한다.
▷ template : Pod에 대한 설정
※ ReplicaSet과 다른점?
- kind, metadata만 다르고 나머지는 똑같다.
- Deployment는 ReplicaSet의 상위버전이고 관리해주는 역할하기 때문에 yaml 파일에 작성하는 부분이 spec 이하 부분은 전부 동일하고, ReplicaSet을 관리해주는 Deployment 객체가 만들어지는 것이다.
▶ Deployment 생성
kubectl apply -f Yaml파일경로 [옵션]
▶ Deployment 목록 확인
유지되는 Pod 개수 확인 가능
kubectl get deployments
▷ -o : ReplicaSet의 Pod 선택기, 컨테이너 이름, 이미지 이름 확인 가능
▶ Deployment 상세 정보 확인
kubectl describe deploy [옵션]
▶ Deployment로 생성된 ReplicaSet, Pod 정보 확인
- ReplicaSet 이름 : Deployment 이름 + 16진수 랜덤 값
- Pod 이름 : ReplicaSet이름 + 16진수 랜덤 값
[실습]
먼저 cd C:\Users\블라블라\cloud\02_Kubernetes\03_Deployment 로 프롬프트 이동
Deployment 오브젝트를 만들자.
kubectl apply -f .\kuweb-deployment.yaml
하면,
deployment.apps/kuweb-deployment created 라고 출력되면서 deployment 오브젝트가 생성됨
목록을 조회, 목록 상세 조회, deployment 상세 정보 조회 해보자
Deployment 생성되면서 같이 생성된 ReplicaSet과 Pod도 목록 확인할 수 있다.
rs와 po 뒤에는 16진수 형태의 랜덤값으로 각각 구분된다.
이제 각각 Pod의 IP로 접근해보자.
kubectl get po -o wide
Pod의 IP를 확인한다.
▶ 테스트용 리눅스 버서에서 접속 확인
kubectl exec -it kuserver -- /bin/ash
CURL 을 활용해서 3개의 Pod 모두 각 IP:8080로 index.jsp 가 잘 보이는지 확인해본다.
Deployment 이미지 업데이트를 해보자.
▶ Deployment 이미지 업데이트
kubectl set image deploy Deployment이름 컨테이너이름=이미지이름 --record=true
▷ --record : 변경사항을 기록하여 해당 버전의 ReplicaSet을 보존
예시 > kubectl set image deploy kuweb-deployment kuweb=testweb:2.0 --recored=true
▶ Deployment Rollout 기록 확인
kubectl rollout history deploy [Deployment이름] [옵션]
예시 > kubectl rollout history deploy kuweb-deployment
혹은 상세하게 보기는 kubectl rollout history deploy kuweb-deployment --revision=1
배포 기록을 확인할 수 있다.
변경된 사항은 Revision으로 기록된다.
Revision 별 세부 사항이 확인 가능하다.
▶ Deployment 롤백
kubectl rollout undo deploy deploy이름 [--to-revision=번호]
예시 > kubectl rollout undo deploy kuweb-deployment
혹은 kubectl rollout undo deploy kuweb-deployment --to-revision=1
하면,
deployment.apps/kuweb-deployment rolled back
가 출력된다.
- 바로 이전으로 롤백하거나 내가 원하는 버전으로 롤백 가능
배포가 안정적이지 않은 경우 안정적인 이전 버전으로 롤백
--to-revision을 생략하면 바로 이전 버전으로 롤백
jsp 파일을 수정하면 도커 파일을 다시 빌드해줘야 한다.
▶ pod 개수 줄일 때
kubectl scale --replicas=1 deployment kuweb-deployment
▶ Deployment 삭제
kubectl delete deploy deploy명
예시 > kubectl delete -f .\kuweb-deployment_v3.yaml
'Programming > Cloud' 카테고리의 다른 글
DAY 179. 쿠버네티스(Kubernetes) - HPA (0) | 2022.02.18 |
---|---|
Day 178. 쿠버네티스(Kubernetes) - Service Object (0) | 2022.02.17 |
DAY 176. 쿠버네티스(Kubenetest) - Replica Set (0) | 2022.02.15 |
DAY 175. 쿠버네티스(Kubernetes) - Yaml 파일 (0) | 2022.02.14 |
DAY 174. 쿠버네티스(Kubernetes) - Pod 사용하기 (0) | 2022.02.12 |