쿠버네티스 프로브
쿠버네티스에서 프로브는 파드 내 컨테이너의 상태를 모니터링하기 위해 사용되는 매커니즘임.
프로브는 주기적으로 컨테이너의 상태를 확인함.
이를 통해 컨테이너가 정상적으로 작동 중인지, 재시작이 필요한지, 혹은 서비스에서 제외해야 하는지를 판단함.
Liveness Probe
1. 목적
컨테이너가 "살아 있는지" 확인함.
살아있지 않으면, 쿠버네티스는 해당 컨테이너를 재시작함.
2. 사용 시나리오
애플리케이션이 무한 루프에 빠지거나, 데드락 상태에 빠질 때.
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 5
Readiness Probe
1. 목적
컨테이너가 "트래픽을 받을 준비가 되었는지" 확인함.
준비되지 않으면 서비스에서 제외함.
2. 사용 시나리오
애플리케이션 초기화가 오래 걸리는 경우.
의존성이 준비될 때까지 트래픽을 받지 않도록 하기 위해.
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 3
Startup Probe
1. 목적
애플리케이션이 시작되었는지 확인함.
초기화에 시간이 오래 걸리는 애플리케이션에 적합하며, Liveness Probe보다 우선적으로 동작합니다.
2. 사용 시나리오
앱의 초기화 시간이 예측 불가능하거나 매우 긴 경우.
startupProbe:
httpGet:
path: /startup
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 30
프로브 설정 방법
프로브는 다음의 세 가지 방식으로 구현할 수 있음.
1. HTTP 요청
HTTP GET 요청을 보내고, 응답 상태 코드(200~399)가 성공임을 의미함.
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 10
2. TCP 소켓
특정 포트로 TCP 연결을 시도하여 연결이 성공하면 정상으로 판단함.
readinessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 5
periodSeconds: 10
3. Command 실행
특정 명령어를 실행하여 종료 코드가 0이면 성공으로 간주함.
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 3
periodSeconds: 10
프로브의 주요 설정 항목
1. initialDelaySeconds: 프로브를 시작하기 전에 대기하는 시간(초).
2. periodSeconds: 프로브를 실행하는 주기(초).
3. timeoutSeconds: 프로브가 응답을 기다리는 시간(초).
4. successThreshold: 성공으로 간주하기 위한 연속 성공 횟수.
5. failureThreshold: 실패로 간주하기 위한 연속 실패 횟수.
프로브의 동작 흐름
1. 프로브가 정의된 주기에 따라 컨테이너의 상태를 확인함.
2. Liveness Probe가 실패하면, 쿠버네티스는 컨테이너를 재시작함.
3. Readiness Probe가 실패하면, 해당 파드를 서비스의 엔드포인트에서 제외함.
4. Startup Probe가 활성화되어 있으면, 이 프로브가 성공할 때까지 다른 프로브는 실행되지 않음.
프로브 활용 사례
1. HTTP 기반 애플리케이션
/healthz 엔드포인트를 만들어 Liveness 및 Readiness를 확인.
애플리케이션 상태에 따라 200 또는 500 상태 코드 반환.
2. 데이터베이스 연결 확인
TCP 소켓 프로브를 사용하여 데이터베이스 연결 상태를 확인.
3. 복잡한 초기화 로직
Startup Probe로 초기화가 완료되었는지 확인 후, 정상 상태로 전환.
예시 YAML
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: my-app:latest
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 5
periodSeconds: 10
startupProbe:
exec:
command:
- cat
- /tmp/startup-complete
initialDelaySeconds: 10
periodSeconds: 5
프로브 정리
프로브는 애플리케이션의 상태를 모니터링함.
쿠버네티스가 장애 상황을 자동으로 감지하고 대응하도록 도와줌.
이를 통해 안정적인 서비스 운영이 가능해짐.
'Operating System > Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 인그레스 개념 (0) | 2024.12.26 |
---|---|
[Kubernetes] Nginx Dockerfile을 arm64로 ECR에 배포하는 방법 (0) | 2024.12.26 |
[Kubernetes] k8s, 파드란? (0) | 2024.12.26 |
[Kubernetes] k8s, 서비스 유형 종류 (0) | 2024.12.24 |
[Kubernetes] k8s, helm으로 redis 설치하는 방법 (0) | 2024.12.16 |