[k8s] 4-2. Liveness Probe
livenessProbe
컨테이너가 정상적으로 동작하는지 체크하고 정상적으로 동작하지 않는다면 컨테이너를 재시작하여 문제를 해결합니다.
Pod가 계속 실행할 수 있음을 보장합니다.
-
Liveness probe 매개변수
preodSeconds
: health check 몇초마다 반복할 것인지, Default : 10initialDelaySeconds
: Pod 실행 후 몇초 후에 health check 시작할 것인지, Default : 5timeoutSeconds
: health check 후 응답을 기다리는 시간(초), Default : 1successThreshold
: 몇 번 성공한 것을 성공으로 볼 것인가, Default : 1failureThreshold
: 몇 번 실패해야 실패로 간주하고 restart 할 것인가, Default :1
Liveness probe가 포함된 yaml파일 예시
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-liveness
spec:
containers:
- image: nginx:1.14
name: nginx-container
ports:
- containerPort: 80
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 80
$ kubectl describe pods
# 해당 yaml을 이용해 pod를 생성 후 확인해보면 liveness 정보를 볼 수 있다.
.
.
.
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Mon, 09 Aug 2021 21:22:25 +0900
Ready: True
Restart Count: 0
Liveness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3
.
.
.
잘못된 path(/not/exist)와 port(8080)를 입력하였을 경우
apiVersion: v1
kind: Pod
metadata:
name: echo-lp
labels:
app: echo
spec:
containers:
- name: app
image: ghcr.io/subicura/echo:v1
livenessProbe: # <<< livenessProbe 설정
httpGet:
path: /not/exist
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 2 # Default 1
periodSeconds: 5 # Defaults 10
failureThreshold: 1 # Defaults 3
잘못된 path(/not/exist)와 port(8080)를 입력하였을 경우
상태 확인
NAME READY STATUS RESTARTS AGE
echo-lp 0/1 CrashLoopBackOff 3 65s
정상적으로 응답하지 않았기 때문에 Pod이 여러 번 재시작되고 CrashLoopBackOff
상태로 변경되었습니다.
readinessProbe
컨테이너가 준비되었는지 체크하고 정상적으로 준비되지 않았다면 Pod으로 들어오는 요청을 제외합니다.
livenessProbe와 차이점은 문제가 있어도 Pod을 재시작하지 않고 요청만 제외한다는 점입니다.
잘못된 path(/not/exist)와 port(8080)를 입력하였을 경우
apiVersion: v1
kind: Pod
metadata:
name: echo-rp
labels:
app: echo
spec:
containers:
- name: app
image: ghcr.io/subicura/echo:v1
readinessProbe: # <<< readinessProbe 설정
httpGet:
path: /
port: 80
initialDelaySeconds: 5
timeoutSeconds: 2 # Default 1
periodSeconds: 5 # Defaults 10
failureThreshold: 1 # Defaults 3
상태 확인
NAME READY STATUS RESTARTS AGE
echo-rp 0/1 Running 0 14s
READY상태가 0/1
인 것을 확인할 수 있습니다.
livenessProbe + readinessProbe
보통 livenessProbe
와 readinessProbe
를 같이 적용합니다. 상세한 설정은 애플리케이션 환경에 따라 적절하게 조정합니다.
apiVersion: v1
kind: Pod
metadata:
name: echo-health
labels:
app: echo
spec:
containers:
- name: app
image: ghcr.io/subicura/echo:v1
livenessProbe:
httpGet:
path: /
port: 3000
readinessProbe:
httpGet:
path: /
port: 3000
3000
번 포트와 /
경로는 정상적이기 때문에 Pod이 오류없이 생성된 것을 확인할 수 있습니다.
댓글남기기