kubernetes

probe

짱구는굿 2023. 10. 27. 12:20

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ (참고 사이트)

 

Configure Liveness, Readiness and Startup Probes

This page shows how to configure liveness, readiness and startup probes for containers. The kubelet uses liveness probes to know when to restart a container. For example, liveness probes could catch a deadlock, where an application is running, but unable t

kubernetes.io

 



 kubectl describe pod liveness-exec

출력 하단에는 활성 프로브가 실패했으며 실패한 컨테이너가 종료되고 다시 생성되었음을 나타내는 메시지가 있습니다.


출력에는 RESTARTS증가된 것으로 표시됩니다. RESTARTS실패한 컨테이너가 다시 실행 상태로 돌아가자마자 카운터가 증가합니다 .
구성 파일에서 Pod에 단일 Container.  periodSeconds필드는 kubelet이 5초마다 활성 프로브를 수행해야 함을 지정합니다.  initialDelaySeconds필드는 첫 번째 프로브를 수행하기 전에 5초를 기다려야 한다고 kubelet에 알려줍니다. 프로브를 수행하기 위해 kubelet은 cat /tmp/healthy대상 컨테이너에서 명령을 실행합니다. 명령이 성공하면 0을 반환하고 kubelet은 컨테이너가 살아 있고 건강한 것으로 간주합니다. 명령이 0이 아닌 값을 반환하면 kubelet은 컨테이너를 종료하고 다시 시작합니다.


 kubectl describe pod liveness-http



kubectl get pod -o wide
구성 파일에서 Pod에 단일 컨테이너가 있음을 확인할 수 있습니다.  periodSeconds필드는 kubelet이 3초마다 활성 프로브를 수행해야 함을 지정합니다.  initialDelaySeconds필드는 첫 번째 프로브를 수행하기 전에 3초를 기다려야 한다고 kubelet에 알려줍니다. 프로브를 수행하기 위해 kubelet은 컨테이너에서 실행 중이고 포트 8080에서 수신 대기 중인 서버에 HTTP GET 요청을 보냅니다. 서버 경로에 대한 핸들러가 /healthz성공 코드를 반환하면 kubelet은 컨테이너가 살아 있고 건강한 것으로 간주합니다. 핸들러가 실패 코드를 반환하면 kubelet은 컨테이너를 종료하고 다시 시작합니다.
kubectl apply -f https://k8s.io/examples/pods/probe/tcp-liveness-readiness.yaml

 kubectl get pod -o wide
apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: registry.k8s.io/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 10
보시다시피 TCP 확인 구성은 HTTP 확인과 매우 유사합니다. 이 예에서는 준비 상태 및 활성 상태 프로브를 모두 사용합니다. kubelet은 컨테이너가 시작된 지 15초 후에 첫 번째 준비 프로브를 보냅니다. 그러면 포트 8080에서 컨테이너에 연결이 시도됩니다 goproxy. 프로브가 성공하면 포드가 준비된 것으로 표시됩니다. kubelet은 10초마다 이 확인을 계속 실행합니다.
이 구성에는 준비 프로브 외에도 활성 프로브가 포함됩니다. kubelet은 컨테이너가 시작된 후 15초 후에 첫 번째 활성 프로브를 실행합니다. 준비 프로브와 유사하게 이는 포트 8080에서 컨테이너에 연결을 시도합니다 goproxy. 활성 프로브가 실패하면 컨테이너가 다시 시작됩니다.