나그네소
kubernetes livenessProbe 본문
kubernetes 에서 자랑 하는 기능으로 문제가 있는 컨테이는 libenessprobe을 사용하여
재기동 해주는 기능을 제공 한다.
1. LivenessProbe
컨테이너가 재대로 동작 되지 않고 있을 때 자동으로 재기동 시켜준다. livenessProbe를 이용해
self-healing pod(kubelet으로 컨테이너 진단)
2. Liveness Probe(1)
- pod가 계속 실행 할 수 있음을 보장
- pod의 spec에 정의
Pod-definition(일반 POD)
|
livenessProbe definition(live 적용 pod)
|
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14
: web server container
|
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14
livenessProbe:
httpGet:
path: /
port: 80
|
2-1) LivenessProbe 단계 (건강검진)
- httpGet : Web으로 check 하겠다.
- path : root에서
- port : 80 port을 이용하여
3. Liveness Probe(2)
건강 검진을 하는데 문제의 이슈가 여러개 있을 수 있다. 배가 아픈지 허리가 아픈지 아픈 부위에 따라검진을 하는 방식이 달라야 하는데 livenessprobe는 3가지 형태의 검진 방법이 있다.
3-1) livenessProbe 매커리즘
livenessProbe 3가지에 대하여 알아 본다.
◆ httpGet probe(web probe 지원) : 지정한 IP 주소, port, path에 http get 요청을 보내, 해당 컨테이너가 응답하는지를 확인한다. 반환코드가 200이 아닌 값이 나오면 오류, 컨테이너를 다시 시작한다.
(연속해서 세번 실패하면 문제가 있다 판단해서 컨테이너를 다시 죽이고 다시 hub에서 다신 컨테이너를 받아서
기동 시킨다)
livenessProbe:
httpGet:
path:/
port: 80
◆ tcpSocket probe : 지정된 포트에 TCP연결을 시도 연결되지 않으면 컨테이너를 다시 시작한다.
livenessProbe:
tcpSocket:
port: 22
◆ exec probe: exec 명령을 전달하고 명령의 종료 코드가 0이 아니면 컨테이너를 다시 시작한다.
livenessProbe:
exec:
command:
- ls
- /data/file
주기적으로 db에서 data를 가져오는 컨테이너가 있을 시 그데이터가 pod 안에서 있는지 주기적으로 체크 한다.
3. Liveness Probe(3)
- liveness Probe 매게 변수
- periodSeconds : health check 반복 실행 시간(초)
- initialDelaySeconds: Pod 실행 후 delay할 시간(초)
- timeoutSeconds: health check후 응답을 기다리는 시간(초)
Pod-definition(일반 POD)
|
livenessProbe definition(live 적용 pod)
|
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14
: web server container
|
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:1.14
livenessProbe:
httpGet:
path: /
port: 80
======= 아래의 부분은 안쓰면 Default ========
initialDelaySeconds: 15
periodSeconds: 20
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
|
◆ livenessProbe sample
kuber-master:/home/son_kube/tmp] cat pod-nginx-liveness.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-liveness
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 80
* livenessProbe describe
kuber-master:/home/son_kube/tmp] k describe pods nginx-pod-liveness
...
nginx-container:
Container ID: containerd://6abcc22e84547275979b97c5129a0300be64233a29924ed510152f45dc6f48ae
Image: nginx:1.14
Image ID: docker.io/library/nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 08 Nov 2022 09:08:17 +0900
Ready: True
Restart Count: 0
Liveness: http-get http://:80/ delay=0s timeout=1s(몇초동안 응답이 없으면 오류인지) period=10s(얼마만에 점검 할건지) #success=1 #failure=3
......
* livenessProbe 옵션을 보고 싶을 때
kuber-master:/home/son_kube/tmp] k describe pods nginx-pod-liveness
....
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 80
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: nginx-container
...
: livenessProbe default로 적용되는 옵션들의 이름을 알 수 있다.
◆ livenessProbe example
liveness probe는 spec에 정의 한다. 아래 example의 smlinux/unhealthy container는 http connection있을 때 5번까지는
성공 그 이후에는 내부 서버 오류로 HTTP 500 Error을 발생 한다.
- pod-liveness.yaml
apiVersion: v1
kind: Pod
metadata:
name: liveness-pod
spec:
containers:
- image: smlinux/unhealthy
name: unhealthy-container
ports:
- containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 8080
step1. k apply -f pod-liveness.yaml
step2. describe 확인
k describe pods liveness-pod
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m15s default-scheduler Successfully assigned default/liveness-pod to kuber-node2
Normal Pulled 2m43s kubelet Successfully pulled image "smlinux/unhealthy" in 31.04569481s
Warning Unhealthy 84s (x3 over 104s) kubelet Liveness probe failed: HTTP probe failed with statuscode: 500
Normal Killing 84s kubelet Container unhealthy-container failed liveness probe, will be restarted
Normal Pulling 54s (x2 over 3m14s) kubelet Pulling image "smlinux/unhealthy"
Normal Created 52s (x2 over 2m43s) kubelet Created container unhealthy-container
Normal Started 52s (x2 over 2m42s) kubelet Started container unhealthy-container
Normal Pulled 52s kubelet Successfully pulled image "smlinux/unhealthy" in 1.897735137s
kuber-master:/home/son_kube/tmp] k get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
goldilocks-g1n1-5876468c7f-4k9zh 1/1 Running 0 25m 10.244.1.228 kuber-node1 <none> <none>
liveness-pod 1/1 Running 3 (80s ago) 7m21s 10.244.2.44 kuber-node2 <none> <none>
: 3번 재 수행 되었다는 것을 알 수 있다.
'Cloud > Kubernetes' 카테고리의 다른 글
kubernetes Pod - static Pod (0) | 2022.11.17 |
---|---|
kubernetes init container pod (0) | 2022.11.09 |
kubernetes POD 동작 Flow (0) | 2022.11.09 |
kubernetes pod container 정리 (0) | 2022.11.09 |
kubernetes yaml 템플릿 과 API (0) | 2022.11.09 |