쿠버네티스는 두가지 유형의 상태 체크 기능을 가지고 있다.
Readiness
Readiness Probe는 애플리케이션이 트래픽을 받을 준비가 되었다는 것을 쿠버네티스에 알리는 역할을 한다. 쿠버네티스는 트래픽을 받기 전에 Readiness Probe를 통과했는지 확인한다. Readiness Probe에 실패하면, 쿠버네티스는 Readiness Probe을 통과할 때까지 파드로 트래픽 전송을 중단한다.
Liveness
Liveness Probe는 애플리케이션이 살았는지, 죽었는지 알려주는 역할을 한다. 파드가 살아있으면 쿠버네티스는 별도의 조치를 하지 않는다. 그러나 파드가 죽어있다면, 쿠버네티스는 파드를 제거하고 새로운 파드를 시작한다.
두가지 시나리오를 통해, 두 차이점을 이해해보자.
Readiness
애플리케이션이 warm up 되고, 시작하는 데에 1분이 걸린다고 가정해보자.
기본적으로 쿠버네티스는 프로세스가 실행되자마자 트래픽을 전송한다.
그런데 1분이 지나야만 애플리케이션에서 트래픽을 처리할 수 있는 상황이라면, 이 상태라면 오류가 발생하게 된다.
그래서 쿠버네티스는 Readiness Probe을 사용해서 애플리케이션이 제대로 실행될 때까지 기다렸다가, 트래픽을 전송한다.
Liveness
애플리케이션의 상태가 안좋아지는 상태를 상상해보자.
데드락이나 행이 걸려서, 여러 API 요청이 밀리고 있다거나, 메모리를 너무 많이 사용하고 있어서 GC가 CPU를 잡아먹는다거나..
이런 상황에서도 프로세스는 계속 실행되고 있기 때문에, 쿠버네티스는 다 정상이라고 생각하고 트래픽을 계속 전달한다. Liveness Probe를 사용하면, 쿠버네티스는 애플리케이션이 더이상 트래픽을 처리할 수 있는 상황이 아니라는 것을 인지할 수 있다.
주의사항
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
'소프트웨어-이야기 > 인프라' 카테고리의 다른 글
HTTP KeepAlive와 Spring Tomcat과 Netty ConnectionPool의 관계 (0) | 2023.10.14 |
---|---|
개발자를 위한 최소한의 DNS 지식 (2): 쿠버네티스 응용편 (0) | 2023.09.14 |
개발자를 위한 최소한의 네트워크 지식 (0) | 2022.08.26 |
IPv6와 Nginx (0) | 2022.08.26 |
AWS SQS Queue - 표준 VS FIFO (0) | 2022.04.09 |