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