Kubernetes 환경에서 Application을 안정적으로 운영하기 위해서는 Container가 정상적으로 실행되고 있는지 지속적으로 확인해야 합니다.
Container가 실행 중이라고 해서 항상 정상적인 상태는 아닙니다.
예를 들어 Application Process는 실행되고 있지만 내부 오류로 요청을 처리하지 못하는 상황이 발생할 수 있습니다.
Kubernetes에서는 이러한 문제를 해결하기 위해 Health Check 기능을 제공합니다.
Health Check는 Probe를 이용하여 Container 상태를 확인하고 문제가 발생하면 자동으로 복구하거나 Traffic 전달을 조절하는 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| Liveness Probe | Container 정상 실행 여부 확인 |
| Readiness Probe | Traffic 처리 가능 상태 확인 |
| Startup Probe | Application 초기 실행 확인 |
| Kubelet | Health Check 수행 |
Health Check를 활용하면 Kubernetes 환경에서 서비스 가용성을 높이고 장애 대응을 자동화할 수 있습니다.
Kubernetes Health Check란 무엇인가?
Kubernetes Health Check는 Container의 현재 상태를 확인하는 기능입니다.
Kubelet은 정해진 주기에 따라 Probe를 실행하고 결과에 따라 필요한 작업을 수행합니다.
예:
Application 상태:
Process 실행 중
하지만
Database 연결 오류 발생
결과:
Container 실행 상태 확인
↓
Liveness Probe 실패
↓
Container 재시작
이처럼 Kubernetes는 단순히 Process 실행 여부가 아니라 Application 상태를 관리합니다.
Kubernetes Probe란?
Probe는 Kubernetes가 Container 상태를 확인하기 위해 사용하는 검사 방식입니다.
Kubelet이 Container에 특정 요청을 보내고 결과를 판단합니다.
Probe 종류:
| Probe | 목적 |
|---|---|
| Liveness Probe | 살아있는지 확인 |
| Readiness Probe | 요청 처리 가능 여부 확인 |
| Startup Probe | 초기 실행 완료 확인 |
각 Probe는 서로 다른 목적을 가지고 있습니다.
Kubernetes Liveness Probe란?
Liveness Probe는 Container가 정상적으로 동작하고 있는지 확인하는 기능입니다.
실패하면 Kubernetes는 해당 Container를 재시작합니다.
예:
Application Deadlock 발생
↓
Liveness Probe 실패
↓
Kubelet Container 재시작
주요 활용:
| 상황 | 처리 |
|---|---|
| Process 멈춤 | 재시작 |
| 응답 없음 | 복구 |
| Deadlock 발생 | Container 교체 |
Liveness Probe는 자동 복구 기능의 핵심입니다.
Kubernetes Readiness Probe란?
Readiness Probe는 Container가 Traffic을 받을 준비가 되었는지 확인합니다.
실행 중이지만 요청 처리가 불가능한 상태라면 Service Endpoint에서 제외합니다.
예:
Application 시작 중
↓
Readiness Probe 실패
↓
Traffic 전달 중단
정상화:
Application 준비 완료
↓
Endpoint 추가
↓
Traffic 전달 시작
서비스 중단을 줄이는 중요한 기능입니다.
Kubernetes Startup Probe란?
Startup Probe는 Application 초기 실행 시간이 긴 경우 사용하는 Health Check입니다.
초기 실행이 오래 걸리는 Application에서 Liveness Probe가 너무 빠르게 실패하는 문제를 방지합니다.
예:
대규모 Java Application
실행 시간:
120초
Startup Probe 적용:
초기 실행 완료까지 대기
이후:
Liveness Probe 시작
초기화 과정이 긴 Application에서 유용합니다.
Kubernetes Probe 동작 방식
Kubernetes Probe는 다양한 검사 방식을 제공합니다.
| 방식 | 설명 |
|---|---|
| HTTP GET | HTTP 응답 확인 |
| TCP Socket | Port 연결 확인 |
| Exec Command | 명령 실행 결과 확인 |
예:
HTTP Health Endpoint 확인:
/health
응답:
200 OK
정상 상태 판단
Kubernetes HTTP Probe 구조
HTTP Probe는 Application의 특정 URL을 호출하여 상태를 확인합니다.
구조:
Kubelet
↓
HTTP Request
↓
Application Health Endpoint
결과:
| 응답 | 상태 |
|---|---|
| 200~399 | 정상 |
| 실패 응답 | 비정상 |
Web Application에서 가장 많이 사용하는 방식입니다.
Kubernetes TCP Probe 구조
TCP Probe는 특정 Port가 열려 있는지 확인합니다.
예:
Database Port 확인
3306 Port 연결 가능
↓
정상
장점:
| 장점 | 설명 |
|---|---|
| 간단함 | 설정 쉬움 |
| Application 수정 불필요 | 별도 Endpoint 필요 없음 |
Network 기반 확인이 필요한 경우 사용합니다.
Kubernetes Exec Probe 구조
Exec Probe는 Container 내부에서 명령어를 실행하여 상태를 확인합니다.
예:
명령 실행:
check-status.sh
결과:
Exit Code 0
↓
정상
특수한 Application Health Check에 활용됩니다.
Kubernetes Probe 주요 설정
Probe는 다양한 옵션을 제공합니다.
| 설정 | 설명 |
|---|---|
| initialDelaySeconds | 첫 검사 대기 시간 |
| periodSeconds | 검사 주기 |
| timeoutSeconds | 응답 대기 시간 |
| failureThreshold | 실패 기준 횟수 |
| successThreshold | 성공 기준 횟수 |
적절한 설정이 중요합니다.
Kubernetes Liveness와 Readiness 차이
두 Probe는 목적이 다릅니다.
| 구분 | Liveness | Readiness |
|---|---|---|
| 목적 | Container 복구 | Traffic 제어 |
| 실패 시 | 재시작 | Traffic 제거 |
| 확인 대상 | 실행 상태 | 서비스 가능 상태 |
| 영향 | Container | Service 연결 |
두 기능을 함께 사용하는 것이 일반적입니다.
Kubernetes Health Check 활용 사례
| Application | 사용 Probe |
|---|---|
| Web Server | HTTP Probe |
| Database | TCP Probe |
| Batch Application | Exec Probe |
| 초기 실행 긴 서비스 | Startup Probe |
Application 특성에 맞는 Probe 설정이 필요합니다.
Kubernetes Health Check 운영 시 고려사항
잘못된 Health Check 설정은 오히려 서비스 장애를 발생시킬 수 있습니다.
| 항목 | 설명 |
|---|---|
| 검사 주기 | 너무 짧지 않게 설정 |
| Timeout | 응답 시간 고려 |
| 초기 지연 | Application 시작 시간 반영 |
| Endpoint 설계 | 정확한 상태 확인 |
Production 환경에서는 테스트 후 적용하는 것이 중요합니다.
Kubernetes Health Check 장점
| 장점 | 설명 |
|---|---|
| 자동 복구 | 문제 Container 재시작 |
| 서비스 안정성 | 비정상 Traffic 차단 |
| 장애 감소 | 빠른 대응 가능 |
| 운영 자동화 | 수동 확인 감소 |
Health Check는 Kubernetes 운영 안정성을 높이는 핵심 기능입니다.
자주 묻는 질문
Liveness와 Readiness Probe 차이는 무엇인가요?
Liveness는 Container가 정상 실행 중인지 확인하고 Readiness는 Traffic을 받을 준비가 되었는지 확인합니다.
Probe 실패하면 Container가 바로 종료되나요?
Liveness Probe 실패 시 설정된 조건에 따라 Container가 재시작됩니다.
모든 Application에 Health Check가 필요한가요?
Production 환경에서는 안정적인 운영을 위해 대부분 적용하는 것이 좋습니다.
마무리
Kubernetes Health Check는 Container 상태를 확인하고 Application 안정성을 유지하는 핵심 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| Liveness Probe | Container 자동 복구 |
| Readiness Probe | Traffic 제어 |
| Startup Probe | 초기 실행 보호 |
| Kubelet | Probe 실행 관리 |
Health Check를 적절하게 구성하면 Kubernetes 환경에서 Application 장애를 빠르게 감지하고 안정적인 서비스를 운영할 수 있습니다.
다음 글에서는 Kubernetes 작업 자동화와 Batch 처리를 위한 Kubernetes Job과 CronJob 심화 가이드! 예약 실행과 작업 관리 구조 이해하기를 알아보겠습니다.