Kubernetes에서 애플리케이션 안정성과 트래픽 관리를 위해 Probe는 필수 기능입니다. 왜냐하면 Probe는 컨테이너의 상태를 주기적으로 점검하여, 정상 동작 여부와 트래픽 수신 가능 여부를 판단하는 매커니즘이기 때문이죠. 이를 통해 Pod가 트래픽을 받을 준비가 되었는지, 지금 Pod의 상태가 정상적인지, Kubernetes가 컨테이너 상태를 자동으로 감시하고, 필요 시 조치를 취할 수 있게 도와주죠.
Probe에는 Liveness Probe와 Readiness Probe 이렇게 두 가지 종류가 있는데요, Liveness Probe와 Readiness Probe는 비슷해 보이지만, 목적과 동작 방식이 완전히 다릅니다.
이번 포스팅은 이들의 차이점과, 왜 두 개의 probe 가 꼭 필요한지 정리했습니다. 😁
1️⃣ Liveness Probe
목적: 컨테이너가 “정상적으로 살아 있는지” 확인
- 컨테이너가 데드락, 무한 루프, 내부 크래시 등으로 정상 동작하지 않을 때 탐지
- 실패하면 Kubernetes가 컨테이너를 재시작하여 복구
사용 예시:
- 무한 루프에 빠진 애플리케이션
- 데드락 걸린 서버 프로세스
- 장시간 응답하지 않는 서비스
YAML 예시:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
2️⃣ Readiness Probe
목적: 컨테이너가 트래픽을 받을 준비가 되었는지 확인
- 컨테이너가 아직 초기화 중이거나 의존 서비스 연결 중일 때 탐지
- 실패하면 Pod를 Service에서 제외 → 트래픽 전달 차단
- 컨테이너 자체는 재시작하지 않음 → 시간이 지나면 자동 복구 가능
사용 예시:
- 초기 DB 연결 완료 전
- 캐시 로딩 중
- 애플리케이션 초기화 작업 수행 중
YAML 예시:
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
3️⃣ 핵심 차이점 정리
항목 | Liveness Probe | Readiness Probe |
---|---|---|
목적 | 컨테이너 “살아 있는지” 확인 | 트래픽 수신 가능 여부 확인 |
실패 시 동작 | 컨테이너 재시작 | Service에서 Pod 제거 (재시작 X) |
사용 시기 | 복구가 필요한 심각한 오류 감지 | 초기화/일시적 준비 중 상태 감지 |
트래픽 영향 | 없음 | 있음 (트래픽 차단) |
결국 아래와 같이 간단하고 단순하게 정리할 수 있습니다.
💡 핵심 포인트
- Liveness Probe → 재시작 없이는 복구가 안 되는 심각 문제 감지
- Readiness Probe → 재시작 없이 시간이 지나면 복구 가능한 일시적 상태 감지
두 probe 가 필요한 이유
두 Probe를 적절히 조합하면 애플리케이션 안정성 + 트래픽 관리를 동시에 달성할 수 있다고 합니다. 하지만 잠깐 생각해보면 Livness Probe만 있어도 혹은 Readiness Probe 만 있어도 파드가 정상적으로 서비스를 받을 수 없다는 것을 감지할 수 있는데요, 왜 2개의 probe를 사용해야 할까요?
이는 조금만 더 생각을 해 보면 알 수 있는데요. 아래에 정리해봤습니다.
1️⃣ Readiness Probe만 있을 경우
- 역할: 트래픽 수신 가능 여부 확인
- 문제 상황:
- 컨테이너가 무한 루프, 데드락 같은 심각한 문제 (재시작해야 정상으로 돌아갈 수 있는 문제) 로 멈추면
- Readiness Probe는 컨테이너를 재시작하지 않고 트래픽 차단만 하기 때문에, 컨테이너 자체는 살아 있다고 판단 → 복구 안됨
- 결과: Pod가 영원히 비정상 상태로 남게 됩니다.
2️⃣ Liveness Probe만 있을 경우
- 역할: 컨테이너 생존 여부 확인 → 필요 시 재시작
- 문제 상황:
- 컨테이너가 초기화 중이거나 DB 연결 대기 등으로 잠시 트래픽을 못 받을 때
- Liveness Probe만 있으면 재시작 시도하게 되는데, 사실은 시간이 지나면 자동 복구 가능한 상태인 것이죠...
- 결과: 불필요한 재시작으로 리소스 낭비하고 트래픽 불안정하게 만들게 될 것입니다.
✅ 결론적으로!
- Readiness Probe → “잠시 준비 안 된 상태” 관리, 트래픽 차단하는 역할이고
- Liveness Probe → “복구가 필요한 심각 문제” 관리, 재시작을 하는 역할이므로
- 두 Probe를 같이 쓰면:
- 컨테이너가 준비 안 됐을 때는 기다리게 하고
- 컨테이너가 완전히 멈췄을 때는 재시작함으로써 안정성과 효율성을 동시에 달성할 수 있게 되는 것이죠~!!
'DevOps' 카테고리의 다른 글
Kubernetes - 서비스 port 와 ingress (2) | 2025.08.17 |
---|---|
Kubernetes - Cluster 란? (node와 pod와의 관계) (2) | 2025.08.17 |
Kubernetes 란? (1) | 2024.09.30 |