쿠버네티스에서는 다양한 종류의 probe
를 지원한다. probe는 kubelet
에서 현재 노드에서 실행중인 컨테이너의 상태를 파악하고 라이프사이클을 제어하는 health-check
기능을 수행한다. kubelet은 컨테이너의 상태를 진단하기 위해 핸들러를 호출하는데, 핸들러는 수행하는 작업의 분류에 따라 ExecAction
, TCPSocketAction
HttpGetAction
로 구분된다.
컨테이너에서 지정된 명령어를 실행한다. 명령어를 실행한 후, exit code
가 0이면 성공, 이외의 값은 실패로 분류한다.
지정된 포트로 TCP 소켓 연결을 시도한다. 연결이 정상적으로 이루어지는 경우 성공, 연결에 실패한 경우 실패로 분류한다.
지정된 포트와 주소로 HTTP GET
요청을 전송한다. 응답 상태가 200~400 구간에 속하는 경우 성공, 이외에는 실패로 분류한다.
probe의 종류에 따라서, 핸들러 호출 결과를 처리하는 방식이 달라진다. probe의 종류로는 크게 liveness probe
, readiness probe
, startup probe
가 있다.
liveness probe
는 핸들러를 호출한 결과가 실패인 경우, 문제가 발생한 컨테이너를 종료 하는 역할을 한다. 종료된 컨테이너는restartPolicy
에 따라 다시 만들어지거나, 종료된 상태로 남게 된다.
Readiness probe
는 핸들러 호출 결과가 실패인 경우, 문제가 발생한 컨테이너를 서비스 백엔드에서 일시적으로 제외한다. 따라서, 문제가 발생한 컨테이너는 일시적으로 어떠한 요청도 처리하지 않는 상태가 된다.
Pod은 해당 Pod을 담당하는 Service가 생성되는 시점에 kube-proxy
에 의해 iptable
에 등록되면서 서비스 백엔드로 등록된다. 서비스 백엔드에 등록된 팟들은 chain rule
에 의해 해당 서비스로 들어온 트래픽을 분배받고 이를 처리하게 된다. 따라서, 서비스 백엔드에서 제외되면 해당 Pod은 어떠한 요청도 처리하지 않는 상태가 된다.
Liveness Probe
는 문제가 생긴 컨테이너를 종료하지만, Readiness probe
는 해당 컨테이너를 임시적으로 disable
상태로 전환시키고 지속적으로 핸들러를 호출하여 결과를 확인한다.
Startup Probe
는 컨테이너가 처음 생성되는 시점에 Liveness Probe
에 의해 강제 종료되는 것을 막기 위해 사용된다. 일부 컨테이너는 시작 시, 많은 시간이 소요될 수 있다. 이러한 경우, 아직 컨테이너가 생성중임에도 불구하고 Liveness Probe
에 의해 종료되는 불상사가 발생할 수 있다.
Startup Probe
는 최초 1회 성공시까지 Liveness Probe
의 기능을 제한하여 컨테이너가 충분한 시간을 갖고 생성될 수 있도록 지원한다.
probe
는 핸들러 종류에 따라 실행할 명령어
, 연결할 포트
, 요청을 전송할 주소
, 요청 주기
, 실패 허용횟수
등의 파라미터를 설정할 수 있다. probe 설정과 관련된 내용은 공식문서에 상세히 설명되어 있다.