在我的 K8S 工作负载中,我实现了 Readiness 探测和 Liveness 探测以进行 pod 健康检查。
我想知道我是否应该将间隔 (periodSeconds
) 设置为低至 1 秒,因为它会消耗更多资源,对吗?
在做 Pod 健康检查时有没有最佳实践?
最佳答案
首先,了解 Liveness 和 Readiness 之间的区别很重要。 tl;dr 是:Liveness 是关于 K8s 是否应该杀死并重启容器,Readiness 是关于容器是否能够接受请求。您可能需要为两者使用不同的参数。
K8s 是否根据探测结果采取任何行动取决于failureThreshold
。这是在 K8s 执行某些操作之前探测器必须连续失败的次数。如果将它与 periodSeconds
结合使用,您可以调整探针的灵敏度。
一般来说你想要平衡:
- K8s 采取行动所需的时间以及根据探测您的服务预计恢复的速度
- 探测的“成本”。例如,如果您的 Readiness 探测器连接到一个数据库,那么您将向每个副本的数据库添加 1 个每秒查询 (QPS) 负载(如果有 100 个副本,您将仅通过探测器产生 100QPS!)
- 探针的可靠性,也称为“片状”。什么是假阴性率 - 即探测报告失败但服务实际以预期性能率运行的时间比例是多少
这是一种思考方式:
- 计算出您的服务在 K8s 采取行动之前可以处于失败状态的时间。这应该基于恢复需要多长时间(例如,在 Liveness 的情况下重新启动)
- 如果探测“昂贵”,则有更长的
periodSeconds
和更小的failureThreshold
- 如果探测是“不稳定的”(即偶尔报告失败,然后报告之后工作得非常快)有更短的
periodSeconds
和更大的failureThreashold
。
关于kubernetes - 我应该每秒做一次 liveness probe 和 readiness probe 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62380682/