쿠버네티스 프로브(Probe)에 대해서 이해하기

Probe란?

쿠버네티스(Kubernetes)에서 프로브(probe)는 애플리케이션의 상태를 확인하는 데 사용되는 메커니즘이다. 프로브는 주기적으로 컨테이너의 상태를 점검하여 서비스가 올바르게 동작하고 있는지 확인한다. startupProbe, liveness Probe, readinessProbe라는 세가지 주요 유형이 있다.

  • initialDelaySeconds: 컨테이너가 시작된 후 프로브를 처음 수행하기 전까지의 지연 시간(초).
  • periodSeconds: 프로브를 수행하는 간격(초).
  • timeoutSeconds: 프로브의 타임아웃(초).
  • failureThreshold: 프로브가 실패로 간주되기 전의 실패 시도 횟수.
  • successThreshold: 프로브가 성공으로 간주되기 전의 성공 시도 횟수 (주로 Readiness Probe에서 사용).

 

startupProbe

startupProbe는 애플리케이션의 초기 시작 상태를 확인하는 데 사용된다. 애플리케이션이 시작되는 데 오랜 시간이 걸리는 경우에 유용하다. startupProbe가 설정되면, 그 프로브가 성공할 때까지 livenessProbe와 readinessProbe는 비활성화된다.

startupProbe:
  httpGet:
    path: "/startup"
    port: 8080
  periodSeconds: 5
  failureThreshold: 24

웹서버가 기동되기 전에는 API를 받지 못하기 때문에 startupProbe는 계속 실패를 하다가 웹서버가 완전히 기동되어 정상적으로 API 호출이 가능해지면 startupProbe는 성공한다.

 

readinessProbe

readinessProbe는 컨테이너가 준비되었는지(서비스 요청을 받을 준비가 되었는지)를 확인한다. readinessProbe가 실패하면, 해당 컨테이너에 대한 트래픽이 라우팅되지 않는다.

readinessProbe:
  httpGet:
    path: "/readiness"
    port: 8080
  periodSeconds: 10
  failureThreshold: 3

startupProbe가 성공하였으므로, readinessProbe도 활성화된다. readinessProbe가 활성화되고 성공하면 외부 트래픽을 파드로 연결한다. readinessProbe가 실패하면 정의된 failureThreshold인 3회간 시도 후 연결이 되지 않으면 컨테이너가 비정상적인 것으로 판단하여 외부 트래픽을 파드로 전달되지 않게 차단한다.

 

livenessProbe

livenessProbe는 컨테이너가 살아있는지(정상적으로 작동하는지)를 확인한다. 만약 livenessProbe가 실패하면, 해당 컨테이너를 종료하고 재시작한다.

livenessProbe:
  httpGet:
    path: "/liveness"
    port: 8080
  periodSeconds: 10
  failureThreshold: 3

startupProbe가 성공하였으므로, livenessProbe도 활성화된다. livenessProbe는 failureThreshold인 3회간 API 호출을 실패하면 컨테이너가 비정상적인 것으로 판단하고 재시작한다.

readinessProbe와 livenessProbe는 앱이 시작되면서부터 죽을 때까지 계속해서 health check를 하는 API이기 때문에 이 로직은 가볍게 만들어주어야 한다.

Designed by JB FACTORY