Container probes
Probe는 kubelet에 의해서 주기적으로 컨테이너에 수행되는 diagnostic이다. diagnostic을 수행하기위해서 kubelet은 컨테이너에 의해 구현된 handler를 호출한다.
- ExecAction : 컨테이너내의 특정 커멘드를 실행한다.
- TCPSocketAction : pod의 ip 주소의 특정 포트에 TCP 체크를 수행한다.
- HTTPGetAction : 특정 ip 주소에 특정 포트에 대한 HTTP Get 요청을 수행한다.
probe는 3가지 결과를 가질수 있다.
Success
: 컨테이너가 diagnostic을 패스함.Failure
: 컨테이너가 diagnostic을 실패함.Unknown
: diagnostic이 실패했으며 아무런 action이 수행되서는 안됨.
kubelet은 선택적으로 probe들의 세가지 종류에 대해서 대응할수 있다.
livenessProbe : 컨테이너가 실행중인지 아닌지를 나타낸다. Liveness probe가 실패하면, kubelet은 컨테이너를 죽인다, 그리고 컨테이너는 restart policy에 따르게 된다. 만약 컨테이너가 liveness probe를 제공하지 않으면 기본 state는
Success
이다.- readinessProbe : 컨테이너가 요청에 응답할수 있는지 없는지를 나타냄. 만약 컨테이너가 readiness probe를 제공하지 않으면, default states는
Success
이다. - startupProbe : 컨테이너내에있는 어플리케이션이 시작될수 있는지 없는지를 나타냄. startupProbe가 제공되면, 성공할때 까지 다른 probe는 비활성화됨. 만약 실패하면, kubelet은 컨테이너를 죽이고 컨테이너는 restart policy에 따른다. startupProbe를 제공하지 않으면, default state는
Success
이다.
Liveness probe를 사용해야하는 경우
만약 probe가 실패할경우 컨테이너를 죽이고 재시작하고싶다면, liveness probe를 명시해야하고, restartPolicy
를 Always or OnFailure를 명시하면된다.
Readiness probe를 사용해야하는 경우
probe가 성공될때 pod에 트래픽을 보내고 싶은경우. liveness probe와의 차이점은 pod이 트래픽을 받지 않으면서 실행되는 점이다. probe가 성공하기 시작하면 그때 트래픽을 받는다. 예를들어, 대용량 데이터를 로딩하는 작업을 할경우, 사용이 가능하다.
Startup probe를 사용해야하는 경우
startup probe는 서비스가 되기까지 오랜걸리는 컨테이너들을 포함하는 pod에 유용하다. 긴 liveness interval을 명시하기보다, 컨테이너가 실행될때 컨테이너를 probing하기 위해 독립적인 configuration을 지정가능하고, liveness interval 보다 더 긴 시간을 설정할수 있다.