본문 바로가기
Containers/Kubernetes

4.1. Liveness Probe

by shinebee* 2020. 7. 24.

1. liveness probe 소개

  • 라이브니스 프로브는 pod에 의해 컨테이너를 동작시키고, 동작하고 있는 컨테이너가 잘 동작하는지 주기적으로 모니터링한다.
  • 만약 모니터링 도중 파드의 오류가 발생하면 해당 컨테이너를 재시작한다.
    • 재시작을 했는데도 안된다  ->  pod fail
  • .spec.containers에서 지정.
  • 컨테이너마다 지정
  • 라이브니스 프로브는 세 가지 메커니즘을 가지고 컨테이너의 상태를 모니터링한다.
    • HTTP GET probe
      • 특정 경로에 HTTP GET 요청
      • HTTP 응답 코드가 2XX 또는 3XX인지 확인함
    • TCP socket probe
      • 특정 TCP 포트 연결을 시도함
    • Exec probe
      • 컨테이너 내부의 바이너리(명령)를 실행하고 종료 코드 확인

 

 

2. liveness probe 생성

...
spec:
  containers:
  - livenessProbe:
    httpGet:
      ...
    
    tcpSocket:
      ...
      
    exec:
      ...
      
...
  • .spec.containers.livenessProbe : 라이브니스 프로브 정의
  • .spec.containers.livenessProbe.httpGet : HTTP GET 프로브 정의
  • .spec.containers.livenessProbe.tcpSocket : TCP 소켓 프로브 정의
  • .spec.containers.livenessProbe.exec : Exec 프로브 정의

 

1) livnessProbe 생성 - 정상

  • livenessProbe를 정의한 파드 오브젝트
# mynapp-pod-ln.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mynapp-pod-ln
spec:
  containers:
  - image: httpd
    name: mynapp
    ports:
    - containerPort: 80
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /
        port: 80
  • HTTP GET probe를 사용
  • 경로는 /
  • 포트는 80

 

  • pod object 생성
kubectl create -f mynapp-pod-ln.yaml

 

  • pod 상태를 주기적으로 확인
kubectl get pods --watch

 

2) livenessProbe 생성 - 비정상

# mynapp-pod-ln-404.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mynapp-pod-ln-404
spec:
  containers:
  - image: httpd
    name: mynapp
    ports:
    - containerPort: 81
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /
        port: 82
  • 의도적으로 오류가 나도록 구성
  • 실제 컨테이너는 80 포트를 사용하고 있고, 쿠버네티스 시스템에서는 접속을 81로 하도록 정의함
  • 라이브니스 포트는 81 포트를 확인하도록 했다.

 

  • pod object 생성
kubectl create -f mynapp-pod-ln-404.yaml

 

3) liveness 상태 확인

  • RESTART(재시작) : 라이브니스 프로브에 의해 건강한 상태가 아님을 감지하고 재시작을 시도.
  • CrashLoopBackOff : 컨테이너가 다시 시작 후 반복적으로 비정상 종료됨.

 

  • 초기 지연 시간을 설정
...
  livenessProbe:
    httpGet:
      path: /
      port: 80
  initialDelaySeconds: 30
  
...

 

  • 파드의 상태 확인
kubectl describe pod mynapp-pod-ln-404 

  • Events 필드로 파드(컨테이너)의 상태를 시간대 별로 확인할 수 있다.

 

  • 불필요한 파드 삭제
kubectl delete pods --all
  • --all 옵션은 모든 리소스를 대상으로 한다.

 

라이브니스 프로브는 현재 동작중인 파드의 크래시나 애플리케이션 장애를 감지해 재시작해준다. 그러나 여러 이유에 의해 파드가 삭제되거나 노드에 장애가 발생한 경우 파드를 재시작해주지는 않는다.

※ 파드의 삭제나 노드의 장애에 대비해 가용성을 높이기 위해서는 레플리케이션 컨트롤러, 레플리카셋, 데몬 셋 등 컨트롤러를 사용해야 한다.

'Containers > Kubernetes' 카테고리의 다른 글

4.3. ReplicaSet  (0) 2020.07.28
4.2. Replication Controller  (0) 2020.07.24
3.4. namespace  (0) 2020.07.24
3.2. Label 및 Selector  (0) 2020.07.23
Pod  (0) 2020.07.23

댓글