Kubernetes deployment 컨트롤러 strategy 옵션 정리

Keno Kim·2024년 12월 25일

개요

  • 쿠버네티스의 Deployment 컨트롤러의 기본적인 배포 전략과, 관련된 개념에 대해 정리해 보자.

ReadinessProbe

  • Pod 가 트래픽을 받을 준비가 되었는지 판단한다.
  • deployment 전략의 무중단 배포와 연관이 높은 기능이다.

Pod 의 상태

구분상태설명
Pod PhasePending생성됨, 실행 전 대기 상태.
Running실행 중, Ready 여부는 별도 확인.
Succeeded정상적으로 종료됨.
Failed비정상 종료됨.
Unknown상태를 알 수 없음.
Pod ConditionPodScheduled노드에 스케줄링 완료.
InitializedInit 컨테이너 실행 완료.
ContainersReady모든 컨테이너가 Ready 상태.
Ready트래픽 처리 준비 완료.
Container 상태Waiting실행 대기 중 (이미지 다운로드 등).
Running실행 중.
Terminated종료됨 (정상/비정상).

ReadinessProbe 와 관련된 pod 상태

상태관련 조건설명
ReadyreadinessProbePod가 트래픽을 받을 준비가 되었는지 여부.
ContainersReadyreadinessProbePod 내 모든 컨테이너가 Ready 상태인지 여부.
  • Ready 상태가 되면 (probe 가 완료되면) service (또는 ingress) 의 트래픽이 pod 로 연결된다.
  • readinessprobe 를 설정하지 않을 경우, pod 의 모든 컨테이너가 running phase 가 되면 트래픽을 전달한다.

ReadinessProbe 설정 예시

readinessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10

Recreate

  • Pod 를 종료하고 새로 띄우는 방식으로, 무중단 배포를 할 수 없다.

작동 순서

  1. 기존 Pod 종료.
  2. 기존 Pod가 모두 종료된 후 새로운 Pod 생성.
  3. 새로운 Pod에서 ReadinessProbe 실행 및 Ready 상태 확인.
  4. Ready 상태가 된 Pod만 서비스에 연결.

언제 사용할 지?

  • Pod 를 전부 내렸다가 띄우므로, 동시에 다른 버전의 pod 가 떠있는 경우가 없다.
  • 여러 버전의 pod 가 동시에 떠 있으면 문제가 되는 워크로드에 사용이 적합하다.

RollingUpdate

작동 방식

  1. 새 Pod 생성
  • Deployment는 새 버전의 Pod를 하나씩 생성한다.
  • 새로 생성된 Pod는 Ready 상태가 될 때까지 트래픽을 받지 않는다.
  1. 기존 Pod 종료
  • 새 Pod가 Ready 상태로 전환되면 기존 Pod를 하나씩 종료합니다.
  • Ready 상태의 Pod 수가 항상 maxUnavailable 값을 초과하지 않도록 보장한다.
  1. 교체 반복
  • 위 과정을 반복하여 기존 Pod를 새 Pod로 모두 교체할 때까지 실행됩니다.

maxUnavailable, maxSurge

  • 배포 중 Pod의 교체 방식을 세부적으로 제어하는 설정이다.
    • 최소 pod 수 = replicas − maxUnavailable
    • 최대 pod 수 = replicas + maxSurge

특이사항

  • replicas = 1 로 설정할 경우 recreate 와 동일하게 작동한다.
  • 무중단 배포? readinessProbe + rollingUpdate 를 설정한다고 해도 중단(502,503) 이 발생할 수 있다.
    • 이건 네트워크 등 구성에 따라 트러블슈팅이 필요한 영역이다.
profile
개발자의 생각 로그

0개의 댓글