
쿠버네티스는 컨테이너가 정말 살아 있는지, 그리고 외부 요청을 받아도 되는 상태인지 자동으로 체크할 수 있는 기능을 제공한다.
핵심은 두 가지 프로브다.
컨테이너가 죽지는 않았지만 응답이 멈춘 상태가 될 수 있다.
예를 들어:
이런 상황을 Liveness Probe가 체크한다.
애플리케이션이 살아 있어도, 아직 요청을 받으면 안 되는 상태일 수 있다.
이때 Readiness Probe가 실패하면:
Liveness Probe와 달리, Readiness 실패는 재시작이 아니라 트래픽 차단에 초점이 있다.
| 항목 | Liveness Probe | Readiness Probe |
|---|---|---|
| 질문 | 컨테이너가 살아 있는가 | 트래픽을 받을 준비가 되었는가 |
| 실패 시 동작 | 컨테이너 재시작 | 서비스 엔드포인트에서 제외 |
| 용도 | 먹통이 된 프로세스 강제 복구 | 준비 안 된 Pod로 트래픽 들어가는 것 방지 |
| 서비스 영향 | 재시작 동안 잠깐 영향 있을 수 있음 | 트래픽 라우팅에만 영향 |
vue006dep.yml)아래 예시는 Vue 앱 컨테이너에 HTTP 기반 Liveness / Readiness Probe를 설정한 것이다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: vue006dep
spec:
replicas: 1
selector:
matchLabels:
app: vue006kube
template:
metadata:
labels:
app: vue006kube
spec:
containers:
- name: vue-container
image: limu810/k8s-vue-ing:latest
ports:
- containerPort: 80
# 살아 있는지 확인
livenessProbe:
httpGet:
path: /
port: 80 # 8080으로 바꾸면 실패 테스트 가능
initialDelaySeconds: 5 # 컨테이너 시작 후 5초 뒤부터 검사
periodSeconds: 5 # 5초마다 검사
failureThreshold: 1 # 1번만 실패해도 재시작
# 트래픽 받을 준비 됐는지 확인
readinessProbe:
httpGet:
path: /
port: 80 # 8080으로 바꾸면 실패 테스트 가능
initialDelaySeconds: 3 # 컨테이너 시작 후 3초 뒤부터 검사
periodSeconds: 5 # 5초마다 검사
failureThreshold: 1 # 1번 실패 시 Ready 상태 해제
주요 필드 의미:
httpGet.path: 프로브가 요청을 보낼 경로httpGet.port: 검사에 사용할 컨테이너 포트initialDelaySeconds: 컨테이너 시작 후 처음 체크까지 대기 시간periodSeconds: 체크 주기failureThreshold: 연속 실패 허용 횟수vue006ser.yml)apiVersion: v1
kind: Service
metadata:
name: vue006ser
spec:
type: ClusterIP
ports:
- port: 8000 # 서비스 포트
targetPort: 80 # 컨테이너 포트
selector:
app: vue006kube
서비스는 app: vue006kube 레이블을 가진 Pod를 찾아, 그중 Ready인 Pod로만 트래픽을 보낸다.
기존 리소스가 있다면 먼저 정리하고 진행하는 편이 깔끔하다.
# 필요 시 네임스페이스 내 리소스 정리
kubectl delete deployment vue006dep
kubectl delete service vue006ser
# Deployment, Service 생성
kubectl apply -f vue006dep.yml
kubectl apply -f vue006ser.yml
kubectl get pods
Running1/1kubectl get endpoints vue006ser
이제 livenessProbe와 readinessProbe의 port를 8080으로 바꾼 뒤, 실제로 어떻게 동작하는지 볼 수 있다.
livenessProbe:
httpGet:
path: /
port: 8080 # 존재하지 않는 포트로 실패 유도
readinessProbe:
httpGet:
path: /
port: 8080 # 마찬가지로 실패 유도
적용 후 다시 배포:
kubectl apply -f vue006dep.yml
kubectl apply -f vue006ser.yml
kubectl get pods -w
RESTARTS 컬럼 값이 계속 증가하는 모습 확인 가능kubectl describe pod <pod-name>
Events 섹션에 다음과 같은 로그가 나타난다.
kubectl get endpoints vue006ser
Liveness Probe
Readiness Probe
두 프로브를 적절히 설정하면:
헬스 체크는 쿠버네티스에서 거의 모든 프로덕션 워크로드에 필수로 들어가는 설정이니, HTTP 기반 프로브부터 익숙하게 다루는 게 좋다.