웹 애플리케이션의 경우 특정 URL에 HTTP 리퀘스트를 보내, 그 반환값을 체크함으로써 애플리케이션이 정상적으로 움직이고 있는지를 판단할 수 있습니다.
매니페스트 파일 작성
# 기본 항목
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
# Pod Spec
spec:
# Container spec
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet: # Http 리퀘스트 반환 값에 따라 체크함
path: /healthz
port: 8080
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 10 # 처음 감시할 때 까지의 Delay
periodSeconds: 5 # Liveness Probe 실행 간격
위의 매니페스트 파일은 livenessProbe를 실행하기 위해 kubelet이 컨테이너의 8080:/healthz에 HTTP GET 요청을 송신합니다. 이 리퀘스트의 HTTP Status Code가 200이상 400미만인 경우는 성공으로 간주됩니다. 그 외의 스테이터스 코드가 반환된 경우(404, 500 등) 오류로 간주하여 kubelet이 컨테이너를 재시작합니다.
또한 initialDelaySeconds 필드는 파드가 시작된 이후 처음으로 감시를 실행할 때 까지의 시간을 나타내며, 위의 파일에서는 10초로 설정되어 있습니다. 또한 periodSeconds 필드는 Liveness Probe의 실행 간격 으로 위의 파일에서는 5초로 설정되어 있습니다.
위의 k8s.gcr.io/liveness 이미지는 서버가 실행되고 10초 이후 500코드를 반환하도록 되어 있습니다. 매니페스트 파일을 실행해보겠습니다.
$ kubectl apply -f liveness-http.yaml
pod "liveness-http" created
그리고 kubectl describe를 이용하여 로그를 살펴보면 다음과 같습니다.
컨테이너가 실행 후 10초뒤에 500코드를 받아 Liveness probe가 'failed'되고, kubelet이 컨테이너를 재시작 시키는 것을 확인할 수 있습니다.
위의 결과에서 Age가 정확히 10초가 아닌데 이는 Pod가 Pending하는 시간이 포함되어 있기 때문입니다.(이미지 다운로드 등..)
Liveness Porbe를 이용하여 HTTP 요청에 의한 Healthcheck를 다루어 보았습니다.
참고
'About > Kubernetes' 카테고리의 다른 글
[k8s] 파드 스케쥴링 - Node Affinity(노드 어피니티) (2) | 2022.01.21 |
---|---|
[k8s] Liveness Probe - ExecAction을 이용한 Pod Health Check (0) | 2022.01.20 |
[k8s] 파드의 우선순위(Pod QoS, Quality of Service) (0) | 2022.01.18 |
[k8s] Probe - Pod Health Checks(readiness Probe vs liveness Probe) (0) | 2022.01.17 |
[k8s] Pod LifeCycle(파드의 생명 주기) (0) | 2022.01.17 |