kubernetes - 我应该每秒做一次 liveness probe 和 readiness probe 吗?

标签 kubernetes

在我的 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/

相关文章:

java - 使用 Spring Boot 连接拒绝的 Kubernetes 服务发现

kubernetes - 私有(private)托管 Kubernetes 存储?

Kubernetes - 您可以在 x86 上构建主节点和 Arm 上工作节点的集群吗?

kubernetes - 创建 monorepo Kubernetes 基础设施的良好实践是什么?

docker - 使用 Gitlab 安装 Ingress 的 Kubernetes 返回 "?"作为外部 IP

amazon-web-services - WSO2 Kuberentes AWS 部署

kubernetes - PromQL 绘制每小时创建的 Kubernetes POD 数量

docker - 如何授予 Openshift 容器的非特权用户对/root/.ssh 的读取访问权限以进行 spring 云配置服务器 SSH 身份验证?

Kubernetes 读取 secret 文件内容不正确

kubernetes - 针对失败的 GKE CronJob 的 GCP 警报策略