Deployment - ReCreate와 Rolling Update 차이점
by youngjun._.controller에서 Deployment는 대표적으로 네 가지 Update 방식을 제공했다.
2020/04/08 - [Kubernetes] - Controller - Deployment의 네 가지 방식
그중에서 ReCreate와 Rolling Update 방식을 자세히 알아보자.
ReCreate
(1) 하나의 Service를 연결할 때
실제로 어떻게 동작하는지 자세히 알아보자.
- deployment를 만들 때 Replica에서 활용했던 selector와 replicas, template 값을 넣어준다.
- 이 값들은 ReplicaSet을 만들고 내부에 값을 지정하기 위한 용도로 사용한다.
- 만들어진 ReplicaSet은 그 내용으로 pod를 생성한다.
- 이후에 Service를 만들어 pod의 label에 연결하면
- Service를 통해 pod에 접근할 수 있게 된다.
(2) ReCreate Upgrade
- Deployment의 template을 v2 버전으로 업데이트한다.
- Deployment는 ReplicaSet의 replicas를 0으로 변경한다.
- pod를 제거한다.
- Service의 연결 대상이 없어진다.
- DownTime이 발생!
- 새로운 ReplicaSet을 만들어준다.
- v2 버전으로 설정되기 때문에 Pod도 v2로 만들어진다.
- Service와 pod연결은 label로 연결된다.
- v2버전으로 Update 완료
(3) 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와 마찬가지 원리로 동작한다!
(2) Rolling Update 방식으로 버전 Upgrade
- Deployment의 template을 v2 버전으로 업데이트한다.
- 먼저 v2 버전의 ReplicaSet을 새로 만든다. 이때 relicas는 1로 만든다!
- 하나의 새로운 v2 버전 pod 파드는 똑같은 label이므로 Service에 연결된다.
- v1 버전과 v2 버전에 트래픽이 분산돼서 보내진다.
- 기존 ReplicaSet의 replicas를 1로 변경해 v1 pod 하나를 삭제한다.
- v2의 replicas를 2로 변경해 v2 pod를 생성한다.0
- v1의 replicas를 0으로 변경해 남은 pod를 삭제한다.
- 버전 Upgrade 완료
(3) yaml 파일
strategy type에 RollingUpdate
minReadySeconds란?
이 값을 설정하지 않고 업데이트하면 v1 v2 pod가 추가되고 삭제되는 것이
순식간에 진행된다.
10초로 설정한 이유는 실습할 때 pod 추가 삭제를 눈으로 확인하기 위해서 설정했다.
이 속성에 관한 내용과 의미는 나중에 더 자세히 배울 예정이다!
여기서 궁금한 점
ReplicaSet을 만들 때 pod v1의 label과 동일하기 때문에 옆으로 연결될 수 있지 않을까?
이때 Deployment에서는 label 이외의 값을 설정해서 이렇게 연결될 일 없음!
추가적인 label과 selector를 만들어주기 때문이다.
실습을 통해 알아보자.
'Infra > Kubernetes' 카테고리의 다른 글
Kubeflow 설치 - Ubuntu 18.04(nvidia-docker) (0) | 2020.06.10 |
---|---|
Controller - Deployment의 네 가지 방식 (0) | 2020.04.08 |
ReplicaSet의 3가지 기능 (0) | 2020.04.07 |
Kubernetes - Controller (0) | 2020.04.07 |
Kubernetes - Namespace, ResourceQuota, LimitRange란? (0) | 2020.03.13 |
블로그의 정보
개발하는만두
youngjun._.