개요
- 쿠버네티스의 Deployment 컨트롤러의 기본적인 배포 전략과, 관련된 개념에 대해 정리해 보자.
ReadinessProbe
- Pod 가 트래픽을 받을 준비가 되었는지 판단한다.
- deployment 전략의 무중단 배포와 연관이 높은 기능이다.
Pod 의 상태
| 구분 | 상태 | 설명 |
|---|
| Pod Phase | Pending | 생성됨, 실행 전 대기 상태. |
| Running | 실행 중, Ready 여부는 별도 확인. |
| Succeeded | 정상적으로 종료됨. |
| Failed | 비정상 종료됨. |
| Unknown | 상태를 알 수 없음. |
| Pod Condition | PodScheduled | 노드에 스케줄링 완료. |
| Initialized | Init 컨테이너 실행 완료. |
| ContainersReady | 모든 컨테이너가 Ready 상태. |
| Ready | 트래픽 처리 준비 완료. |
| Container 상태 | Waiting | 실행 대기 중 (이미지 다운로드 등). |
| Running | 실행 중. |
| Terminated | 종료됨 (정상/비정상). |
ReadinessProbe 와 관련된 pod 상태
| 상태 | 관련 조건 | 설명 |
|---|
| Ready | readinessProbe | Pod가 트래픽을 받을 준비가 되었는지 여부. |
| ContainersReady | readinessProbe | Pod 내 모든 컨테이너가 Ready 상태인지 여부. |
- Ready 상태가 되면 (probe 가 완료되면) service (또는 ingress) 의 트래픽이 pod 로 연결된다.
- readinessprobe 를 설정하지 않을 경우, pod 의 모든 컨테이너가 running phase 가 되면 트래픽을 전달한다.
ReadinessProbe 설정 예시
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
Recreate
- Pod 를 종료하고 새로 띄우는 방식으로, 무중단 배포를 할 수 없다.
작동 순서
- 기존 Pod 종료.
- 기존 Pod가 모두 종료된 후 새로운 Pod 생성.
- 새로운 Pod에서 ReadinessProbe 실행 및 Ready 상태 확인.
- Ready 상태가 된 Pod만 서비스에 연결.
언제 사용할 지?
- Pod 를 전부 내렸다가 띄우므로, 동시에 다른 버전의 pod 가 떠있는 경우가 없다.
- 여러 버전의 pod 가 동시에 떠 있으면 문제가 되는 워크로드에 사용이 적합하다.
RollingUpdate
작동 방식
- 새 Pod 생성
- Deployment는 새 버전의 Pod를 하나씩 생성한다.
- 새로 생성된 Pod는 Ready 상태가 될 때까지 트래픽을 받지 않는다.
- 기존 Pod 종료
- 새 Pod가 Ready 상태로 전환되면 기존 Pod를 하나씩 종료합니다.
- Ready 상태의 Pod 수가 항상 maxUnavailable 값을 초과하지 않도록 보장한다.
- 교체 반복
- 위 과정을 반복하여 기존 Pod를 새 Pod로 모두 교체할 때까지 실행됩니다.
maxUnavailable, maxSurge
- 배포 중 Pod의 교체 방식을 세부적으로 제어하는 설정이다.
- 최소 pod 수 = replicas − maxUnavailable
- 최대 pod 수 = replicas + maxSurge
특이사항
- replicas = 1 로 설정할 경우 recreate 와 동일하게 작동한다.
- 무중단 배포? readinessProbe + rollingUpdate 를 설정한다고 해도 중단(502,503) 이 발생할 수 있다.
- 이건 네트워크 등 구성에 따라 트러블슈팅이 필요한 영역이다.