https://kubernetes.io/docs/concepts/configuration/liveness-readiness-startup-probes/
Liveness Probe는 컨테이너가 언제 재시작해야 할지 결정한다. 왜 결정하는가? Liveness Probe는 컨테이너 내의 장애(예컨데 어플리케이션이 데드락에 빠졌다거나..)를 감지하는게 목적이기 때문이다. 어떻게 감지하는가? http요청 등으로 컨테이너 내부의 어플리케이션을 감지한다.
실제로 컨테이너를 재시작하는건 kubelet이다. kubelet은 특정 컨테이너의 어플리케이션이 계속 Liveness Probe에 응답하지 않으면 컨테이너를 재시작해버린다.
참고로 Liveness probes는 readiness probe를 기다리지 않는다. 만약 기다리게 하고 싶으면 startup probe를 사용하거나 initialDelaySeconds
를 사용하면 된다.
Readiness probe는 컨테이너가 트래픽을 받을 준비가 되었는지를 결정한다. 컨테이너 초기화시 시간이 드는 초기 작업등이 완료되었는지 확인하는데 유용하다. 예를들면 커넥션을 생성하고, 파일을 로딩하고, 캐시를 웜업하는 등...
만약 Readiness probe가 실패를 반환하면 k8s는 모든 서비스의 엔드포인트에서 해당 파드에 대한 내용을 제거해버린다.
Readiness probe는 컨테이너의 모든 라이프사이클에서 동작한다.
startup probe는 컨테이너 내부의 애플리케이션이 시작했는지를 검증한다. slow starting 컨테이너들에 대해 liveness 체크를 적용할 시기를 지정해, kubelet이 시작도 하기전에 해당 컨테이너들을 죽이는 실수를 하지 않도록 한다.
startup probe가 설정되어있으면 이 프로브는 어플리케이션이 시작했는지 검증되기 전까지 liveness와 readiness probe가 동작하지 않도록 한다.
이 프로브는 오직 시작단계에서만 동작한다. 이에 반해 위 두 프로브는 주기적으로 상태를 확인한다.