본문 바로가기

소프트웨어-이야기/인프라

[Kubernetes] readiness/liveness probe

쿠버네티스는 두가지 유형의 상태 체크 기능을 가지고 있다.

Readiness

Readiness Probe는 애플리케이션이 트래픽을 받을 준비가 되었다는 것을 쿠버네티스에 알리는 역할을 한다. 쿠버네티스는 트래픽을 받기 전에 Readiness Probe를 통과했는지 확인한다. Readiness Probe에 실패하면, 쿠버네티스는 Readiness Probe을 통과할 때까지 파드로 트래픽 전송을 중단한다. 

Liveness

Liveness Probe는 애플리케이션이 살았는지, 죽었는지 알려주는 역할을 한다. 파드가 살아있으면 쿠버네티스는 별도의 조치를 하지 않는다. 그러나 파드가 죽어있다면, 쿠버네티스는 파드를 제거하고 새로운 파드를 시작한다. 

 

두가지 시나리오를 통해, 두 차이점을 이해해보자.

 

Readiness 

애플리케이션이 warm up 되고, 시작하는 데에 1분이 걸린다고 가정해보자. 

기본적으로 쿠버네티스는 프로세스가 실행되자마자 트래픽을 전송한다. 

그런데 1분이 지나야만 애플리케이션에서 트래픽을 처리할 수 있는 상황이라면, 이 상태라면 오류가 발생하게 된다.

그래서 쿠버네티스는 Readiness Probe을 사용해서 애플리케이션이 제대로 실행될 때까지 기다렸다가, 트래픽을 전송한다. 

https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes?hl=en

 

Liveness

애플리케이션의 상태가 안좋아지는 상태를 상상해보자.

데드락이나 행이 걸려서, 여러 API 요청이 밀리고 있다거나, 메모리를 너무 많이 사용하고 있어서 GC가 CPU를 잡아먹는다거나.. 

이런 상황에서도 프로세스는 계속 실행되고 있기 때문에, 쿠버네티스는 다 정상이라고 생각하고 트래픽을 계속 전달한다. Liveness Probe를 사용하면, 쿠버네티스는 애플리케이션이 더이상 트래픽을 처리할 수 있는 상황이 아니라는 것을 인지할 수 있다.

https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes?hl=en

 

주의사항

Liveness Probe를 설정할 때, initialDelaySeconds 을 꼭 설정해야한다. Liveness Probe에 실패하면 파드를 계속 재시작하기 때문에, 애플리케이션이 준비된 이후에 Probe가 실행되도록 해야한다. 

initialDelaySeconds은 애플리케이션 제일 오래걸리는 시간을 기준으로 설정해야한다. 애플리케이션이 뜨는 데에 걸리는 시간을 보고, 이 값을 조정해야한다. 

참고

https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes?hl=en