小编给大家分享一下kubernetes中如何实现Pod健康检查,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一:前言
对Pod的健康状态检查可以通过两类探针来检查:LivenessProbe和ReadinessProbe
1.LivenessProbe探针: 用于判断容器是否存活,如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认为该容器的LivenessProbe探针返回值永远是“Success”.
2.ReadinessProbe探针: 用于判断容器是否启动完成,可以接收请求。如果ReadinessProbe 探针检测到失败,则Pod的状态将被修改。Endpoint Controller将从Service的Endpoint中删除包括该容器所在Pod的Endpoint.
二:LivenessProbe实现方式
1.ExecAction: 在容器内部执行一个命令,如果该命令的返回码为0,则表面容器健康。
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name:liveness
image:busybox
args:
- /bin/sh
- -c
- echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 15
timeoutSeconds: 1
通过执行“cat /tmp/health”命令来判断一个容器运行是否正常。而该Pod运行之后,在创建/tmp/health文件的10s之后将删除该文件,而LivenessProbe健康检查的初始探测时间(initialDelaySeconds)为15s,探测结果将是Fail,将导致kubelet杀掉该容器并重启它。
2.TCPSocketAction: 通过容器的IP地址和端口号执行TCP检查,如果能够建立TCP连接,则表面容器健康。
apiVersion: v1
kind: Pod
metadata:
name: pod-with-healthcheck
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 30
timeoutSeconds: 1
3. HTTPGetAction: 通过容器的IP地址,端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器状态健康。
apiVersion: v1
kind: Pod
metadata:
name: pod-with-healthcheck
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
livenessProbe:
httpGet:
port: 80
path: /_status/healthz
initialDelaySeconds: 30
timeoutSeconds: 1
kubelet定时发送HTTP请求到localhost:80/_status/healthz来进行容器应用的健康检查。
三:说明
1.initialDelaySeconds:启动容器后进行首次健康检查的等待时间,单位为s
2.timeoutSeconds: 健康检查发送请求后等待响应的超时时间,单位为s. 当超时发生时,kubelet会认为容器已经无法提供服务,将会重启该容器。
以上是“kubernetes中如何实现Pod健康检查”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!