kubernetes.io 에서 확인할 수 있는 쿠버네티스 특징 중 하나인 self healing 기능에 대해 살펴본다.
1. Liveness Probe
- Pod가 계속 실행할 수 있음을 보장
- Pod의 spec에 정의
- 건강한 컨테이너로 서비스하는 것을 목적으로 하고 있다.
2. Liveness Probe 매커니즘
- httpGet probe : 지정한 IP주소, 포트, path에 HTTP GET 요청을 보내, 해당 컨테이너가 응답하는지를 확인한다. 반환코드가 200이 아닌 값이 나오면 오류로 판단하고 컨테이너를 다시 시작한다.
livenessProbe:
httpGet
path:
port: 80
- tcpSocket probe : 지정된 포트에 TCP 연결을 시도, 연결되지 않으면 컨테이너를 다시 시작한다.
livenessProbe:
tcpSocket:
port: 22
- exec probe : exec 명령을 전달하고 명령의 종료코드가 0이 아니면 컨테이너를 다시 시작한다.
livenessProbe:
exec
command:
- ls
- /data/file
➜ 파드가 아닌 컨테이너를 재시작하기 때문에 아이피는 변경되지 않음
3. Liveness Probe 매개 변수
- periodSeconds : health chek 반복 실행 시간(초)
- initialDelaySeconds : Pod 실행 후 delay할 시간(초)
- timeoutSeconds : health check 후 응답을 기다리는 시간(초)
- livenessProbe definition
apiVersion v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15 //pod가 running 되고 15초 이후 check
periodSeconds: 20
timeoutSeconds: 1
successThreshold: 1
failureThresold: 3
4. Liveness Probe example
liveness Probe는 Pod의 spec에 정의한다.
아래 example에서 사용한 smlinux/unhealthy 컨테이너는 HTTP connection이 있을 때마다 내부 서버 오류로 HTP 500 ERROR를 발생한다.
$ cat pod-liveness.yam
apiVersion: v1
kind: Pod
metadata:
name: liveness-pod
spec:
containers:
- image: smlinux/unhealthy
name: unhealthy-container
ports:
- containerPort: 8080
protocols: TCP
livenessProbe:
httpGet:
path: /
port: 8080
위 코드를 이용해 liveness-pod 를 생성하고, 50x3초 가 지난 이후에 컨테이너가 kill되어 다시 restart 되는 것을 확인할 수 있다.
controlplane $ kubectl describe pod liveness-pod // describe 옵션을 이용한 상태 및 이벤트 확인
.
.
.
Liveness: http-get http://:8080/ delay=0s timeout=1s period=10s #success=1 #failure=3
.
.
.
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m23s default-scheduler Successfully assigned default/liveness-pod to node01
Warning Unhealthy 64s (x3 over 84s) kubelet, node01 Liveness probe failed: HTTP probe failed with statuscode: 500
Normal Killing 64s kubelet, node01 Container unhealthy-container failed liveness probe, will be restarted
Normal Pulling 34s (x2 over 2m22s) kubelet, node01 Pulling image "smlinux/unhealthy"
Normal Pulled 34s (x2 over 2m21s) kubelet, node01 Successfully pulled image "smlinux/unhealthy"
Normal Created 34s (x2 over 2m21s) kubelet, node01 Created container unhealthy-container
Normal Started 33s (x2 over 2m21s) kubelet, node01 Started container unhealthy-container
// 상태코드 500을 반환하여 Unhealthy 하다고 판단되면 컨테이너를 kill, 다시 이미지를 pull로 가져와서 새 컨테이너를 start한다.
Reference
'Cloud > Kubernetes' 카테고리의 다른 글
[Kubernetes] Kubernetes Pod | static Pod (0) | 2021.12.10 |
---|---|
[Kubernetes] Kubernetes Pod | init container (0) | 2021.12.09 |
[Kubernetes] Kubernetes pod | pod 생성, 관리 (0) | 2021.12.08 |
[Kubernetes] 쿠버네티스 아키텍쳐 | yaml, API (0) | 2021.12.07 |
[Kubernetes] 쿠버네티스 아키텍쳐 | namespace (0) | 2021.12.07 |