正确实现 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)