kubernetes
probe
짱구는굿
2023. 10. 27. 12:20
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. 활성 프로브가 실패하면 컨테이너가 다시 시작됩니다. |