[KUBERNETES] 무중단배포 rolling update strategy


1. 개요

서비스 중단 없이 애플리케이션을 업데이트 하기 위해서, Kubernetes에서는 rolling update라는 기능을 지원합니다. 이 기능을 통해서 전체 Pod을 일시에 중단/업데이트 하는 것이 아니라, 한번에 n개씩 Pod을 순차적으로 업데이트할 수 있습니다. 이를 통해 서비스 중단 현상 없이 애플리케이션 버전 업데이트 및 롤백을 할 수 있습니다.


2. deployment 작성

  • back-end-rolling-deployment.yaml
    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
    name: rolling-update-test
    spec:
    replicas: 3
    minReadySeconds: 10
    strategy:
      type: RollingUpdate
      rollingUpdate:
        maxSurge: 1
        maxUnavailable: 0
    template:
      metadata:
        labels:
          app: web-front-end
          department: group3
      spec:
        containers:
        - name: m-client-web
          image: skarl/client:latest
          env:
          - name: PORT_ARGS
            value: "--port=80"
          ports:
          - containerPort: 80
            name: web-port
            protocol: TCP
    

minReadySeconds : pod이 Ready 단계 부터 Available 단계 까지 식단 차이 시간을 설정하지 않으면 ready에서 곧바로 avaliable이 되고 순단 현상이 일어난다. 적절한 시간을 테스트하여 설정하는것이 좋다.

strategy.type : “Recreate” or “RollingUpdate”를 설정가능. 기본값은 “RollingUpdate”, Recreate의 경우 Pod가 삭제된 후 재생성

strategy.rollingUpdate.maxSurge : rolling update 중 정해진 Pod 수 이상으로 만들 수 있는 Pod의 최대 개수. 기본값은 25%

strategy.rollingUpdate.maxUnavailable : rolling update 중 unavailable 상태인 Pod의 최대 개수를 설정. rollgin update 중 사용할 수 없는 Pod의 최대 개수. 값은 0보다 큰 정수를 통해 Pod의 절대 개수 설정이 가능하고, “25%“와 같이 percentage 표현 가능 . maxUnavailable에서 percentage 계산은 rounding down(내림) 방식이며 기본값은 25% 이다. maxSurge와 maxUnavailable 값이 동시에 0이 될 수 없다.


3. 배포 테스트

  • 운영중인 상태

Alt text


  • rolling update 중인 상태

Alt text


  • update 완료 상태

Alt text