본문 바로가기
K8S

[kubenetes] Probe 에 대해 알아보자

by Rainbound-IT 2024. 12. 20.
반응형

Kubernetes의 Probe는 Pod 내 컨테이너의 상태를 주기적으로 확인하는 메커니즘으로, 컨테이너의 상태를 기반으로 서비스가 정상적으로 동작하는지 진단합니다. Probe는 컨테이너의 진단 시점을 결정하고, 서비스 관리에 중요한 역할을 합니다.


Probe의 유형과 서비스 진단 시점

  1. Liveness Probe (활성 상태 진단)
    • 목적: 컨테이너가 여전히 실행 중인지 확인.
    • 진단 시점:
      • 컨테이너가 내부적으로 멈췄거나 무한 루프에 빠졌을 경우, 이를 감지하여 컨테이너를 재시작.
    • 사용 시나리오:
      • 컨테이너가 종료되지 않았지만, 요청을 처리하지 못하는 상태일 때.
      • 예: Deadlock, 응답이 없는 상태.
    • 결과 동작:
      • 실패 시: Kubernetes가 컨테이너를 강제로 재시작.
    • 설정 예제:
      livenessProbe:
        httpGet:
          path: /healthz
          port: 8080
        initialDelaySeconds: 3
        periodSeconds: 5
       

  1. Readiness Probe (준비 상태 진단)
    • 목적: 컨테이너가 요청을 처리할 준비가 되었는지 확인.
    • 진단 시점:
      • 컨테이너가 시작되었지만, 애플리케이션이 아직 초기화되지 않은 경우.
      • 또는 서비스가 일시적으로 준비되지 않은 상태일 때.
    • 사용 시나리오:
      • 서비스가 정상적으로 요청을 처리할 준비가 될 때까지 트래픽이 전달되지 않도록 설정.
    • 결과 동작:
      • 실패 시: Pod가 Service에서 제거되고 트래픽이 전달되지 않음.
    • 설정 예제:
      readinessProbe:
        httpGet:
          path: /ready
          port: 8080
        initialDelaySeconds: 5
        periodSeconds: 10

  1. Startup Probe (시작 상태 진단)
    • 목적: 컨테이너가 애플리케이션을 시작하는 데 시간이 오래 걸릴 경우 확인.
    • 진단 시점:
      • 애플리케이션 초기화 과정에서 느린 시작을 감지하여 Liveness Probe의 오작동 방지.
    • 사용 시나리오:
      • 초기화가 오래 걸리는 애플리케이션.
      • 초기화 완료 전 Liveness Probe에 의해 컨테이너가 재시작되는 문제 방지.
    • 결과 동작:
      • 실패 시: Kubernetes가 컨테이너를 재시작.
      • 성공 시: Liveness Probe로 전환.
    • 설정 예제:
      startupProbe:
        httpGet:
          path: /healthz
          port: 8080
        initialDelaySeconds: 10
        periodSeconds: 5
        failureThreshold: 30

Probe의 동작 흐름

  1. Startup Probe
    • Pod가 초기화되는 동안만 활성화.
    • 성공하면 비활성화되고, Liveness Probe가 활성화.
  2. Liveness Probe
    • 주기적으로 컨테이너 상태 확인.
    • 실패 시, 컨테이너 재시작.
  3. Readiness Probe
    • Pod가 Service에 연결될 준비가 되었는지 확인.
    • 실패 시, 트래픽이 해당 Pod로 전달되지 않음.

Probe의 진단 주기 및 설정

  • initialDelaySeconds: Probe 실행을 시작하기 전 대기 시간.
  • periodSeconds: Probe 실행 주기.
  • timeoutSeconds: Probe 요청의 타임아웃 시간.
  • successThreshold: 성공으로 간주하기 위한 연속 성공 횟수.
  • failureThreshold: 실패로 간주하기 위한 연속 실패 횟수.

Probe와 Service의 진단 시점 연계

  • Readiness Probe 실패 시:
    • Service는 Pod를 Endpoints에서 제거.
    • 외부 트래픽은 Pod로 전달되지 않음.
  • Liveness Probe 실패 시:
    • Kubernetes가 Pod을 재시작하여 서비스 복구 시도.
  • Startup Probe 실패 시:
    • Pod을 초기화 실패로 간주하고 재시작.

예제: 모든 Probe를 사용하는 경우

apiVersion: v1
kind: Pod
metadata:
  name: probe-example
spec:
  containers:
  - name: nginx
    image: nginx
    startupProbe:
      httpGet:
        path: /healthz
        port: 80
      initialDelaySeconds: 10
      periodSeconds: 5
    livenessProbe:
      httpGet:
        path: /healthz
        port: 80
      initialDelaySeconds: 20
      periodSeconds: 10
    readinessProbe:
      httpGet:
        path: /ready
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10

이 설정은 애플리케이션의 초기화, 실행 상태, 준비 상태를 각각 관리하여 서비스의 안정성을 높입니다.

반응형

댓글