简介
Kubernetes 是一个强大的容器编排系统,可帮助管理和扩展容器化应用程序。Kubernetes 的关键特性之一是能够使用存活探针(liveness probes)来监控容器的健康状态。本教程将指导你理解、配置和排查存活探针的故障,以确保基于 Kubernetes 的应用程序的可靠性和响应能力。
理解 Kubernetes 存活探针
Kubernetes 是一个强大的容器编排系统,可帮助管理和扩展容器化应用程序。Kubernetes 的关键特性之一是能够使用存活探针来监控容器的健康状态。存活探针用于确定容器是否正在运行并响应,如果容器变得不健康,可用于自动重启容器。
在 Kubernetes 中,存活探针是由 Kubelet(在每个节点上运行的 Kubernetes 代理)定期执行的检查,以确定容器的健康状态。如果存活探针失败,Kubernetes 将自动重启容器,确保你的应用程序保持可用并响应。
存活探针可以配置为使用三种不同类型的健康检查之一:
- HTTP GET 探针:Kubelet 向容器内的特定端点发送 HTTP GET 请求,并检查响应代码。如果响应代码在 200 到 399 之间(包括 200 和 399),则探针被视为成功。
livenessProbe:
httpGet:
path: /healthz
port: 8080
- TCP 套接字探针:Kubelet 尝试打开到容器内特定端口的 TCP 连接。如果连接建立成功,则探针被视为成功。
livenessProbe:
tcpSocket:
port: 3306
- 命令探针:Kubelet 在容器内执行一个命令并检查退出代码。如果退出代码为 0,则探针被视为成功。
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
存活探针可以在 Kubernetes Pod 规范中的容器级别进行配置。通过设置适当的存活探针,即使面对意外故障或问题,你也可以确保基于 Kubernetes 的应用程序保持健康并响应。
为 Kubernetes 容器配置存活探针
在 Kubernetes 中运行容器化应用程序时,配置适当的存活探针以确保服务的健康和可用性非常重要。存活探针可以在 Kubernetes Pod 规范中的容器级别进行配置。
让我们来探讨不同类型的存活探针以及如何配置它们:
HTTP GET 探针
HTTP GET 探针会向容器内指定的端点发送 HTTP GET 请求。如果响应代码在 200 到 399 之间(包括 200 和 399),则探针被视为成功。以下是一个示例:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
在此示例中,存活探针将在初始延迟 30 秒后,每 5 秒向端口 8080 上的 /healthz 端点发送一次 HTTP GET 请求。
TCP 套接字探针
TCP 套接字探针会尝试打开到容器内指定端口的 TCP 连接。如果连接建立成功,则探针被视为成功。以下是一个示例:
livenessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 15
periodSeconds: 10
在此示例中,存活探针将在初始延迟 15 秒后,每 10 秒尝试打开到端口 3306 的 TCP 连接。
命令探针
命令探针会在容器内执行一个命令并检查退出代码。如果退出代码为 0,则探针被视为成功。以下是一个示例:
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 45
periodSeconds: 15
在此示例中,存活探针将在初始延迟 45 秒后,每 15 秒在容器内执行 cat /tmp/healthy 命令。
在配置存活探针时,考虑应用程序的特定要求并选择合适的探针类型非常重要。此外,你可以自定义探针设置,例如初始延迟、探针频率和超时时间,以满足应用程序的需求。
排查和处理存活探针故障
虽然存活探针是确保基于 Kubernetes 的应用程序健康和可用性的强大工具,但有时这些探针可能会失败,导致容器重启或出现其他问题。了解如何排查和处理存活探针故障对于维护应用程序的可靠性和稳定性至关重要。
识别存活探针故障
当存活探针失败时,你通常可以在 Kubernetes 事件日志中看到,或者通过检查 Pod 的状态来发现。Kubelet 会记录有关失败探针的信息,包括失败原因和任何错误消息。
你可以使用 kubectl describe pod <pod-name> 命令来查看 Pod 的详细信息,包括任何存活探针故障:
事件:
类型 原因 年龄 来源 消息
---- ------ ---- ---- -------
警告 Unhealthy 2 分钟 kubelet 存活探针失败:获取 " 拨号 tcp 10.244.0.6:8080: 连接被拒绝
在此示例中,存活探针失败是因为对 /healthz 端点的 HTTP GET 请求无法连接到容器。
排查存活探针故障
要排查存活探针故障,你可以从以下方面入手:
- 验证应用程序在容器内是否正在运行并响应。
- 检查应用程序日志中是否有任何可能导致探针失败的错误或问题。
- 确保探针配置(例如,端点、端口、命令)正确且符合应用程序的健康检查要求。
- 调整探针设置,如初始延迟、探针频率和超时时间,以更好地满足应用程序的需求。
处理存活探针故障
当存活探针失败时,Kubernetes 将自动重启容器以尝试恢复应用程序的健康状态。不过,你也可以实施其他策略来处理这些故障,例如:
- 优雅关闭:确保你的应用程序在接收到终止信号时能够优雅地关闭,使其能够在退出前清理资源并执行任何必要的任务。
- 就绪探针:除了存活探针之外,配置就绪探针以确保应用程序不仅正在运行,而且还准备好接收流量。
- 退避策略:自定义存活探针失败的退避策略,以控制容器重启的频率和持续时间。
通过了解如何排查和处理存活探针故障,你可以提高基于 Kubernetes 的应用程序的可靠性和弹性,确保它们对用户保持可用并响应。
总结
在本教程中,你已经了解了存活探针在 Kubernetes 中的重要性以及如何有效地配置它们。你探索了不同类型的存活探针,包括 HTTP GET、TCP 套接字和命令探针,以及如何为你的容器设置它们。此外,你还深入了解了排查和处理存活探针故障,以确保你的 Kubernetes 应用程序保持健康和可用。通过实施适当的存活探针配置,你可以提高在 Kubernetes 上运行的容器化应用程序的整体可靠性和弹性。


