1. probe란?
- Kubernetes probe는 Kubernetes에서 컨테이너 상태를 모니터링하고 관리하기 위한 도구이다.
- Probe는 컨테이너의 상태를 확인하고 문제가 발생했을 때 Kubernetes가 적절히 대응할 수 있도록 도와준다.
- probe는 kubelet에 의해 주기적으로 진단을 수행한다.
- kubelet: worker node에 있는 agent로 maser node의 kubernetes-api와 통신하며 실제로 contianer runtime에 배포를 명령하는 역할을 한다. (kubelet: 선장, worker node: 배)
2. probe 종류
2-1. Liveness Probe
- Liveness Probe는 컨테이너에서 실행 중인 애플리케이션이 healthy 상태인지 확인한다.
- 만약 Liveness Probe가 비정상적인 상태를 감지하면, Kubernetes는 해당 컨테이너를 종료하고 재배포를 시도한다.
- initialDelaySeconds를 통해 pod 재시작이 무한루프에 빠지는 것을 막는다.
- pod 구성의 spec.containers.livenessprobe 속성에서 구성한다.
2-2. Readiness Probe
- Pod의 상태를 확인하고 Pod가 비정상일 경우, Kubernetes는 해당 컨테이너의 IP 주소를 모든 서비스의 엔드포인트에서 제거함으로 SVC에서 Pod로 트래픽을 보내지 않는다.
- pod 구성의 spec.containers.readinessprobe 속성에서 구성한다.
2-3. Startup Probe
- 컨테이너 내의 애플리케이션이 시작되었는지 여부를 확인한다.
- Startup Probe는 다른 probe보다 먼저 실행되며, 성공적으로 완료되지 않으면 liveness, readiness probe가 동작하지 않는다.
- 만약 컨테이너가 시작 Probe를 통과하지 못하면, 해당 컨테이너는 종료되고 pod의 restartPolicy에 따라 다시 시작된다.
- pod 구성의 spec.containers.startupprobe 속성에서 구성한다.
3. Probe 구성 방법
- pod 구성의 spec.containers에서 Liveness, Readiness, Startup Probe를 구성할 수 있다.
- Probe 구성 시 3가지 Type (httpGet, tcpSocket, or exec)이 있다.
- httpGet
- HTTP GET 요청을 사용하여 컨테이너 내의 웹 서버에 연결하여 응답을 확인한다.
- 지정된 URL 및 포트 번로 HTTP GET 요청을 보내, 리턴되는 HTTP 응답코드가 200 이상 400 미만인 경우 정상으로 판단한다
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
- tcpSocket
- 지정된 포트로 TCP 연결을 시도하여, 연결이 성공되면 컨테이너가 정상인 것으로 판단한다.
- 컨테이너의 주소 및 포트가 정상적인지 체크한다.
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
- exec
- 컨테이너에서 지정된 명령을 실행하여 정상 여부를 확인한다.
- "exec"으로 정의하고 "command : " 아래에 실행하고자 하는 쉘 명령을 기입한다.
- 명령이 성공하면 을 반환한다. 만일 0 이외의 값이 반환되면 실패로 간주한다.
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
참고
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
'Container > Kubernetes' 카테고리의 다른 글
[Kubernetes] Kubespray로 쿠버네티스 설치 (1) | 2024.05.02 |
---|---|
[Kubernetes] ELK Stack 개념 (0) | 2024.04.29 |
[Kubernetes] Istio 설치 및 BookInfo 예제 (0) | 2024.04.04 |
[Kubernetes] MSA 및 Service Mash 소개 (0) | 2024.04.03 |
[Kubernetes] Prometheus & Grafana를 통한 Kubernetes 모니터링 설정 (0) | 2024.03.18 |