반응형
Kubernetes의 Probe는 Pod 내 컨테이너의 상태를 주기적으로 확인하는 메커니즘으로, 컨테이너의 상태를 기반으로 서비스가 정상적으로 동작하는지 진단합니다. Probe는 컨테이너의 진단 시점을 결정하고, 서비스 관리에 중요한 역할을 합니다.
Probe의 유형과 서비스 진단 시점
- Liveness Probe (활성 상태 진단)
- 목적: 컨테이너가 여전히 실행 중인지 확인.
- 진단 시점:
- 컨테이너가 내부적으로 멈췄거나 무한 루프에 빠졌을 경우, 이를 감지하여 컨테이너를 재시작.
- 사용 시나리오:
- 컨테이너가 종료되지 않았지만, 요청을 처리하지 못하는 상태일 때.
- 예: Deadlock, 응답이 없는 상태.
- 결과 동작:
- 실패 시: Kubernetes가 컨테이너를 강제로 재시작.
- 설정 예제:
livenessProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 3periodSeconds: 5
- Readiness Probe (준비 상태 진단)
- 목적: 컨테이너가 요청을 처리할 준비가 되었는지 확인.
- 진단 시점:
- 컨테이너가 시작되었지만, 애플리케이션이 아직 초기화되지 않은 경우.
- 또는 서비스가 일시적으로 준비되지 않은 상태일 때.
- 사용 시나리오:
- 서비스가 정상적으로 요청을 처리할 준비가 될 때까지 트래픽이 전달되지 않도록 설정.
- 결과 동작:
- 실패 시: Pod가 Service에서 제거되고 트래픽이 전달되지 않음.
- 설정 예제:
readinessProbe:httpGet:path: /readyport: 8080initialDelaySeconds: 5periodSeconds: 10
- Startup Probe (시작 상태 진단)
- 목적: 컨테이너가 애플리케이션을 시작하는 데 시간이 오래 걸릴 경우 확인.
- 진단 시점:
- 애플리케이션 초기화 과정에서 느린 시작을 감지하여 Liveness Probe의 오작동 방지.
- 사용 시나리오:
- 초기화가 오래 걸리는 애플리케이션.
- 초기화 완료 전 Liveness Probe에 의해 컨테이너가 재시작되는 문제 방지.
- 결과 동작:
- 실패 시: Kubernetes가 컨테이너를 재시작.
- 성공 시: Liveness Probe로 전환.
- 설정 예제:
startupProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 10periodSeconds: 5failureThreshold: 30
Probe의 동작 흐름
- Startup Probe
- Pod가 초기화되는 동안만 활성화.
- 성공하면 비활성화되고, Liveness Probe가 활성화.
- Liveness Probe
- 주기적으로 컨테이너 상태 확인.
- 실패 시, 컨테이너 재시작.
- Readiness Probe
- Pod가 Service에 연결될 준비가 되었는지 확인.
- 실패 시, 트래픽이 해당 Pod로 전달되지 않음.
Probe의 진단 주기 및 설정
- initialDelaySeconds: Probe 실행을 시작하기 전 대기 시간.
- periodSeconds: Probe 실행 주기.
- timeoutSeconds: Probe 요청의 타임아웃 시간.
- successThreshold: 성공으로 간주하기 위한 연속 성공 횟수.
- failureThreshold: 실패로 간주하기 위한 연속 실패 횟수.
Probe와 Service의 진단 시점 연계
- Readiness Probe 실패 시:
- Service는 Pod를 Endpoints에서 제거.
- 외부 트래픽은 Pod로 전달되지 않음.
- Liveness Probe 실패 시:
- Kubernetes가 Pod을 재시작하여 서비스 복구 시도.
- Startup Probe 실패 시:
- Pod을 초기화 실패로 간주하고 재시작.
예제: 모든 Probe를 사용하는 경우
apiVersion: v1
kind: Pod
metadata:
name: probe-example
spec:
containers:
- name: nginx
image: nginx
startupProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 10
periodSeconds: 5
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 20
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 80
initialDelaySeconds: 5
periodSeconds: 10
이 설정은 애플리케이션의 초기화, 실행 상태, 준비 상태를 각각 관리하여 서비스의 안정성을 높입니다.
반응형
'K8S' 카테고리의 다른 글
kube-proxy와 cni의 비교 (0) | 2024.12.21 |
---|---|
[kubernetes] IPVS에 대해 알아보자! (0) | 2024.12.21 |
Kubernetes의 Node Scheduling (0) | 2024.12.19 |
Kubernetes의 플랫 네트워크 (0) | 2024.12.16 |
pause container가 먼저 실행되는 이유가 뭘까나? (0) | 2024.12.16 |
댓글