我应该每秒进行一次活性探测和就绪性探测吗?

Tha*_*San 4 kubernetes

在我的 K8S 工作负载中,我实现了 Readiness 探针和 Liveness 探针来进行 Pod 运行状况检查。

我想知道我是否应该将间隔 ( periodSeconds) 设置为低至 1 秒,因为它会消耗更多资源,对吧?

进行 Pod 运行状况检查时是否有最佳实践?

小智 7

首先,了解活跃度和就绪度之间的区别很重要。tl;dr 是:Liveness 是关于 K8s 是否应该杀死并重新启动容器,Readiness 是关于容器是否能够接受请求。您可能希望两者都有不同的参数。

K8s 是否根据探测结果采取任何操作取决于failureThreshold. 这是 K8s 执行某些操作之前探测器必须连续失败的次数。如果将其与此结合起来,periodSeconds您可以调整探头的灵敏度。

一般来说,您想要平衡:

  • K8s 采取行动所需的时间以及根据探测预计您的服务恢复的速度
  • 探测器的“成本”。例如,如果您的 Readiness 探针连接到数据库,那么您将向每个副本的数据库添加 1 个每秒查询 (QPS) 负载(如果有 100 个副本,您将仅通过探针生成 100QPS!)
  • 探头的可靠性,也称为“片状性”。误报率是多少 - 即探测报告失败但服务实际上以预期性能运行的时间比例是多少

这是一种思考方式:

  • 计算出在 K8s 采取行动之前您的服务可以处于失败状态多长时间。这应该基于恢复需要多长时间(例如,在 Liveness 的情况下重新启动)
  • 如果探头“昂贵”,则使用更长periodSeconds、更小的探头failureThreshold
  • 如果探针是“不稳定的”(即偶尔报告失败,然后报告工作很快),则具有更短periodSeconds和更大的failureThreashold.