目录
💟这里是CS大白话专场,让枯燥的学习变得有趣!
💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话!
💟好记性不如烂键盘,自己总结不如收藏别人!
🧡什么是Pod探针?
💌Pod是k8s的最小执行单元,probe 是由 kubelet 对容器执行的定期诊断。 要执行诊断,kubelet 既可以在容器内执行代码,也可以发出一个网络请求。
🧡探针类型
💌Pod探针主要有三种类型:
livenessProbe 存活探针
💌用于探测容器是否运行,会一直检测。如果探测失败,kubelet会杀死容器,并根据配置的重启策略进行处理。若没有配置,默认Success。
🍠如果容器中的进程能够在遇到问题或不健康的情况下自行停止,则不一定需要存活探针; kubelet 将根据 Pod 的 restartPolicy 自动执行修复操作。
🍠如果希望容器在探测失败时被杀死并重新启动,那么请指定一个存活探针, 并指定 restartPolicy 为 "Always" 或 "OnFailure"。
startupProbe 启动探针
💌1.16版本新增探测方式,用于判断容器内应用程序是否启动,如果配置了startupProbe,就会先禁止其他的探针,直到探测到容器启动成功为止。如果探测失败,kubelet会杀死容器,并根据配置的重启策略进行处理。若没有配置,默认Success。
🍠对于所包含的容器需要较长时间才能启动就绪的 Pod 而言,启动探针是有用的。
🍠如果容器需要在启动期间加载大型数据、配置文件或执行迁移, 可以使用启动探针。
🍠如果容器启动时间通常超出 initialDelaySeconds + failureThreshold × periodSeconds 总值,应该设置一个启动探针,对存活探针所使用的同一端点执行检查。 periodSeconds 的默认值是 10 秒。应该将其 failureThreshold 设置得足够高, 以便容器有充足的时间完成启动,并且避免更改存活探针所使用的默认值。 这一设置有助于减少死锁状况的发生。
readinessProbe 就绪探针
💌一般用于探测容器内应用程序是否正常运行,会一直监测。若为Success,则表示程序已经完全启动,可以接收流量。如果探测失败, 端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址。若没有配置,默认Success。
🍠Pod 将在启动阶段不接收任何数据,并且只有在探针探测成功后才开始接收数据,需要指定就绪探针。
🍠如果希望容器能够自行进入维护状态,也可以指定一个就绪探针。
🍠如果应用程序对后端服务有严格的依赖性,可以同时实现存活和就绪探针。 当应用程序本身是健康的,存活探针检测通过后,就绪探针会额外检查每个所需的后端服务是否可用。 这可以避免将流量导向只能返回错误信息的 Pod。
🍠如果想区分已经失败的应用和仍在处理启动数据的应用,更倾向于使用就绪探针。
🧡探测方式
💌使用探针来检查容器有四种不同的方法。 每个探针都必须准确定义为这四种机制中的一种:
exec 命令行探测
💌在容器内执行一个命令,如果返回值为0,则认为容器健康。
vim exec.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness #为了健康检查定义的标签
name: liveness-exec
spec: #定义了Pod中containers的属性
containers:
- name: liveness
image: nginx
args: #传入的命令
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy;sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5 #表示pod中容器启动成功后,多少秒后进行健康检查
periodSeconds: 5 #在首次健康检查后,下一次健康检查的间隔时间5s
timeoutSeconds: 1
failureThreshold: 30
successThreshold: 1
tcpSocket 端口探测
💌通过TCP连接检查容器内端口是否可以建立连接,如果是通的则容器健康。
vim tcp.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness #为了健康检查定义的标签
name: liveness-tcp
spec: #定义了Pod中containers的属性
containers:
- name: liveness
image: nginx
livenessProbe:
tcpSocket:
port:8080
initialDelaySeconds: 5 #表示pod中容器启动成功后,多少秒后进行健康检查
periodSeconds: 5 #在首次健康检查后,下一次健康检查的间隔时间5s
timeoutSeconds: 1
httpGet api探测
💌最可靠的方式,通过应用程序暴露的API地址来检查程序是否是正常的,如果状态码为200~400之间,则认为容器健康。
vim http.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness #为了健康检查定义的标签
name: liveness-http
spec: #定义了Pod中containers的属性
containers:
- name: liveness
ports:
- containerPort: 80
image: nginx
livenessProbe:
httpGet:
port:80
path: /index.html
initialDelaySeconds: 5 #表示pod中容器启动成功后,多少秒后进行健康检查
periodSeconds: 5 #在首次健康检查后,下一次健康检查的间隔时间5s
timeoutSeconds: 1
grpc 远程探测
💌使用gRPC执行一个远程过程调用。 目标应该实现 gRPC健康监测。 如果响应的状态是 "SERVING",则认为诊断成功。 gRPC 探针是一个 Alpha 特性,只有在启用了"GRPCContainerProbe"时才能使用。