[Kubernetes] Probes

bluewhale·2021년 6월 2일
0

kubernetes

목록 보기
4/11

Probes

쿠버네티스에서는 다양한 종류의 probe를 지원한다. probe는 kubelet에서 현재 노드에서 실행중인 컨테이너의 상태를 파악하고 라이프사이클을 제어하는 health-check 기능을 수행한다. kubelet은 컨테이너의 상태를 진단하기 위해 핸들러를 호출하는데, 핸들러는 수행하는 작업의 분류에 따라 ExecAction, TCPSocketAction HttpGetAction로 구분된다.

ExecAction

컨테이너에서 지정된 명령어를 실행한다. 명령어를 실행한 후, exit code가 0이면 성공, 이외의 값은 실패로 분류한다.

TCPSocketAction

지정된 포트로 TCP 소켓 연결을 시도한다. 연결이 정상적으로 이루어지는 경우 성공, 연결에 실패한 경우 실패로 분류한다.

HttpGetAction

지정된 포트와 주소로 HTTP GET 요청을 전송한다. 응답 상태가 200~400 구간에 속하는 경우 성공, 이외에는 실패로 분류한다.

probe의 종류에 따라서, 핸들러 호출 결과를 처리하는 방식이 달라진다. probe의 종류로는 크게 liveness probe, readiness probe, startup probe가 있다.

Liveness Probe

liveness probe는 핸들러를 호출한 결과가 실패인 경우, 문제가 발생한 컨테이너를 종료 하는 역할을 한다. 종료된 컨테이너는restartPolicy에 따라 다시 만들어지거나, 종료된 상태로 남게 된다.

Readiness Probe

Readiness probe는 핸들러 호출 결과가 실패인 경우, 문제가 발생한 컨테이너를 서비스 백엔드에서 일시적으로 제외한다. 따라서, 문제가 발생한 컨테이너는 일시적으로 어떠한 요청도 처리하지 않는 상태가 된다.

Pod은 해당 Pod을 담당하는 Service가 생성되는 시점에 kube-proxy에 의해 iptable에 등록되면서 서비스 백엔드로 등록된다. 서비스 백엔드에 등록된 팟들은 chain rule에 의해 해당 서비스로 들어온 트래픽을 분배받고 이를 처리하게 된다. 따라서, 서비스 백엔드에서 제외되면 해당 Pod은 어떠한 요청도 처리하지 않는 상태가 된다.

Liveness Probe는 문제가 생긴 컨테이너를 종료하지만, Readiness probe는 해당 컨테이너를 임시적으로 disable 상태로 전환시키고 지속적으로 핸들러를 호출하여 결과를 확인한다.

Startup Probe

Startup Probe는 컨테이너가 처음 생성되는 시점에 Liveness Probe에 의해 강제 종료되는 것을 막기 위해 사용된다. 일부 컨테이너는 시작 시, 많은 시간이 소요될 수 있다. 이러한 경우, 아직 컨테이너가 생성중임에도 불구하고 Liveness Probe에 의해 종료되는 불상사가 발생할 수 있다.

Startup Probe는 최초 1회 성공시까지 Liveness Probe의 기능을 제한하여 컨테이너가 충분한 시간을 갖고 생성될 수 있도록 지원한다.

Configurations

probe는 핸들러 종류에 따라 실행할 명령어, 연결할 포트, 요청을 전송할 주소, 요청 주기, 실패 허용횟수 등의 파라미터를 설정할 수 있다. probe 설정과 관련된 내용은 공식문서에 상세히 설명되어 있다.

References

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

profile
안녕하세요

0개의 댓글