본문 바로가기

카테고리 없음

Kubernetes의 Probe

Probe란?

Probe는 Kubernetes의 컨테이너가 상태를 판단하기 위해 주기적으로 수행하는 검사입니다.

총 3가지 종류가 있으며, 각각의 목적이 다릅니다.

 

1. livenessProbe (생존 여부 확인)

목적: 컨테이너가 '살아있는지' 판단합니다.

동작: livenessProbe에 실패하면 kubelet이 컨테이너를 재시작합니다.

사용 예시: 애플리케이션이 응답은 멈췄지만 프로세스는 살아 있는 상태에서 재시작이 필요한 경우

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

 

2. readinessProbe (서비스 준비 여부 확인)

목적: 컨테이너가 트래픽을 받을 준비가 되었는지 확인합니다.

동작: readinessProbe에 실패하면 Service에서 해당 Pod를 제외시킵니다. (재시작은 X)

사용 예시: DB 연결 등 외부 의존성 확인 후 트래픽을 받고 싶을 때

readinessProbe:
  tcpSocket:
    port: 3306
  initialDelaySeconds: 10
  periodSeconds: 5

 

3. startupProbe (시작 지연 처리)

목적: 컨테이너가 초기화 중인지 확인합니다.

동작: 지정된 시간 내 성공하지 않으면 컨테이너를 실패로 간주하고 재시작합니다. livenessProbe와 중복 실행되지 않으며, startupProbe가 성공하기 전에는 다른 Probe가 실행되지 않습니다.

사용 예시: 초기 로딩 시간이 오래 걸리는 Spring Boot, Node.js 앱 등

startupProbe:
  httpGet:
    path: /health/startup
    port: 8080
  failureThreshold: 30
  periodSeconds: 10

 

Probe 종류 목적 실패 시 동작 사용 시점

livenessProbe 앱이 죽었는지 확인 컨테이너 재시작 실행 중
readinessProbe 요청 받을 준비 되었는지 확인 서비스에서 제외 실행 중
startupProbe 앱이 정상적으로 시작됐는지 확인 재시작 (시작 실패로 간주) 시작 시

 

세 Probe 조합 시나리오

  • startupProbe + livenessProbe 조합
    • 초기 시작 시간에는 startupProbe만 동작 → 이후 livenessProbe로 전환
    • 초기 로딩이 느린 앱에 적합
  • readinessProbe 단독
    • 상태 체크는 하지 않고, 준비 여부만 판단할 때
  • 3종 모두 설정
    • 실제 서비스에선 대부분 이렇게 구성

Probe 흐름도

[Container Start]
      ↓
[StartupProbe 수행 중]
      ↓ (성공 시)
[LivenessProbe 시작]
      ↓
[주기적으로 Liveness 검사]

+ 동시에 (or 이후)
[ReadinessProbe 주기적으로 수행]
→ 성공 시: Service 트래픽 허용
→ 실패 시: Service 트래픽 제외