Skip to content

Kubernetes ‐ Probe

woojin.jang edited this page May 17, 2026 · 5 revisions

Probe

  • 쿠버네티스에서 Probe는 컨테이너의 헬스를 주기적으로 진단하는 헬스체크 메커니즘이다.
  • kubelet은 컨테이너가 정상적으로 작동 중인지, 트래픽을 받을 수 있는지 확인하기 위해 4가지 핸들러를 사용해 진단을 수행한다.

Probe 유형 및 비교

Probe 종류 핵심 역할 (Purpose) 실패 시 조치 (Action) 주요 유스케이스
Startup Probe 애플리케이션의 초기 구동이 완전히 완료되었는지 확인 컨테이너 재시작 (restartPolicy 적용) Spring Boot처럼 초기 구동 시 무거운 캐시 로딩이나 컨텍스트 초기화로 인해 구동 시간이 오래 걸리는 앱 보호
Liveness Probe 컨테이너가 살아있는 상태(정상 동작 중)인지 감시 컨테이너 재시작 (restartPolicy 적용) 애플리케이션이 실행 중이나 메인 스레드 데드락(Deadlock), 무한 루프 등에 빠져 응답 불능인 상태 구출
Readiness Probe 컨테이너가 유저 트래픽을 받을 준비가 되었는지 실시간 확인 Service 엔드포인트에서 제외 (트래픽 라우팅만 차단) 대규모 캐시 리로드, DB 커넥션 일시 단절, 순간적인 과부하(Overload) 등으로 트래픽 처리가 불가능한 상태 대응

Probe 유기적 라이프사이클 흐름

  • Pod가 생성되면 가장 먼저 Startup Probe가 구동된다.
  • Startup Probe가 성공하기 전까지 Liveness와 Readiness Probe는 완전히 비활성화된다.
  • Startup Probe가 한 번 성공하면 역할을 마치고 종료되며, 이후 Liveiness와 Readiness가 동시에 활성화되어 주기적으로 컨테이너를 검사한다.

Probe의 4가지 검사 메커니즘

  • httpGet : 지정한 포트와 경로로 HTTP GET 요청을 전송. HTTP 상태 코드가 200 이상 400 미만이면 성공으로 간주
  • tcpSocket : 지정한 포트로 TCP 연결을 시도. 포트가 열려 있으면 성공으로 간주
  • exec : 컨테이너 내부에서 특정 명령어를 직접 실행. 명령어 종료 코드가 0이면 성공으로 간주
  • grpc : gRPC 프로토콜을 사용하는 애플리케이션을 위한 메커니즘. gRPC 헬스 체크 프로토콜의 응답 상태를 확인

정밀 제어를 위한 설정 파라미터

initialDelaySeconds: 5  # 컨테이너 시작 후 최초 Probe를 보낼 때까지 대기 시간 (기본값 0)
periodSeconds: 10       # Probe를 수행하는 주기 (기본값 10)
timeoutSeconds: 1       # 응답을 기다리는 제한 시간. 초과 시 실패 (기본값 1)
successThreshold: 1     # 실패 상태에서 몇 번 연속 성공해야 정상 전환할지 (기본값 1)
failureThreshold: 3     # 몇 번 연속 실패해야 최종 실패로 판단하고 액션을 취할지 (기본값 3)

Liveiness와 Readiness의 엔드포인트 분리

  • Liveiness : 앱 프로세스 생존 여부만 체크하는 가벼운 엔드포인트
  • Readiness : DB 연결. 주변 인프라 상태까지 확인하는 엄격한 엔드포인트

Startup Probe 패턴 활용

  • 무거운 앱의 구동을 기다리기 위해 Liveness의 initialDelaySeconds를 길게 잡았고 이 방식은 앱이 완전히 켜진 후 실제 데드락이 걸렸을 때 감지 지연을 유발한다.
  • Startup Probe를 넉넉하게 설정하고 Liveness는 타이트하고 민감하게 설정하여 가동 이후 대응력을 높인다.

표준 가이드라인

apiVersion: v1
kind: Pod
metadata:
  name: backend-app
spec:
  containers:
  - name: main-container
    image: backend-service:latest
    ports:
    - name: liveness-port
      containerPort: 8080

    # 1. 초기 구동 단계 방어벽 (최대 300초 동안 켜지길 기다려줌)
    startupProbe:
      httpGet:
        path: /live
        port: liveness-port
      failureThreshold: 30
      periodSeconds: 10

    # 2. 구동 완류 후, 프로세스 데드락 감시 (단 1번이라도 실패하면 즉시 재시작)
    livenessProbe:
      httpGet:
        path: /live
        port: liveness-port
      failureThreshold: 1
      periodSeconds: 10

    # 3. 구동 완료 후, 실제 트래픽 유입 가능 여부 실시간 감시 (실패 시 라우팅 차단)
    readinessProbe:
      httpGet:
        path: /ready
        port: liveness-port
      failureThreshold: 3
      periodSeconds: 10

📖 Java

📖 Kotlin

📖 Coroutine

📖 Spring

📖 Spring Security

📖 Spring Batch

📖 Reactive Programming

📖 Database

📖 MySQL

📖 Redis

📖 JPA

📖 QueryDsl

📖 MSA

📖 Kafka

📖 Apache Flink

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP

📖 AWS

📖 Docker

📖 Kubernetes

📖 CI/CD

📖 Nginx

📖 Monitoring🥈

  • [Monitoring - Log Concept]
  • [Monitoring - Log Level & Filter]
  • [Monitoring - Logback]
  • [Monitoring - Log Collection with ELK Stack]
  • [Monitoring - Log Monitoring with Kibana]
  • [Monitoring - Building a Monitoring System with Spring Boot Actuator]
  • [Monitoring - Server Monitoring with Prometheus and Grafana with Discord Alerts]

📖 Test

📖 Effective Java 3/E

📖 Kotlin Academy - Effective Kotlin

📖 Kotlin Academy - 핵심편

📖 스프링으로 시작하는 리액티브 프로그래밍

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📖 Clean Code

📖 리팩토링 2판

📖 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식

📖 GraphQL

Clone this wiki locally