
分布式系统管理起来可能很困难,因为它们包含许多动态变化的元素,所有这些元素都必须正常运行才能确保系统功能正常。如果某个元素发生故障,系统必须自动检测、规避并修复它。在本“Kubernetes 最佳实践”系列文章中,我们将学习如何配置就绪性测试和存活性测试,以验证 Kubernetes 集群的健康状况。
健康检查是一种简单的方法,可以让系统了解您的应用实例是否正在运行。如果您的应用实例宕机,其他服务不应访问该实例或向其发送请求。相反,请求应发送到另一个正在运行或稍后启动的应用实例。此外,系统应将您的应用恢复到正常状态。
默认情况下,Kubernetes 会在 Pod 内的所有容器都运行后才开始向该 Pod 发送流量,并在容器崩溃时重启它们。这种默认行为对于初始部署可能足够,但您可以通过使用自定义健康检查来提高产品部署的可靠性。

幸运的是,Kubernetes 让这一切变得非常简单,所以没有理由忽略这些检查。Kubernetes 提供了两种类型的健康检查,了解它们各自的使用方式至关重要。
就绪性测试旨在告知 Kubernetes 您的应用程序已准备好处理流量。在允许服务向 Pod 发送流量之前,Kubernetes 必须验证就绪性检查是否成功。如果就绪性测试失败,Kubernetes 将停止向 Pod 发送流量,直到测试成功为止。
存活测试会告诉 Kubernetes 你的应用程序是存活还是死亡。如果应用程序存活,Kubernetes 不会对其进行任何操作;如果应用程序死亡,它会删除死亡的 Pod 并用一个新的 Pod 替换它。
假设你的应用程序需要 1 分钟预热和启动。即使工作进程已经启动,你的服务也只有在应用程序完全加载并运行后才会开始工作。如果你想将此部署扩展到多个实例,也会遇到问题,因为这些实例在完全运行之前不应该接收流量。然而,默认情况下,Kubernetes 会在容器内的进程启动后立即开始发送流量。
使用就绪探测时,Kubernetes 将等待应用程序完全运行后,才允许服务向新实例发送流量。

我们设想另一种情况:一个应用程序长时间挂起,停止处理请求。由于进程仍在运行,Kubernetes 默认会认为一切正常,并继续向已停止运行的 Pod 发送请求。但是,如果启用了存活检测 (Liveness),Kubernetes 将会检测到应用程序已停止处理请求,并默认重启已停止运行的 Pod。

我们来看看如何测试系统的就绪性和存活性。有三种测试方法:HTTP 测试、命令测试和 TCP 测试。您可以使用其中任何一种方法进行验证。最常用的用户测试方法是 HTTP 探测。
即使您的应用程序不是 HTTP 服务器,您仍然可以在应用程序内部创建一个轻量级的 HTTP 服务器来与存活测试进行交互。Kubernetes 会向 Pod 发送 ping 请求,如果 HTTP 响应在 200 或 300 毫秒范围内,则表明 Pod 运行状况良好。否则,Pod 将被标记为不健康。

对于基于命令的测试,Kubernetes 会在容器内执行一个命令。如果该命令返回的退出代码为零,则容器将被标记为健康。否则,如果返回的退出状态介于 1 到 255 之间,则容器将被标记为“患病”。如果您无法或不想运行 HTTP 服务器,但能够运行命令来检查应用程序的健康状况,则此测试方法非常有用。

最后一种验证机制是 TCP 测试。Kubernetes 会尝试在指定的端口上建立 TCP 连接。如果连接成功,则容器被视为健康;否则,容器被视为不健康。如果您遇到使用 HTTP 请求或命令执行进行测试效果不佳的情况,此方法非常有用。例如,gRPC 或 FTP 是常用的需要使用 TCP 进行测试的服务。

测试可以通过多种方式和各种参数进行配置。您可以指定测试运行频率、成功和失败阈值以及响应等待时间。有关详细信息,请参阅就绪性测试和存活性测试的文档。但是,配置存活性测试时有一个非常重要的点:设置初始测试延迟(initialDelaySeconds)。正如我提到的,此测试运行失败会导致模块重启。因此,您需要确保在应用程序准备就绪之前不要启动测试,否则它将陷入无限重启循环。我建议使用 P99 启动时间或缓冲区中的平均应用程序启动时间。请记住,如果应用程序的启动时间变快或变慢,则需要调整此值。
大多数专家都认同,健康检查对于任何分布式系统都至关重要,Kubernetes 也不例外。使用服务健康检查可以确保 Kubernetes 可靠无故障地运行,并且对用户来说也十分便捷。
很快就会继续...

一些广告🙂
感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的内容? 通过下订单或推荐给朋友来支持我们, , 我们为您发明的入门级服务器的独特模拟: (适用于 RAID1 和 RAID10,最多 24 个内核和最多 40GB DDR4)。
Dell R730xd 在阿姆斯特丹的 Equinix Tier IV 数据中心便宜 2 倍? 只有这里 在荷兰! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 美元起! 阅读
来源: habr.com
