Search

[K8S] ReadinessProbe vs LivenessProbe

PublishDate
2023/05/02
Category
Kubernetes
Tag & Keyword
Protoss
Probe

1. 소개

Kubernetes에서 livenessProbereadinessProbe는 Pod의 상태를 확인하고 Pod가 정상적으로 작동하는지 결정하는 데 사용된다. 이 두 가지 Probe는 유사하게 동작하지만 목적과 사용 방법이 다르다.

1.1. Liveness Probe

livenessProbe는 Pod가 살아있는지 여부를 확인한다. Pod가 이 Probe를 실패하면 Kubernetes는 Pod를 삭제하고 다시 시작한다. 이를 통해 시스템의 다른 부분에 문제를 일으키지 않고 문제가 있는 컨테이너를 다시 시작할 수 있다.

1.2. Readiness Probe

readinessProbe는 Pod가 요청을 처리할 준비가 되었는지 여부를 확인한다. Pod가 이 Probe를 실패하면 Kubernetes는 Pod를 서비스에서 제외하고 다른 Pod로 요청을 전달한다. 이를 통해 요청을 처리할 준비가 되지 않은 Pod에 대한 요청을 방지할 수 있다.

1.3. Startup Probe (optional)

startupProbe 는 컨테이너가 시작될 때, 즉 Pod가 처음 시작되고, livenessProbe가 실행되기 전에 실행되는 프로브다. startupProbe로 ContainerCreating 단계를 확인하고, 이후에는 livenessProbe를 사용하여 컨테이너 상태를 확인할 수 있다.

1.4. 차이

두 Probe의 차이
livenessProbe는 Probe가 비정상이면, 해당 Pod를 재시작한다.
readinessProbe는 Probe가 비정상이면, Pod를 사용할 수 없음으로 표시하고 서비스, 로드밸런서 등에서 제외한다. (기본적으로 재시작 X)
startupProbe는 왜 사용하나 싶을수도 있다. 사실상 livenessProbe와 동일할 수 있으니까 말이다. 하지만 다음과 같은 장점을 위해 사용할 수도 있다.
1.
livenessProbe와 다른 정책 (periodSeconds, failureThreshold) 사용 가능.
2.
startupProbe를 통해 ContainerCreating 단계가 정상 완료되었는지 판단할 수 있다. (livenessProbe는 컨테이너가 실행중인지 아닌지만 판단한다.)

2. 두 가지를 같이 사용해야할까?

처음 이 개념을 접했을 때 이런 생각을 했었다.
어차피 livenessProbe를 충족하지 못하면 readinessProbe 또한 충족하지 못하는거 아닌가? 그럼 두 개의 Probe를 쓸 필요가 있나?
결론부터 말하면 두 가지를 같이 사용하는 것이 권장된다.
livenessProbereadinessProbe를 모두 사용하면, Pod의 상태를 좀 더 정확하게 파악할 수 있다. 이를 통해 요청이 어떤 Pod로 전달되어야 하는지와 어떤 컨테이너가 문제가 있는지를 파악할 수 있다.

3. 테스트

Docker Desktop에서 제공하는 kubernetes를 사용했습니다. → 개인 PC의 브라우저에서 localhost:[nodeport] 로 접근할 수 있습니다.
이전 포스팅에서 사용했던 downwardAPI를 사용하는 manifest file을 재활용한다.

3.1. readinessProbe 테스트

3.2. livenessProbe 테스트

4. 결론

간단한 테스트를 통해서 livenessProbereadinessProbe가 어떻게 동작하는지 알아보았다.
각 Probe의 목적이 명확하고 Kubernetes에서는 둘 다 사용하는것을 권장한다.
또한 두 Probe의 동작은 독립적이기 때문에, periodSeconds, failureThreshold, initialDelaySeconds 등의 옵션을 각각 알맞게 사용해야 한다.
Probe에 관한 자세한 정보는 공식 Document를 참고할 수 있다.