笔记摘自视频章节:第四章-p22
主题
测试k8s中的探针: readiness和liveness
操作
就绪检测 readiness
- 创建一个带就绪探针的pod yaml文件
apiVersion: v1
kind: Pod
metadata:
name: readiness-httpget-pod
namespace: default
spec:
containers:
- name: readiness-httpget-container
image: wangyanglinux/myapp:v1
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port: 80
path: /index1.html
initialDelaySeconds: 1
periodSeconds: 3
-
字段讲解
- imagePullPolicy: 镜像下载策略
- readinessProbe: 就绪检测方案
- httpGet: 检查http
- inititalDelaySeconds: 延时策略
- periodSeconds: 周期执行时间
-
查看pod 状态,一直未就绪
kubectl get pod
NAME READY STATUS RESTARTS AGE
readiness-httpget-pod 0/1 Running 0 12s
- 分析原因: 确认为404,所以一直在未就绪状态
kubectl describd pods readiness-httpget-pod
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 14m default-scheduler Successfully assigned default/readiness-httpget-pod to jjh-k8s-demo-node1
Normal Pulling 14m kubelet Pulling image "wangyanglinux/myapp:v1"
Normal Pulled 14m kubelet Successfully pulled image "wangyanglinux/myapp:v1" in 12.760578508s
Normal Created 14m kubelet Created container readiness-httpget-container
Normal Started 14m kubelet Started container readiness-httpget-container
Warning Unhealthy 4m15s (x205 over 14m) kubelet Readiness probe failed: HTTP probe failed with statuscode: 404
- 尝试恢复,使得改html存在,httpGet条件满足后,期望pod的readiness检查通过。
- sh进入pod:
kubectl exec readiness-httpget-pod -it -- /bin/sh - 创建文件:
echo "123" >> /usr/share/nginx/html/index1.html - 退出
- 查看pod状态,已经恢复正常
- sh进入pod:
存活检测 liveness
case1: 文件检查
- 创建yaml,就绪条件为:检查文件
/tmp/live存在
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
namespace: default
spec:
containers:
- name: liveness-exec-container
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c", "touch /tmp/live ; sleep 60; rm -rf /tmp/live; sleep 3600"]
livenessProbe:
exec:
command: ["test","-e","/tmp/live"]
initialDelaySeconds: 1
periodSeconds: 3
-
创建pod:
kubectl create -f p21_liveness_probe.yaml pod/liveness-exec-pod created -
状态跟踪
- 一开始一直是运行着的
kubectl get pods NAME READY STATUS RESTARTS AGE liveness-exec-pod 1/1 Running 0 8s- 监测,等待一分钟,发现pod在一分钟后重启,探活机制成功触发
kubectl get pods -w NAME READY STATUS RESTARTS AGE liveness-exec-pod 1/1 Running 0 36s liveness-exec-pod 1/1 Running 1 (1s ago) 100s
case2: tcpSocket
- 文件
apiVersion: v1
kind: Pod
metadata:
name: probe-tcp
spec:
containers:
- name: nginx
image: wangyanglinux/myapp:v1
imagePullPolicy: IfNotPresent
livenessProbe:
initialDelaySeconds: 5
timeoutSeconds: 1
tcpSocket:
port: 21212
- 查看发现不断重启,这是因为21212单口一直没有就绪
kubectl get pod -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
probe-tcp 1/1 Running 0 4s 10.244.1.17 jjh-k8s-demo-node1 <none> <none>
probe-tcp 1/1 Running 1 (1s ago) 31s 10.244.1.17 jjh-k8s-demo-node1 <none> <none>
probe-tcp 1/1 Running 2 (1s ago) 61s 10.244.1.17 jjh-k8s-demo-node1 <none> <none>
probe-tcp 1/1 Running 3 (1s ago) 91s 10.244.1.17 jjh-k8s-demo-node1 <none> <none>
其他
还有readiness和liveness组合使用的case,不作赘述