1 분 소요

livenessProbe

컨테이너가 정상적으로 동작하는지 체크하고 정상적으로 동작하지 않는다면 컨테이너를 재시작하여 문제를 해결합니다.

Pod가 계속 실행할 수 있음을 보장합니다.

  • Liveness probe 매개변수

    • preodSeconds : health check 몇초마다 반복할 것인지, Default : 10
    • initialDelaySeconds : Pod 실행 후 몇초 후에 health check 시작할 것인지, Default : 5
    • timeoutSeconds : health check 후 응답을 기다리는 시간(초), Default : 1
    • successThreshold : 몇 번 성공한 것을 성공으로 볼 것인가, Default : 1
    • failureThreshold : 몇 번 실패해야 실패로 간주하고 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

보통 livenessProbereadinessProbe를 같이 적용합니다. 상세한 설정은 애플리케이션 환경에 따라 적절하게 조정합니다.

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이 오류없이 생성된 것을 확인할 수 있습니다.

댓글남기기