K8S学习笔记 - 探针
K8S探针
·
Kubernetes调度Pod到Kubernetes节点上,节点上的Kubelet运行Pod的容器。如果容器内进程终止运行(容器的主进程崩溃),Kubelet会自动重启容器,这体现了Kubernetes赋予应用的自愈能力。在某些情况下,即使容器内进程没有崩溃,应用程序仍可能处于非正常工作状态。Kubernetes默认只是检查Pod的容器是否正常运行,但容器正常运行并不一定代表应用健康。我们可以通过Kubernetes提供的探针来探测容器应用是否健康,然后决定是否重启恢复应用到正常工作状态,以及决定容器是否能接收请求。
Kubernetes探针有三种类型:
- 存活探针(Liveness Probe):探测容器内应用程序是否健康。若不健康,意味探测失败,Kubemetes将定期执行探针并重新启动容器。
- 就绪探针(Readiness Probe):探测容器是否已经就绪。只有当Pod内所有容器都处于就绪状态时kubelet才会认定该Pod处于就绪状态。若不健康,意味探测失败,Pod将会被Kubernetes从相应的Endpoint list中移除,请求不再分发到该Pod的容器上。特别是在容器创建后,应用程序需要进行初始化或加载数据,可能是几秒或者更长时间,这段时间里不能对外提供服务,因此不应该将请求分发到该Pod上。
- 启动探针(Startup Probe):探测容器内应用是否启动完成。在启动探针探测成功前,存活探针和启动探针不会执行!
Kubernetes支持三种探测方式:
- EXEC:在容器中执行一个命令,如果命令退出码返回 0 则表示探测成功,否则表示失败。
- TCPSocket:对指定的容IP及端口执行一个TCP检查,如果端口是开放的则表示探测成功,否则表示失败。
- HTTPGet:对指定的容器IP、端口及路径执行一个HTTP Get请求,如果返回的状态码在 200, 399 之间则表示探测成功,否则表示失败。
Liveness探针例子:
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
更多推荐
已为社区贡献8条内容
所有评论(0)