Liveness 살아있나??를 확인한다.

Readiness 준비됐나??를 확인한다.

 

Liveness 

살아있나??를 왜 확인할까

 

Kubernetes에서 한 개 이상의 Container를 포함하는 최소단위로 Pod라고 한다.

k8s의 각노드에는 kubelet이라는 노드별 관리자가 있고 kubelet은 각 Pod별로 설정된 값에 따라 내부의 Container를 관리한다.

따라서 Container에 문제가 생긴다면 다시 시작하여 해결한다.

그런데

정상상태임을 확인하고 문제로 감지 하는 것이 완벽할 수는 없다.

예를 들면, Java 어플리케이션의 경우 OutOfMemory에러가 발생하는 경우 JVM 프로세스는 계속 실행 중 일 수 있다. 또는 무한루프, 무한대기와 같은 교착 상태가 발생 했을 때

이를 감지 하지 못하고 따라서 Container의 재시작이 일어나지 않아 어플리케이션에 문제가 지속될 수 있다.

 

장애에 대한 케이스는 너무나 무궁무진하고 우리 모두 각자의 케이스에 맞는 대응, 대비가 필요하다.

그래서 추가적으로 이 Pod가 잘 돌아 가고 있는지를 체크하는 kubernetes의 api가 있는데 그것이 Liveness 이다.

 

[예제 추가 예정]

 

Readiness 

준비됐나를 왜 확인할까

뭔가 막연하다. 예를 들어 보면,

Pod의 Container가 image를 통해 올라가면 끝이 아니다.

만약 서버를 위한 Pod라면 프로그램들이 구동되고 하기 까지 어느 정도의 시간이 걸릴  것이다.

 

kubernetes에서 yaml파일을 통해 pod를 생성하고 조회를 했다.

상태가 1/1로 올라와있음을 확인했지만

당장 서버를 접속하거나 했을때 바로 되지 않고 잠시 기다려야 했던 상황이 있었을 것이다.

 

이럴 때 Readiness를 통해서 준비가 완료 되었는지를 확인하고

서비스에 사용할 수 있도록 하는 것이다.

보통 준비 완료를 확인하는 파일의 유무를 확인한다.

Readiness는 지속적으로 파일의 유무를 확인할 것이고,

파일이 없는 경우에는 해당 Container에 대한 service의 endpoint를 제거하는 것으로 새 트래픽을 받을 수 없게 한다.

 

Readiness는 올라가 있는 Container에 대한 지속적인 체크이다. Liveness와 같이 container를 재시작 하는 방식은 아니다. 단지 client와의 연결을 끊는다고 보면 될 것 같다.

 

[예제 추가 예정]

+ Recent posts