Hunny's Daily

개발과 일상에서의 달콤한 순간들을 기록하며, 유용한 팁과 인사이트를 공유합니다.

Kubernetes Probe 개념 정리

Liveness, Readiness, Startup Probe의 역할과 차이

Kubernetes 환경에서 애플리케이션을 안정적으로 운영하려면 컨테이너가 정상 상태인지 지속적으로 확인해야 한다. 이를 위해 Kubernetes는 Probe라는 메커니즘을 제공한다. Probe는 컨테이너의 상태를 주기적으로 점검해 재시작 여부나 트래픽 전달 여부를 결정하는 기준이 된다. 이 글에서는 Kubernetes Probe의 기본 개념과 각 Probe의 역할 차이를 정리한다.


Kubernetes Probe란 무엇인가

Probe는 Kubernetes가 컨테이너의 상태를 확인하기 위해 수행하는 상태 검사다.
Kubernetes는 Probe 결과를 기반으로 다음과 같은 결정을 내린다.

  • 컨테이너를 재시작할지 여부
  • 해당 파드로 트래픽을 전달할지 여부
  • 애플리케이션이 초기 기동 단계인지 여부

즉, Probe는 Kubernetes가 애플리케이션의 내부 상태를 간접적으로 판단하기 위한 장치다.


Probe가 필요한 이유

컨테이너가 실행 중이라고 해서 항상 정상 상태라고 볼 수는 없다. 다음과 같은 상황이 발생할 수 있다.

  • 프로세스는 살아 있지만 내부 로직이 멈춘 상태
  • 기동은 되었지만 아직 요청을 처리할 준비가 되지 않은 상태
  • 초기화 작업이 길어 일시적으로 응답이 불가능한 상태

Probe를 설정하지 않으면 Kubernetes는 이러한 상태를 인지하지 못하고 잘못된 트래픽 전달이나 불필요한 재시작을 반복할 수 있다.


Liveness Probe

Liveness Probe란 무엇인가

Liveness Probe는 컨테이너가 살아 있는지를 확인하는 용도다.
이 Probe가 실패하면 Kubernetes는 해당 컨테이너를 비정상 상태로 판단하고 재시작한다.

즉, Liveness Probe의 목적은 다음과 같다.

  • 무한 루프나 데드락 상태 감지
  • 복구 불가능한 상태의 컨테이너 재시작

Liveness Probe 사용 시점

Liveness Probe는 애플리케이션이 더 이상 정상적으로 동작하지 않는 경우에만 실패하도록 설정하는 것이 중요하다.
일시적인 부하나 느린 응답으로 실패하게 되면 불필요한 재시작이 발생할 수 있다.


Readiness Probe

Readiness Probe란 무엇인가

Readiness Probe는 컨테이너가 요청을 처리할 준비가 되었는지를 확인한다.
이 Probe가 실패하더라도 컨테이너는 재시작되지 않는다.

대신 Kubernetes는 해당 파드를 서비스 엔드포인트에서 제외한다.


Readiness Probe와 트래픽 처리

Readiness Probe는 트래픽 제어와 직접적으로 연결된다.

  • 성공: 파드로 트래픽 전달
  • 실패: 파드로 트래픽 전달 중단

이를 통해 다음과 같은 상황을 처리할 수 있다.

  • 애플리케이션 기동 직후 준비되지 않은 상태
  • 외부 의존 서비스 장애로 일시적 요청 처리 불가
  • 배포 중 트래픽을 점진적으로 차단하는 경우

Startup Probe

Startup Probe란 무엇인가

Startup Probe는 애플리케이션이 정상적으로 기동되었는지를 확인하기 위한 Probe다.
기동 시간이 긴 애플리케이션을 위해 도입되었다.

Startup Probe가 성공하기 전까지는 다음 Probe들이 비활성화된다.

  • Liveness Probe
  • Readiness Probe

Startup Probe가 필요한 이유

기동 시간이 긴 애플리케이션의 경우, 초기화 과정 중에는 정상적인 응답을 제공하지 못할 수 있다.
이때 Liveness Probe만 사용하면 Kubernetes가 이를 장애로 오인해 컨테이너를 반복 재시작할 수 있다.

Startup Probe는 이러한 문제를 방지하기 위한 역할을 한다.


세 가지 Probe의 역할 차이

각 Probe는 목적과 동작 방식이 다르다.

  • Liveness Probe
    • 목적: 컨테이너가 살아 있는지 확인
    • 실패 시: 컨테이너 재시작
  • Readiness Probe
    • 목적: 요청 처리 가능 여부 확인
    • 실패 시: 트래픽 전달 중단
  • Startup Probe
    • 목적: 초기 기동 완료 여부 확인
    • 실패 시: 기동 대기 상태 유지

이 차이를 명확히 이해하지 못하면 잘못된 Probe 설정으로 운영 문제가 발생할 수 있다.


Probe 설정 시 자주 발생하는 문제

Probe를 설정할 때 다음과 같은 실수가 자주 발생한다.

  • Liveness Probe를 너무 엄격하게 설정
  • Readiness Probe와 Liveness Probe를 동일하게 설정
  • Startup Probe 없이 긴 기동 시간을 가진 애플리케이션 운영
  • 외부 의존성이 있는 로직을 Liveness Probe에 포함

이러한 설정은 불필요한 재시작이나 트래픽 장애로 이어질 수 있다.


어떤 Probe부터 설정하는 것이 좋은가

실무 기준으로는 다음 순서가 일반적이다.

  1. Readiness Probe
    • 트래픽 제어를 통해 장애 확산 방지
  2. Startup Probe
    • 기동 시간이 긴 애플리케이션 보호
  3. Liveness Probe
    • 복구 불가능한 상태만 감지하도록 제한적으로 사용

모든 Probe를 반드시 설정해야 하는 것은 아니며, 서비스 특성에 맞는 선택이 중요하다.


정리

Kubernetes Probe는 컨테이너의 상태를 판단하는 핵심 메커니즘이다.
Liveness, Readiness, Startup Probe는 각각 다른 목적을 가지고 있으며, 올바르게 설정하지 않으면 오히려 운영 리스크가 커질 수 있다. Kubernetes 환경에서 안정적인 배포와 트래픽 처리를 위해서는 Probe의 역할과 차이를 정확히 이해하고 사용하는 것이 중요하다.