프로브(probe)란? 어떤 상태나 정보를 확인하기 위해 탐색하는 행위 또는 장치를 뜻한다. 마찬가지로, kubernetes에서 프로브는 컨테이너의 상태를 감시하여 컨테이너가 정상인지, 준비가 되었는지를 확인하는 검사 메커니즘을 의미한다.
kubernetes의 프로브 유형에는 ReadinessProbe과 LivenessProbe가 있으며, 두 프로브 간에 역할과 차이점은 다음과 같다.
ReadinessProbe: 서비스 요청을 받을 준비가 되었는지 검사
ReadinessProbe는 컨테이너가 서비스 요청을 받을 준비가 되었는지를 확인한다. 컨테이너가 준비되지 않은 상태에서 트래픽이 전달되면 오류가 발생할 수 있기 때문에, ReadinessProbe는 준비 완료 상태가 될 때까지 트래픽을 차단해 준다.
동작 흐름
- ReadinessProbe는 컨테이너가 정상적으로 트래픽을 처리할 준비가 되었는지 확인한다.
- 만약 준비 상태가 아닌 경우, Kubernetes는 해당 파드를 서비스 엔드포인트에서 제외하여 트래픽이 전달되지 않도록 한다.
- 준비 상태가 되면 파드를 다시 서비스에 포함시켜 트래픽을 받을 수 있도록 한다.
LivenessProbe: 컨테이너가 정상적으로 작동 중인지 검사
LivenessProbe는 컨테이너가 정상적으로 작동 중인지를 확인한다. 만약 컨테이너가 멈추가나 비정상적으로 작동하면 Kubernetes는 LivenessProbe를 통해 이를 감지하고 컨테이너를 재시작하여 문제를 해결한다.
동작 흐름
- LivenessProbe는 컨테이너가 정상적으로 동작 중인지 확인한다.
- 문제가 발생하여 컨테이너가 비정상 상태로 감지되면 Kubernetes는 해당 컨테이너를 재시작한다.
- LivenessProbe를 통해 비정상 컨테이너를 신속하게 복구하여 서비스 안정성을 유지한다.
ReadinessProbe와 LivenessProbe 설정 방식
HTTP 요청을 통한 검사
- 컨테이너가 HTTP 엔드포인트를 통해 정상 동작하는지 확인한다.
- HTTP 상태 코드가 200이면 정상으로 판단한다.
TCP 소켓을 통한 검사
- 특정 포트로의 TCP 연결여부로 상태를 확인한다.
- 연결이 성공하면 정상으로 간주하고, 실패하면 비정상으로 판단한다.
커맨드 실행을 통한 검사
- 컨테이너 내부에서 특정 명령어를 실행하여 그 결과로 상태를 확인
- 명령어가 정상 종료되면 상태를 정상으로, 실패하면 비정상으로 판단
ReadinessProbe 예시
apiVersion: v1
kind: Pod
metadata:
name: readiness-probe-example
spec:
containers:
- name: app-container
image: myapp:latest
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
- 위 예시에서 ReadinessProbe는 /health 엔드포인트에 HTTP 요청을 보내고, 응답이 정상(200)인지 확인한다. initialDelaySeconds는 프로브가 시작되기 전 대기 시간을, periodSeconds는 프로브 간격을 설정한다.
LivenessProbe 예시
apiVersion: v1
kind: Pod
metadata:
name: liveness-probe-example
spec:
containers:
- name: app-container
image: myapp:latest
livenessProbe:
exec:
command: ["sh", "-c", "pgrep myapp || exit 1"]
initialDelaySeconds: 5
periodSeconds: 10
- 위 LivenessProbe는 pgrep 명령어로 myapp 프로세스를 확인한다. 프로세스가 실행 중이지 않으면 exit 1로 실패 상태가 되며, kubernetes는 컨테이너를 재시작한다.
두 Probe 간 차이 비교
프로브 종류 | 설명 | 동작 방식 | 목적 |
ReadinessProbe | 컨테이너가 요청을 받을 준비가 되었는지 검사 | 요청 실패 시 트래픽을 차단하여 준비 상태가 될 때까지 대기 | 준비되지 않은 파드에 트래픽 차단 |
LivenessProbe | 컨테이너가 정상적으로 동작 중인지 검사 | 요청 실패 시 컨테이너를 재시작 | 비정상 컨테이너를 신속히 복구하여 서비스 안정성 유지 |
'DevOps > Kubernetes' 카테고리의 다른 글
쿠버네티스 - Pod 리소스 우선순위 관리 (QoS Classes) (0) | 2024.10.30 |
---|---|
쿠버네티스 - Controller(DaemonSet, Job, CronJob) (0) | 2024.10.29 |
쿠버네티스 - Controller(Deployment) (0) | 2024.10.29 |
쿠버네티스 - Controller(Replication Controller, ReplicaSet) (0) | 2024.10.29 |
쿠버네티스 - 환경변수 활용(ConfigMap, Secret) (0) | 2024.10.10 |