본문 바로가기
도커&쿠버네티스

[katakoda] Liveness and Readiness Healthcheck 활성 및 준비 상태 점검

by bzerome240 2022. 3. 28.

이 시나리오에서는 Kubernetes가 Readiness 및 Liveness Probe를 사용하여 컨테이너 상태를 확인하는 방법을 배웁니다. 
준비 프로브는 애플리케이션이 트래픽 처리를 시작할 준비가 되었는지 확인합니다. 
이 프로브는 컨테이너가 시작된 문제를 해결하지만 프로세스는 여전히 워밍업 및 구성되어 트래픽을 수신할 준비가 되지 않았습니다. 
활성 프로브는 애플리케이션이 정상이고 요청을 처리할 수 있는지 확인합니다.

 

프로브(Probe)

컨테이너에서 kubelet에 의해 주기적으로 수행되는 진단(diagnostic)이다.
진단을 수행하기 위해서, kubelet은 컨테이너에 의해서 구현된 핸들러를 호출한다.

https://developers.redhat.com/blog/2020/11/10/you-probably-need-liveness-and-readiness-probes#what_if_i_don_t_specify_a_readiness_probe_

 

프로브 종류


1 livenessProbe

컨테이너가 동작중인지 여부
실패인 경우 kublet은 컨테이너를 죽이고, 해당 컨테이너는 재시작 정책의 대상이 된다.

2 reainessProbe

컨테이너가 요청을 처리할 준비가 되었는지 여부
실패인 경우 엔드포인트 컨트롤러는 파드에 연관된 모든 서비스들의 엔드포인트에서 파드의 IP주소를 제거한다.

3 startupProbe

컨테이너 내의 애플리케이션이 시작되었는지 여부
실패인 경우 kublet은 컨테이너를 죽이고, 컨테이너는 재시작 정책에 따라 처리된다.

 

 

 

1. 클러스터 시작하기

 

클러스터 시작하기

launch.sh


데모 애플리케이션 배포하기
replicationcontroller, service 생성

kubectl apply -f deploy.yaml



2. 준비상태인 프로브

 

Replication Controller를 배포할 때 각 포드에는 준비 상태 및 활성 상태 확인이 있습니다. 
각 검사는 HTTP를 통한 상태 검사를 수행하기 위한 다음 형식을 갖습니다.

livenessProbe:
  httpGet:
    path: /
    port: 80
  initialDelaySeconds: 1
  timeoutSeconds: 1



애플리케이션에 따라 다른 endpoints을 (ex) /ping) 호출하도록 설정을 변경할 수 있다.

 

파드 상태 확인하기

 

Kubectl은 특정 레이블로 배포된 파드를 반환합니다.

kubectl get pods

 

1 bad-frontend 파드

올바르게 시작되지 않았음을 나타내는 500 오류를 항상 반환하는 HTTP 서비스입니다.

상태 확인이 실패했기 때문에 0개의 컨테이너가 준비되었다고 표시됩니다. 또한 컨테이너의 다시 시작 시도 횟수를 나타낸다.

 

2 frontend 파드

준비된 상태라고 반환된다.



3. 프로브


현재 상태에서 실행 중인 두 번째 포드를 사용하여 오류 발생을 시뮬레이션할 수 있습니다.

 


서비스 충돌
HTTP 서버에는 500 오류를 반환하는 추가 끝점이 있습니다. 
kubectl exec를 사용하면 엔드포인트를 호출할 수 있습니다.

pod=$(kubectl get pods --selector="name=frontend" --output=jsonpath={.items..metadata.name})
kubectl exec $pod -- /usr/bin/curl -s localhost/unhealthy



구성에 따라 Kubernetes는 Liveness Probe를 실행합니다. 
프로브가 실패하면 Kubernetes는 실패한 컨테이너를 파괴하고 다시 생성합니다. 
위의 명령을 실행하여 서비스를 중단하고 Kubernetes가 자동으로 복구하는 것을 지켜보십시오.

















 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

댓글