Kubernetes 最佳实践。 通过就绪性和活性测试进行 Kubernetes 健康检查

Kubernetes 最佳实践。 创建小容器
Kubernetes 最佳实践。 具有命名空间的 Kubernetes 组织

Kubernetes 最佳实践。 通过就绪性和活性测试进行 Kubernetes 健康检查

分布式系统可能难以管理,因为它们有许多移动、变化的元素,所有这些元素都需要正常工作才能使系统正常运行。 如果其中一个元素出现故障,系统必须检测它、绕过它并修复它,而所有这一切都必须自动完成。 在这个 Kubernetes 最佳实践系列中,我们将学习如何设置就绪性和活跃性测试来测试 Kubernetes 集群的运行状况。

健康检查是一种让系统知道您的应用程序实例是否正在运行的简单方法。 如果您的应用程序实例已关闭,则其他服务不应访问它或向其发送请求。 相反,必须将请求发送到已运行或稍后将启动的应用程序的另一个实例。 此外,系统应该恢复应用程序丢失的功能。

默认情况下,当 Pod 中的所有容器都运行时,Kubernetes 将开始向 Pod 发送流量,并在容器崩溃时重新启动容器。 这种默认的系统行为一开始可能就足够好了,但您可以通过使用自定义健全性检查来提高产品部署的可靠性。

Kubernetes 最佳实践。 通过就绪性和活性测试进行 Kubernetes 健康检查

幸运的是,Kubernetes 使这变得非常容易,因此没有理由忽略这些检查。 Kubernetes 提供两种类型的运行状况检查,了解每种类型的使用方式的差异非常重要。

就绪测试旨在告诉 Kubernetes 您的应用程序已准备好处理流量。 在允许服务向 Pod 发送流量之前,Kubernetes 必须验证就绪检查是否成功。 如果Readiness测试失败,Kubernetes将停止向Pod发送流量,直到测试通过。

活性测试告诉 Kubernetes 您的应用程序是存活还是死亡。 在第一种情况下,Kubernetes 将不理会它,在第二种情况下,它将删除失效的 pod 并用新的 pod 替换。

让我们想象一个场景,您的应用程序需要 1 分钟来预热和启动。 尽管工作流程已经启动,但直到应用程序完全加载并运行后,您的服务才会开始工作。 如果您想要将此部署扩展到多个副本,您也会遇到问题,因为这些副本在完全准备好之前不应接收流量。 但是,默认情况下,一旦容器内的进程开始,Kubernetes 就会开始发送流量。

使用就绪测试时,Kubernetes 将等到应用程序完全运行后再允许服务将流量发送到新副本。

Kubernetes 最佳实践。 通过就绪性和活性测试进行 Kubernetes 健康检查

让我们想象另一种场景,其中应用程序长时间挂起,停止服务请求。 随着进程继续运行,默认情况下 Kubernetes 会假设一切正常,并继续向不工作的 pod 发送请求。 但是当使用 Liveness 时,Kubernetes 会检测到应用程序不再服务请求,并默认重新启动失效的 Pod。

Kubernetes 最佳实践。 通过就绪性和活性测试进行 Kubernetes 健康检查

让我们看看如何测试就绪性和可行性。 共有三种测试方法:HTTP、Command 和 TCP。 您可以使用其中任何一个来检查。 测试用户的最常见方法是 HTTP 探针。

即使您的应用程序不是 HTTP 服务器,您仍然可以在应用程序内创建一个轻量级 HTTP 服务器来与 Liveness 测试交互。 之后,Kubernetes 将开始 ping pod,如果 HTTP 响应在 200 或 300 毫秒范围内,则表明 pod 运行状况良好。 否则,该模块将被标记为“不健康”。

Kubernetes 最佳实践。 通过就绪性和活性测试进行 Kubernetes 健康检查

对于命令测试,Kubernetes 在容器内运行命令。 如果命令返回的退出代码为零,则容器将被标记为健康,否则,在收到从 1 到 255 的退出状态号时,容器将被标记为“生病”。 如果您不能或不想运行 HTTP 服务器,但能够运行检查应用程序运行状况的命令,则此测试方法非常有用。

Kubernetes 最佳实践。 通过就绪性和活性测试进行 Kubernetes 健康检查

最终的验证机制是TCP测试。 Kubernetes 将尝试在指定端口上建立 TCP 连接。 如果可以做到这一点,则该容器被认为是健康的;如果不能,则被认为是不可行的。 如果您使用的场景中 HTTP 请求或命令执行测试效果不佳,则此方法可能很有用。 例如,使用 TCP 进行验证的主要服务是 gRPC 或 FTP。

Kubernetes 最佳实践。 通过就绪性和活性测试进行 Kubernetes 健康检查

可以使用不同的参数以多种方式配置测试。 您可以指定执行频率、成功和失败阈值以及等待响应的时间。 有关更多信息,请参阅就绪性和活性测试的文档。 不过,设置Liveness测试有一个非常重要的点——测试延迟initialDelaySeconds的初始设置。 正如我所提到的,此测试失败将导致模块重新启动。 因此,您需要确保在应用程序准备就绪之前不会开始测试,否则它将开始循环重新启动。 我建议使用 P99 启动时间或缓冲区中的平均应用程序启动时间。 请记住,当应用程序的启动时间变快或变慢时,请调整此值。

大多数专家都会确认,健康检查是任何分布式系统的强制性检查,Kubernetes 也不例外。 使用服务健康检查可确保 Kubernetes 可靠、无故障运行,并且对用户而言毫不费力。

很快就会继续...

一些广告🙂

感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的内容? 通过下订单或推荐给朋友来支持我们, 面向开发人员的云 VPS,4.99 美元起, 我们为您发明的入门级服务器的独特模拟: VPS (KVM) E5-2697 v3(6 核)10​​4GB DDR480 1GB SSD 19Gbps XNUMX 美元或如何共享服务器的全部真相? (适用于 RAID1 和 RAID10,最多 24 个内核和最多 40GB DDR4)。

Dell R730xd 在阿姆斯特丹的 Equinix Tier IV 数据中心便宜 2 倍? 只有这里 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 电视低至 199 美元 在荷兰! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 美元起! 阅读 如何建设基础设施公司同级使用价值730欧元的Dell R5xd E2650-4 v9000服务器一分钱?

来源: habr.com

添加评论