본문 바로가기

Programming/Cloud

Day 177. 쿠버네티스(Kubernetes) - Deployment 사용

 

 

 

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도 목록 확인할 수 있다.

 

shortname으로 조회

 

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