'kubernetes maxSurge'에 해당되는 글 1건

디플로이먼트 업데이트 전략의 기본값은 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

이는 백분율 값 설정시 서비스가 너무 적은 리소스를 할당받아 제대로 서빙되지 못할 것을 우려한 보수적인 정책인 것으로 보인다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,