Kubernetes 探针是容器健康检查的重要组件,合理配置和使用探针可以提高应用程序的可靠性。本文将介绍探针的实战指南,涵盖 Liveness Probe、Readiness Probe 的配置和高级应用,同时添加一些扩展和额外参数的说明。
1. Liveness Probe
Liveness Probe
用于确定容器是否存活。当 Liveness Probe
失败时,Kubernetes 将重启容器,以确保应用程序的健康状态。
1.1 HTTP Liveness Probe
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
failureThreshold: 3
initialDelaySeconds
表示在容器启动后等待 3 秒后开始执行首次探测。periodSeconds
表示每隔 3 秒进行一次探测。failureThreshold
表示在连续 3 次探测失败后,Kubernetes 将重启容器。
Liveness Probe
的主要作用是确保容器在运行时保持活动状态,当容器处于不健康状态时,Kubernetes 会采取自动的容器重启策略。
1.2 TCP Liveness Probe
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
对于 TCP Liveness Probe,同样可以设置 initialDelaySeconds
和 periodSeconds
参数。
1.3 Exec Liveness Probe
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 3
periodSeconds: 3
通过 Exec Liveness Probe,执行指定的命令判断容器是否存活。在上述配置中,执行的命令是 cat /tmp/healthy
。
2. Readiness Probe
Readiness Probe
用于确定容器是否准备好接收流量。当 Readiness Probe
失败时,Kubernetes 将停止向容器发送流量。
2.1 HTTP Readiness Probe
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
initialDelaySeconds
表示在容器启动后等待 5 秒后开始执行首次探测。periodSeconds
表示每隔 5 秒进行一次探测。
2.2 TCP Readiness Probe
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
对于 TCP Readiness Probe,同样可以设置 initialDelaySeconds
和 periodSeconds
参数。
2.3 Exec Readiness Probe
readinessProbe:
exec:
command:
- cat
- /tmp/ready
initialDelaySeconds: 5
periodSeconds: 5
通过 Exec Readiness Probe,执行指定的命令判断容器是否准备好接收流量。在上述配置中,执行的命令是 cat /tmp/ready
。
3. 高级应用
3.1 探针超时配置
readinessProbe:
httpGet:
path: /ready
port: 8080
timeoutSeconds: 2
timeoutSeconds
表示探针在 2 秒内必须完成,否则将视为失败。
3.2 探针失败阈值
livenessProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 3
failureThreshold
表示在连续 3 次探测失败后,Kubernetes 将重启容器。
3.3 探针初始延迟随机性
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
failureThreshold: 3
initialDelaySeconds: 5
initialDelaySeconds
在 5 秒和 8 秒之间的随机时间内开始首次探测。
4.完整案例
为了更全面地说明探针的作用,下面是一个完整的 YAML 示例,包括 Liveness Probe 和 Readiness Probe 的配置,以及容器的重启策略。此外,我添加了一些验证的注释,以便更好地理解探针的实际效果:
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp-container
image: myapp-image
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
failureThreshold: 3
restartPolicy: Always
在这个示例中:
readinessProbe
配置了一个 HTTP 探测器,用于判断容器是否准备好接收流量。该探测器在容器启动后等待 5 秒开始执行,每隔 5 秒进行一次探测。livenessProbe
配置了一个 HTTP 探测器,用于判断容器是否存活。该探测器在容器启动后等待 3 秒开始执行,每隔 3 秒进行一次探测,如果连续 3 次探测失败,则 Kubernetes 将重启容器。restartPolicy: Always
指定了容器的重启策略,即使容器正常退出,也会自动重启。
请确保你的应用程序在容器内实际提供了 /ready
和 /healthz
的路径,并且能够响应这些探测请求。这样,Kubernetes 才能通过这些探针来判断容器的状态,并根据需要进行重启或流量调度。
结论
通过合理配置 Liveness Probe 和 Readiness Probe,可以确保容器应用在运行时保持活动状态、可靠接收流量,并在必要时进行重启。根据应用的性能和启动时间,调整探针参数,以达到最佳的应用可维护性和可靠性。在实际应用中,根据具体需求,选择合适的探针类型和配置。