DevBoi

[k8s] Deployment 실습 본문

Infra/[K8S & Docker]

[k8s] Deployment 실습

HiSmith 2022. 8. 28. 16:27
반응형

Deployment는 쿠버네티스에서 가장 널리 사용되는 오브젝트 이다.

ReplicaSet을 이용해서 Pod을 업데이트하고, 이력을 관리하여 롤백 하거나 특정 버전으로 돌아 갈 수 있다.

 

라는데... 감이 완전히 오지는 않네... 우선 해보자

 

ReplicaSet과 상당히 유사하며, 심지어 replica를 설정하는 부분도 있다.

템플릿과 같이 스케일 아웃시 어떤 포맷 기준으로 할지도 적어 놓고, 컨테이너에 대한 이름과 이미지도 지정이 되어있다.

이런식으로 하면, deploy에 대한 걸 확인 해 볼 수 있다.

레플리카셋이랑 뭐가다름? 이라고하면 업데이트할 때 다르다고한다.

 

기존설정에서 이미지 태그를 변경하고 적용해보자

마지막만 보자,

이미지 태그를 v1 -> v2로 변경하고 apply를 하면, 기존걸 삭제하는것이아니라, 신규를 생성, 업데이트를 한다.

버전을 업데이트 하면 새로운 ReplicaSet을 생성하고 해당 ReplicaSet이 새로운 버전의 pod을 생성한다고 한다.

 

0개에서 1개로 이동하고, 정상적이라면 기존 버전은 한개씩 줄이고, 신규 버전은 목표대비 한개씩 늘려가면서 관리가 된다.

최종으로는 구버전 0개, 신버전은 목표 4개가 다 되는것이다.

 

describe한 결과이다.

마지막에 이벤트 부분을 보면, 구버전은 스케일 다운, 신버전은 스케일 업이 되면서, 개수를 늘려나가는거다.

스케일 업과 스케일 아웃은 다른 개념이지만, 로그그대로 읽으면 그렇다

실제로 스케일업과 스케일 아웃은 was대수를 늘리거나, 성능을 높이는것을 뜻한다.

실제로 상세 구현 과정? 동작과정은 아래와 같다.

Deployment 컨트롤러에서 원하는 배포상태를 체크하고 조건에 맞는 복제본을 생성한다.(상태가 다르면)

Deployment 는 Replicaset을 만들고, Replicaset Controller는 Replicat 상태를 감지,

pod을 생성,제거 한다. 이를 스케줄러가 보고, 적절한 노드에 배치한다.

 

한마디로 Deployment 는 레플리카를 포함하는 것이다.

 

이것만 한다면 사실 별 사용 이유가 없지만 한가지 기능을 더 지원한다.

 

1) 버전관리

Deployment는 변경된 상태를 기록한다.

 

우선 아까 확인했던, kubectl rollout history deploy/[name]을 하게되면

해당 디폴로이먼트의 버전 히스토리를 알 수 있다.

 

또한 kubectl rollout history deploy/[name]을 하고 --revision을 넘기면 상세 리비전 내용을 볼 수있다.

만약에 rollingUpdate에서 maxSurge가 3개면, 한번에 pod이 3개씩 생성이 된다.

describe로 로그를 보면 그렇다. 기본값은 25%라고하는데, 무튼 업데이트할때 몇개씩 업데이트를 할지 개수를 정해주는건 실무에서는 무조건 일 것같다.

 

반응형

'Infra > [K8S & Docker]' 카테고리의 다른 글

[Docker] Docker Study 기본  (0) 2022.11.21
[Docker] 메모리 정리  (0) 2022.11.02
[k8s] ReplicaSet 실습  (0) 2022.08.28
[k8s] Pod 생성 및 실습  (0) 2022.08.27
[k8s] 기본 명령어 공부  (0) 2022.08.27