正确实现 Kubernetes Liveness 和 Readiness 探针

Posted

技术标签:

【中文标题】正确实现 Kubernetes Liveness 和 Readiness 探针【英文标题】:Correct implementation for Kubernetes Liveness and Readiness probes 【发布时间】:2020-12-13 01:03:58 【问题描述】:

给定一个 Python 应用程序,它在无限循环中轮询 Kafka 主题,并在处理收到的 Kafka 消息后将结果上传到 s3 存储桶。

在为 Kubernetes 定义就绪和活跃度探测时应该考虑哪些因素。

包含在就绪探测中是否有意义:

    s3 存储桶存在。 存在 Kafka 主题。 轮询 Kafka 主题的循环已初始化。

并且 liveness probe 只检查 poll 循环没有退出。

在就绪探测中检查这些东西严格来说是一种不好的做法吗?

【问题讨论】:

Python 代码是否写入 S3?为什么不使用 Kafka S3 连接器? 这中间涉及到很多处理。 如果 S3 会限制您的上传请求的速率,您不能将“已处理的消息”作为缓冲区发送回 Kafka? 【参考方案1】:

我不会在 Kubernetes 探针中检查任何这些内容。让您的应用程序启动自行检查它们,如果环境不合适,请立即退出。您的 pod 将显示为 CrashLoopBackOff 状态,并且会重新启动几次,但很明显有问题。

在应用程序运行时这些事情可能会失败,但您应该能够注意到这一点。例如,Prometheus 之类的指标系统可以帮助您发现大多数 S3 请求是否失败。如果您可以检查您的 Kafka 侦听器主循环是否已退出,您也可以重新启动它。

【讨论】:

以上是关于正确实现 Kubernetes Liveness 和 Readiness 探针的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kubernetes 中触发 Liveness Probe 失败

Kubernetes liveness 探针是不是支持使用 PKI 进行用户身份验证?

Readiness 探测 - 每天5分钟玩转 Docker 容器技术(144)

Liveness 探测转

每天5分钟玩转Kubernetes | Readiness探测

Liveness 探测 - 每天5分钟玩转 Docker 容器技术(143)