쿠버네티스에서 애플리케이션의 상태를 감지하고 장애 발생 시 자동 복구하는 방법은 필수적입니다.
이번 글에서는 Liveness Probe와 Readiness Probe를 활용하여 Pod의 상태를 감지하고, 장애 발생 시 대응하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1️⃣ Liveness Probe를 이용한 Pod 자동 복구
2️⃣ Readiness Probe를 활용한 트래픽 제어
각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.
1️⃣ Liveness Probe를 이용한 Pod 자동 복구
❓ 문제 상황
운영 중인 애플리케이션이 특정 상황에서 응답이 멈추거나, 장애가 발생하면 자동으로 복구되어야 합니다.
쿠버네티스에서 Liveness Probe를 설정하면, Pod이 정상적으로 동작하는지 감지하고 비정상적인 경우 자동으로 재시작할 수 있습니다.
• Deployment의 이름은 web-liveness이어야 합니다.
• Liveness Probe를 적용하여 Pod이 장애 상태일 경우 자동 재시작해야 합니다.
• /healthz 엔드포인트를 이용하여 애플리케이션이 정상 작동하는지 감지해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Liveness Probe를 설정하여 애플리케이션의 상태를 감지해야 합니다.
• HTTP 요청을 특정 엔드포인트(/healthz)로 보냄
• 일정 시간 동안 응답이 없으면 Pod을 자동으로 재시작
2. 초기 시작 후 일정 시간이 지나야 Probe가 동작하도록 설정해야 합니다.
• initialDelaySeconds를 설정하여 애플리케이션이 완전히 기동될 시간을 확보
✅ 정답 Manifest (Liveness Probe 적용된 Deployment)
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-liveness # Deployment의 이름
spec:
replicas: 2 # 기본 실행 Pod 개수
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:latest # 웹 애플리케이션 컨테이너
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /healthz # /healthz 엔드포인트로 상태 확인
port: 80
initialDelaySeconds: 5 # 시작 후 5초 후부터 체크
periodSeconds: 10 # 10초마다 체크
📌 적용 후 예상 결과 값
1. Deployment 생성 확인
kubectl get deployments
💡 예상 출력 값
NAME READY UP-TO-DATE AVAILABLE AGE
web-liveness 2/2 2 2 5s
2. Liveness Probe 실패 시 Pod 자동 재시작 확인
kubectl describe pod web-liveness-xxxxx | grep -A 5 "Liveness probe failed"
💡 예상 출력 값
Liveness probe failed:
Pod will be restarted...
2️⃣ Readiness Probe를 활용한 트래픽 제어
❓ 문제 상황
운영팀에서 애플리케이션이 특정 상태에서만 트래픽을 받을 수 있도록 설정하고 싶어 합니다.
애플리케이션이 완전히 기동되지 않았거나, 외부 서비스와의 연결이 실패한 경우, 트래픽을 받지 않도록 설정해야 합니다.
• Deployment의 이름은 web-readiness이어야 합니다.
• Readiness Probe를 적용하여 애플리케이션이 준비되지 않으면 트래픽을 받지 않도록 설정해야 합니다.
• /ready 엔드포인트를 이용하여 애플리케이션의 준비 상태를 감지해야 합니다.
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. Readiness Probe를 설정하여 애플리케이션이 정상적으로 준비되었을 때만 트래픽을 받을 수 있도록 설정해야 합니다.
• HTTP 요청을 특정 엔드포인트(/ready)로 보냄
• 응답이 없으면 트래픽을 받지 않음
2. Liveness Probe와 Readiness Probe를 동시에 사용할 수 있습니다.
• Liveness Probe는 애플리케이션이 정상적으로 동작하는지 감지하고, 이상 발생 시 재시작
• Readiness Probe는 애플리케이션이 준비되지 않으면 트래픽을 받지 않도록 설정
✅ 정답 Manifest (Readiness Probe 적용된 Deployment)
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-readiness # Deployment의 이름
spec:
replicas: 2 # 기본 실행 Pod 개수
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:latest # 웹 애플리케이션 컨테이너
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /ready # /ready 엔드포인트로 서비스 준비 상태 확인
port: 80
initialDelaySeconds: 5 # 시작 후 5초 후부터 체크
periodSeconds: 5 # 5초마다 체크
📌 적용 후 예상 결과 값
1. Deployment 생성 확인
kubectl get deployments
💡 예상 출력 값
NAME READY UP-TO-DATE AVAILABLE AGE
web-readiness 2/2 2 2 5s
2. Readiness Probe로 인해 준비되지 않은 Pod이 트래픽을 받지 않는지 확인
kubectl get pods -o wide
💡 예상 출력 값
NAME READY STATUS RESTARTS AGE
web-readiness-1234 0/1 Running 0 5s # 아직 준비되지 않음
web-readiness-5678 1/1 Running 0 10s