디플로이먼트 업데이트 전략의 기본값은 RollingUpdate 로, 매니페스트 파일의 spec.strategy.type 필드에서 설정을 변경할 수 있다.
전략 | 설명 | 비고 |
Recreate | 모든 파드를 일괄 삭제하고 새로운 레플리카셋을 생성한 후 그 하위에 새로운 파드를 일괄 생성 | - 서비스 다운타임 발생 - 전환 빠름 |
RollingUpdate | 레플리카셋의 점진적 scaling 을 통해 기존 버전 레플리카 내 파드 수를 줄이고, 신규 버전 레플리카 내 파드 수를 늘리는 액션을 모든 파드가 전환될 때 까지 반복 수행 | - 무중단 배포 - 전환 느림 |
1. Recreate
apiVersion: apps/v1
kind: Deployment
...
spec:
strategy:
type: Recreate
...
위와 같이 매니페스트의 spec.strategy.type: Recreate 만 지정해주면 된다. 업데이트시 추가적인 리소스 확보 필요 없이 일괄로 업데이트가 되지만, 서비스 다운타임이 몇초간 생기므로, 사용에 주의하여야 한다.
2. RollingUpdate
apiVersion: apps/v1
kind: Deployment
...
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
replicas: 3
...
위와 같이 매니페스트의 spec.strategy.type: RollingUpdate 와 spec.strategy.rollingUpdate 에 maxUnavailable, maxSurge 값을 지정해준다. 자세한 설명은 아래와 같다.
- maxUnavailable: 업데이트중 동시에 정지상태가 될 수 있는 최대 파드 갯수
- maxSurge: 업데이트중 동시에 추가 생성될 수 있는 최대 파드 갯수
즉, 이 두 값을 통해서 업데이트중에 최소 살아있어야 하는 pod 갯수와 over 하여 생성될 수 있는 pod 갯수를 제어할 수 있다. 두 값 모두 동시에 0으로 설정할 수는 없다. 설명이 조금 어려운데, 아래와 같이 이해하면 된다.
- 업데이트 중 최소 파드 갯수: $replicas - $maxUnavailable
- 업데이트 중 최대 파드 갯수: $replicase + $maxSurge
replicas: 3, maxUnavailable: 0, maxSurge: 1 로 설정한 경우 아래의 그림과 같이 업데이트된다.
- 최소 파드 갯수: 3
- 최대 파드 갯수: 4
replicas: 3, maxUnavailable: 1, maxSurge: 0 로 설정한 경우 아래의 그림과 같이 업데이트된다.
- 최소 파드 갯수: 2
- 최대 파드 갯수: 3
maxUnavailable, maxSurge 는 백분율 값으로도 지정할 수 있으며, 지정하지 않을 경우 기본값은 각각 25% 이다. 백분율로 설정 시 실제 pod 수 계산은 replicas 에 대한 백분율로 계산 되는데, 계산된 값이 정수로 맞아 떨어지지 않는 경우 아래와 같이 계산된다.
- maxUnavailable: 소수점 내림(round down)
- maxSurge: 소수점 올림(round up)
Deployments
A Deployment manages a set of Pods to run an application workload, usually one that doesn't maintain state.
kubernetes.io
이는 백분율 값 설정시 서비스가 너무 적은 리소스를 할당받아 제대로 서빙되지 못할 것을 우려한 보수적인 정책인 것으로 보인다.
'Kubernetes' 카테고리의 다른 글
[Kubernetes] 데몬셋(DaemonSet) (0) | 2025.09.02 |
---|---|
[Kubernetes] 디플로이먼트 업데이트 상세 설정 (0) | 2025.08.31 |
[Kubernetes] 디플로이먼트 롤백 (1) | 2025.08.31 |
[Kubernetes] 디플로이먼트 생성과 업데이트 (1) | 2025.08.31 |
[Kubernetes] 레플리카셋을 이용한 파드의 스케일링 (0) | 2025.08.25 |