💌Pod是k8s的最小执行单元,probe 是由 kubelet 对容器执行的定期诊断。 要执行诊断,kubelet 既可以在容器内执行代码,也可以发出一个网络请求。
💌Pod探针主要有三种类型:
💌用于探测容器是否运行,会一直检测。如果探测失败,kubelet会杀死容器,并根据配置的重启策略进行处理。若没有配置,默认Success。
🍠如果容器中的进程能够在遇到问题或不健康的情况下自行停止,则不一定需要存活探针; kubelet 将根据 Pod 的 restartPolicy 自动执行修复操作。
🍠如果希望容器在探测失败时被杀死并重新启动,那么请指定一个存活探针, 并指定 restartPolicy 为 "Always" 或 "OnFailure"。
💌1.16版本新增探测方式,用于判断容器内应用程序是否启动,如果配置了startupProbe,就会先禁止其他的探针,直到探测到容器启动成功为止。如果探测失败,kubelet会杀死容器,并根据配置的重启策略进行处理。若没有配置,默认Success。
🍠对于所包含的容器需要较长时间才能启动就绪的 Pod 而言,启动探针是有用的。
🍠如果容器需要在启动期间加载大型数据、配置文件或执行迁移, 可以使用启动探针。
🍠如果容器启动时间通常超出 initialDelaySeconds + failureThreshold × periodSeconds 总值,应该设置一个启动探针,对存活探针所使用的同一端点执行检查。 periodSeconds 的默认值是 10 秒。应该将其 failureThreshold 设置得足够高, 以便容器有充足的时间完成启动,并且避免更改存活探针所使用的默认值。 这一设置有助于减少死锁状况的发生。
🍠Pod 将在启动阶段不接收任何数据,并且只有在探针探测成功后才开始接收数据,需要指定就绪探针。
🍠如果希望容器能够自行进入维护状态,也可以指定一个就绪探针。
🍠如果应用程序对后端服务有严格的依赖性,可以同时实现存活和就绪探针。 当应用程序本身是健康的,存活探针检测通过后,就绪探针会额外检查每个所需的后端服务是否可用。 这可以避免将流量导向只能返回错误信息的 Pod。
🍠如果想区分已经失败的应用和仍在处理启动数据的应用,更倾向于使用就绪探针。
💌使用探针来检查容器有四种不同的方法。 每个探针都必须准确定义为这四种机制中的一种:
💌在容器内执行一个命令,如果返回值为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
💌通过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
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健康监测。 如果响应的状态是 "SERVING",则认为诊断成功。 gRPC 探针是一个 Alpha 特性,只有在启用了"GRPCContainerProbe"时才能使用。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- stra.cn 版权所有 赣ICP备2024042791号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务