본문 바로가기
클라우드

Kubernetes liveness, readness, startup probe

by CleanCoder 2024. 3. 13.

 

Probe는 쿠버네티스에서 컨테이너 상태를 주기적으로 진단하기 위해 사용되는 기능이다. 이를 통해 쿠버네티스는 각 컨테이너의 상태를 체크하고 문제가 발생한 경우에는 해당 컨테이너를 자동으로 재시작하거나 서비스에서 제외할 수 있다.

Probe는 kubelet에 의해 주기적으로 실행되며, 세 가지 종류의 핸들러를 사용하여 컨테이너의 상태를 진단한다:

  1. ExecAction: 컨테이너 내에서 지정된 명령어를 실행한다. 명령어 실행 후의 exit code를 통해 성공 또는 실패를 판단한다.
  2. TCPSocketAction: 지정된 포트로 TCP 소켓 연결을 시도한다.
  3. HttpGetAction: 지정된 URL 및 포트로 HTTP GET 요청을 전송하고, 응답 상태 코드를 확인하여 성공 또는 실패를 판단한다.
  4. grpc probe : RPC는 HTTP/2 기반의 RPC 프레임워크로, 서버와 클라이언트 간의 효율적인 통신을 지원한다. gRPC 서비스가 올바르게 동작하는지 확인하기 위해 gRPC Probe를 사용할 수 있다.

Probe에는 세 가지 종류가 있다:

 

  1. Liveness Probe: 애플리케이션의 상태를 체크하여 컨테이너가 정상적으로 동작하는지 여부를 판단한다. 문제가 발생한 경우 컨테이너를 재시작하여 문제를 해결한다.
  2. Readiness Probe: 컨테이너가 요청을 처리할 준비가 되었는지를 확인한다. 새로운 요청이 들어오기 전에 컨테이너를 서비스에서 제외시키는 역할을 한다.
  3. Startup Probe: 애플리케이션이 시작되었는지를 체크한다. 다른 Probe가 활성화되기 전에 먼저 성공해야 한다. 오랜 시간이 걸리거나 불규칙한 시작 시간을 가지는 애플리케이션에 사용된다.

이러한 Probe는 각각의 상황에 맞게 적절히 사용된다. Liveness Probe는 애플리케이션의 데드락 상태를 감지하여 재시작하는 데 유용하며, Readiness Probe는 트래픽 라우팅을 시작하기 전에 컨테이너가 준비되었는지 확인한다. Startup Probe는 시작 시간이 불규칙한 애플리케이션에 사용된다.

 

Liveness Probe:

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

위의 예시에서는 /health 엔드포인트로 HTTP GET 요청을 전송하여 애플리케이션의 상태를 확인한다. 초기 지연 시간은 10초이며, 그 후 15초마다 주기적으로 확인한다.

Readiness Probe:

Readiness Probe는 컨테이너가 요청을 처리할 준비가 되었는지 확인하는 데 사용된다. 예를 들어, 데이터베이스가 적절히 초기화되고 준비되었는지를 확인하는 경우에 사용할 수 있다.

readinessProbe:
  exec:
    command:
    - check_database_status.sh
  initialDelaySeconds: 20
  periodSeconds: 10

위의 예시에서는 check_database_status.sh 스크립트를 실행하여 데이터베이스의 상태를 확인한다. 초기 지연 시간은 20초이며, 그 후 10초마다 주기적으로 확인합니다.

 

Startup Probe:

Startup Probe는 애플리케이션이 시작되었는지를 확인하는 데 사용된다. 예를 들어, 초기 설정 파일을 로드하고 필요한 데이터를 미리 다운로드하는 등의 초기화 작업을 수행하는 경우에 사용할 수 있다.

startupProbe:
  exec:
    command:
    - check_initialization.sh
  initialDelaySeconds: 30
  periodSeconds: 5

 

예시에서는 check_initialization.sh 스크립트를 실행하여 초기화 작업이 완료되었는지 확인한다. 초기 지연 시간은 30초이며, 그 후 5초마다 주기적으로 확인한다.

 

 

grpc probe health check 예시

livenessProbe:
      grpc:
        port: 50051
      initialDelaySeconds: 5
      periodSeconds: 10

라이브니스 프로브가 컨테이너의 50051 포트로 gRPC 요청을 보낸다. 프로브가 실패하는 경우, 쿠버네티스는 컨테이너를 시작한 후 5초(initialDelaySeconds)를 기다린 후 컨테이너의 상태를 매 10초(periodSeconds)마다 확인한다. 프로브가 계속 실패하면 쿠버네티스는 컨테이너를 다시 시작한다.

 

정리

  • Liveness Probe: 애플리케이션이 데드락 상태에 빠질 수 있는 경우나, 무한 루프에 빠지는 등의 상황에서 사용된다.
  • Readiness Probe: 애플리케이션이 초기화되고 요청을 처리할 준비가 되었는지 확인해야 하는 경우나, 트래픽 라우팅을 시작하기 전에 필요한 경우에 사용된다.
  • Startup Probe: 애플리케이션이 시작되는 데 오랜 시간이 걸리거나 불규칙적인 초기화 작업을 수행하는 경우에 사용된다. 다른 Probe가 활성화되기 전에 초기화 작업이 완료되었는지 확인하기 위해 사용된다.

댓글