健康检查最简单的方式就是检查进程的状态。Kubelet 不断的询问 Docker daemon 这个容器进程是否还在运行,如果没有,这个容器就会被重启。目前在所有 Kubernetes 的案例中,这种健康检查是一直开启的。对与 Kubernetes 中所有运行的容器都是生效的。然而,在很多场景中这个低级别的健康检查是没有作用的:比如进程也一直在运行,但是从应用的角度看,代码已经死锁,而且不会有正确的响应。
LivenessProbe探针:
用于判断容器是否存活,即Pod是否为running状态,如果LivenessProbe探针探测到容器不健康,则kubelet将kill掉容器,并根据容器的重启策略是否重启,如果一个容器不包含LivenessProbe探针,则Kubelet认为容器的LivenessProbe探针的返回值永远成功。
ReadinessProbe探针:
用于判断容器是否正常提供服务,即容器的Ready是否为True,是否可以接收请求,如果ReadinessProbe探测失败,则容器的Ready将为False,控制器将此Pod的Endpoint从对应的service的Endpoint列表中移除,从此不再将任何请求调度此Pod上,直到下次探测成功。(剔除此pod不参与接收请求)
目前,有三种类型的应用健康检查你可以选择:
探测的结果有以下三者之一:
本环境使用httpGet方式
案例:
containers:
- name: nginx
image: nginx
readinessProbe:
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 120
periodSeconds: 15
timeoutSeconds: 2
livenessProbe:
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 180
timeoutSeconds: 2
periodSeconds: 15
----------
host:要连接的主机名,默认为Pod IP,可以在http request head中设置host头部。
httpHeaders:
– name: X-Custom-Header
value: Awesome
scheme: 用于连接host的协议,默认为HTTP。
path:http服务器上的访问URI。
httpHeaders:自定义HTTP请求headers,HTTP允许重复headers。
port: 容器上要访问端口号或名称
对于LivenessProbe和ReadinessProbe用法都一样,拥有相同的参数和相同的监测方式。
当前对每一个Container都可以设置不同的restartpolicy,有三种值可以设置:
Always : 只要container退出就重新启动
OnFailure : 当container非正常退出后重新启动
Never : 从不进行重新启动
restartPolicy: [Always|Never|OnFailure]//重启策略
如果restartpolicy没有设置,那么默认值是Always。如果container需要重启,仅仅是通过kubelet在当前节点进行container级别的重启。
如果要使用ReadinessProbe只需要将livenessProbe修改为readinessProbe即可
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 1
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 20
periodSeconds: 10
timeoutSeconds: 1
exec
readinessProbe:
exec:
command: ["python", "health_check.py", "server=-addr=:80"]
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
exec:
command: ["python", "health_check.py", "server=-addr=:80"]
initialDelaySeconds: 10
periodSeconds: 10
livenessProbe:
exec:
command:
- wget
- --quiet
- --tries=1
- --timeout=4
- --spider
- http://localhost:8080/readyz
timeoutSeconds: 5
initialDelaySeconds: 5
periodSeconds: 5
原文:https://www.cnblogs.com/lizhaojun-ops/p/12905339.html