我认为这是一个非常普遍的情况,我不确定最好的解决方案是什么。
假设您有一个 k8s 工作负载,其中 pod 需要 10-30 秒才能就绪。如果在某个时候您遇到负载峰值,由于某种原因(OOMKills、线程池过载导致探测器无响应等)导致您的 pod 崩溃。即使您配置了 HPA,流量也可能会因客户端重试而增加,最终,您的所有 pod 都会在就绪后立即崩溃,因为服务会将大部分请求(并非所有请求)发送到单个 pod,而所有其他 pod 都处于重新启动过程中。
编辑:此时,我假设 pod 已经正确定义了 Liveness和已配置就绪探测器。但是,如果入口流量至少需要 N 个 pod,而就绪探测器的数量始终小于 N,因为它们在收到流量时会因为流量太多而崩溃,那么您会怎么做?
除了要求所有客户端在其端设置断路器 / 指数退避之外,有没有办法要求 Kubernetes 停止向您的部署发送流量,直到有“足够”的 Pod 准备就绪?(足够是静态数字还是动态数字,取决于入口流量)
今天我们的解决方案是在我们这边安装一个断路器,并手动停止流量,直到工作负载足够健康并且我们手动重新打开流量,但我想知道是否有更好的方法来自动应对这种情况,当你无法阻止它发生时。
谢谢
答案1
Kubernetes 健康探测(启动和就绪探测)就是您所需要的。只有健康探测成功后,您的 Pod 才会开始接收流量。请参阅这里了解更多信息