카테고리 없음

[Scenario Playbook - 심화편 | Low Level #5] Liveness & Readiness Probe를 활용한 애플리케이션 헬스 체크 설정

ygtoken 2025. 3. 16. 18:53
728x90

 

쿠버네티스에서 애플리케이션이 비정상적인 상태일 때 자동으로 재시작하거나, 준비되지 않은 상태에서는 트래픽을 받지 않도록 설정하는 것이 중요합니다.

이를 위해 Liveness Probe(생존 검사)와 Readiness Probe(준비 검사)를 활용하여 애플리케이션의 상태를 주기적으로 확인하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. Liveness Probe를 활용한 애플리케이션 상태 확인 및 자동 복구

2. Readiness Probe를 활용한 준비 상태 확인 및 트래픽 차단

3. Liveness & Readiness Probe를 함께 활용하여 안정적인 서비스 운영

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ Liveness Probe를 활용한 애플리케이션 상태 확인 및 자동 복구

 

❓ 문제 상황

 

운영팀에서 애플리케이션이 정상적으로 실행 중인지 주기적으로 확인하고, 비정상적인 경우 자동으로 재시작되도록 설정해야 합니다.

특정 애플리케이션이 5초마다 상태를 확인하고, 3번 연속 실패하면 컨테이너를 재시작하도록 구성해야 합니다.

Pod 이름: liveness-pod

검사 방법: /healthz 엔드포인트로 HTTP 요청

검사 주기: 5초마다

실패 기준: 3회 연속 실패 시 컨테이너 재시작

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Liveness Probe를 설정하여 컨테이너의 상태를 주기적으로 검사합니다.

 

2. kubectl을 사용하여 Liveness Probe가 정상적으로 동작하는지 확인합니다.

 


✅ 정답 Manifest (Liveness Probe 설정)

apiVersion: v1
kind: Pod
metadata:
  name: liveness-pod
spec:
  containers:
  - name: app-container
    image: nginx
    livenessProbe:
      httpGet:
        path: /healthz  # 상태 확인을 위한 엔드포인트
        port: 80
      initialDelaySeconds: 5  # 컨테이너 시작 후 5초 후부터 검사 시작
      periodSeconds: 5  # 5초마다 검사 수행
      failureThreshold: 3  # 3번 실패하면 컨테이너 재시작

 

 


📌 적용 후 예상 결과 값

 

1. Liveness Probe가 정상적으로 동작하는지 확인

kubectl describe pod liveness-pod

 

💡 예상 출력 값 (비정상 상태 시 자동 재시작됨)

Events:
  Type     Reason     Age   From               Message
  ----     ------     ----  ----               -------
  Warning  Unhealthy  1m    kubelet            Liveness probe failed
  Normal   Killing    1m    kubelet            Container app-container failed liveness probe, will be restarted

 

 


2️⃣ Readiness Probe를 활용한 준비 상태 확인 및 트래픽 차단

 

❓ 문제 상황

 

운영팀에서 애플리케이션이 완전히 기동된 후에만 트래픽을 받을 수 있도록 해야 합니다.

특정 애플리케이션이 초기 부팅 시간이 10초 이상 걸리므로, 준비되지 않은 상태에서는 외부에서 요청을 받지 않도록 설정해야 합니다.

Pod 이름: readiness-pod

검사 방법: /ready 엔드포인트로 HTTP 요청

검사 주기: 5초마다

실패 기준: 2번 연속 실패 시 트래픽 차단

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Readiness Probe를 설정하여 애플리케이션이 준비되지 않은 경우 트래픽을 받지 않도록 합니다.

 

2. kubectl을 사용하여 Readiness Probe가 정상적으로 동작하는지 확인합니다.

 


✅ 정답 Manifest (Readiness Probe 설정)

apiVersion: v1
kind: Pod
metadata:
  name: readiness-pod
spec:
  containers:
  - name: app-container
    image: nginx
    readinessProbe:
      httpGet:
        path: /ready  # 준비 상태 확인을 위한 엔드포인트
        port: 80
      initialDelaySeconds: 10  # 컨테이너 시작 후 10초 후부터 검사 시작
      periodSeconds: 5  # 5초마다 검사 수행
      failureThreshold: 2  # 2번 실패하면 트래픽 차단

 

 


📌 적용 후 예상 결과 값

 

1. Readiness Probe가 정상적으로 동작하는지 확인

kubectl describe pod readiness-pod

 

💡 예상 출력 값 (준비되지 않은 상태에서는 트래픽을 받지 않음)

Events:
  Type     Reason     Age   From               Message
  ----     ------     ----  ----               -------
  Warning  Unhealthy  30s   kubelet            Readiness probe failed

 

 


3️⃣ Liveness & Readiness Probe를 함께 활용하여 안정적인 서비스 운영

 

❓ 문제 상황

 

운영팀에서 애플리케이션의 가용성을 높이기 위해 Liveness & Readiness Probe를 함께 적용해야 합니다.

Liveness Probe는 애플리케이션이 비정상 상태일 경우 자동 재시작

Readiness Probe는 애플리케이션이 완전히 기동된 후에만 트래픽을 받도록 설정

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Liveness & Readiness Probe를 모두 설정하여 애플리케이션을 안정적으로 운영합니다.

 

2. kubectl을 사용하여 정상적으로 동작하는지 확인합니다.

 


✅ 정답 Manifest (Liveness & Readiness Probe 동시 적용)

apiVersion: v1
kind: Pod
metadata:
  name: healthcheck-pod
spec:
  containers:
  - name: app-container
    image: nginx
    livenessProbe:
      httpGet:
        path: /healthz  # Liveness 체크
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 5
      failureThreshold: 3
    readinessProbe:
      httpGet:
        path: /ready  # Readiness 체크
        port: 80
      initialDelaySeconds: 10
      periodSeconds: 5
      failureThreshold: 2

 

 


📌 적용 후 예상 결과 값

 

1. Liveness & Readiness Probe가 정상적으로 동작하는지 확인

kubectl describe pod healthcheck-pod

 

💡 예상 출력 값

Events:
  Type     Reason     Age   From               Message
  ----     ------     ----  ----               -------
  Warning  Unhealthy  30s   kubelet            Readiness probe failed
  Warning  Unhealthy  1m    kubelet            Liveness probe failed
  Normal   Killing    1m    kubelet            Container app-container failed liveness probe, will be restarted
728x90