로컬에서는 잘 되는데 ☘️

Deployment - ReCreate와 Rolling Update 차이점

by youngjun._.

controller에서 Deployment는 대표적으로 네 가지 Update 방식을 제공했다.

2020/04/08 - [Kubernetes] - Controller - Deployment의 네 가지 방식

불러오는 중입니다...

그중에서 ReCreate와 Rolling Update 방식을 자세히 알아보자.

ReCreate

(1) 하나의 Service를 연결할 때

실제로 어떻게 동작하는지 자세히 알아보자.

Deployment → ReplicaSet → Pod → Service

  1. deployment를 만들 때 Replica에서 활용했던 selector와 replicas, template 값을 넣어준다.
  2. 이 값들은 ReplicaSet을 만들고 내부에 값을 지정하기 위한 용도로 사용한다.
  3. 만들어진 ReplicaSet은 그 내용으로 pod를 생성한다.
  4. 이후에 Service를 만들어 pod의 label에 연결하면
  5. Service를 통해 pod에 접근할 수 있게 된다.

 

(2) ReCreate Upgrade

ReCreate Upgrade방식 동작

  1. Deployment의 template을 v2 버전으로 업데이트한다.
  2. Deployment는 ReplicaSet의 replicas를 0으로 변경한다.
  3. pod를 제거한다.
  4. Service의 연결 대상이 없어진다.
  5. DownTime이 발생!
  6. 새로운 ReplicaSet을 만들어준다.
  7. v2 버전으로 설정되기 때문에 Pod도 v2로 만들어진다.
  8. Service와 pod연결은 label로 연결된다.
  9. v2버전으로 Update 완료

(3) yaml 파일

ReCreate Upgrade 방식 yaml 파일

Deployment를 만들 때 selector, replicas, template 이 spec에 들어간다.

 

배포방식을 정할 수 있는데

strategy type에 Recreate로 입력하면 된다.

 

revisionHistoryLimit는 뭘까?
Upgrade 진행 시 남은 ReplicaSet을 몇개로 유지할 지 설정할 수 있다.
새로운 ReplicaSet을 만들었지만 기존의 ReplicaSet을 지우지 않았는데
이 상태에서 새로운 버전으로 Upgrade 되는 경우도 v2의 ReplicaSet이 남아있게 된다.

이것을 방지하기 위해 revisionHistoryLimit을 정해주면 지정한 숫자만큼만
ReplicaSet을 유지하고 이전 값은 삭제한다! (Default = 10개)

 

Rolling Update (default)

마찬가지로 서비스가 운영중인 상태일 때 새로운 버전으로 Upgade하자.

(1) 하나의 Service를 연결할 때

ReCreate와 마찬가지 원리로 동작한다!

Rolling Update에서 하나의 서비스를 운영

(2) Rolling Update 방식으로 버전 Upgrade

Rolling Update하는 원리

  1. Deployment의 template을 v2 버전으로 업데이트한다.
  2. 먼저 v2 버전의 ReplicaSet을 새로 만든다. 이때 relicas는 1로 만든다!
  3. 하나의 새로운 v2 버전 pod 파드는 똑같은 label이므로 Service에 연결된다.
  4. v1 버전과 v2 버전에 트래픽이 분산돼서 보내진다.
  5. 기존 ReplicaSet의 replicas를 1로 변경해 v1 pod 하나를 삭제한다.
  6. v2의 replicas를 2로 변경해 v2 pod를 생성한다.0
  7. v1의 replicas를 0으로 변경해 남은 pod를 삭제한다.
  8. 버전 Upgrade 완료

(3) yaml 파일

RollingUpdate 방식의 yaml 파일

strategy type에 RollingUpdate

 

minReadySeconds란?

이 값을 설정하지 않고 업데이트하면 v1 v2 pod가 추가되고 삭제되는 것이

순식간에 진행된다.

10초로 설정한 이유는 실습할 때 pod 추가 삭제를 눈으로 확인하기 위해서 설정했다.

이 속성에 관한 내용과 의미는 나중에 더 자세히 배울 예정이다!

 

 

여기서 궁금한 점
ReplicaSet을 만들 때 pod v1의 label과 동일하기 때문에 옆으로 연결될 수 있지 않을까?
이때 Deployment에서는 label 이외의 값을 설정해서 이렇게 연결될 일 없음!
추가적인 label과 selector를 만들어주기 때문이다.
실습을 통해 알아보자.

 

 

블로그의 정보

개발하는만두

youngjun._.

활동하기