如何在kubernetes loadbalancer中将pod直接标记为脱机
我在一些吊舱前面有一个k8s负载平衡器。当我部署更新的pod时,一定数量的pod流量将超时并失败-看起来k8s基本上会按照预期处理pod更新/部署,但loadbalancer不会意识到这一点,只会继续向所有pod发送流量,直到liveness监视器出现故障,然后才停止向播客发送流量 我想看到的是以下场景:如何在kubernetes loadbalancer中将pod直接标记为脱机,kubernetes,internal-load-balancer,Kubernetes,Internal Load Balancer,我在一些吊舱前面有一个k8s负载平衡器。当我部署更新的pod时,一定数量的pod流量将超时并失败-看起来k8s基本上会按照预期处理pod更新/部署,但loadbalancer不会意识到这一点,只会继续向所有pod发送流量,直到liveness监视器出现故障,然后才停止向播客发送流量 我想看到的是以下场景: 在loadbalancer中将一个pod标记为离线,这样就不会向那里发送新的通信量,但不会重新启动pod 更新/更换吊舱 当新pod响应就绪探测时,向其发送通信量 这样我就不会超时了。那么,如
readinessProbe:
httpGet:
path: /ready
port: 8080
periodSeconds: 1
initialDelaySeconds: 5
livenessProbe:
httpGet:
path: /alive
port: 8080
periodSeconds: 1
failureThreshold: 2
initialDelaySeconds: 40
但是,从表面上看,这并不能解决问题:如果负载平衡器仅在探测失败后才停止发送流量,而k8s在没有通知负载平衡器的情况下开始关闭pod,则会出现失败的请求。无论我如何调整上面的值-periodSeconds的最小值为1秒
不过,我正在考虑试用readiness probe,看看在开始部署之前,我是否可以在不重启pod的情况下让pod离线。不完全是最优的,但可能是一条前进的道路。正如@Daniel Lee在评论中提到的那样 要实现您想要的目标,您应该在部署中配置运行状况检查
那么让我们从什么是健康检查开始 如前所述 健康检查的类型 Kubernetes为您提供了两种类型的健康检查,了解这两种检查的区别及其用途非常重要 准备就绪 准备就绪探测器旨在让Kubernetes知道您的应用程序何时准备好为流量服务。Kubernetes在允许服务向pod发送流量之前,确保准备就绪探测器通过。如果准备就绪探测器开始失败,Kubernetes将停止向pod发送流量,直到其通过 活力 Liveness探测器让Kubernetes知道你的应用程序是活的还是死的。若你们的应用程序还活着,那个么库伯内特斯就不去管它了。如果你的应用程序死了,Kubernetes会移除Pod并启动一个新的来替换它 此外,在上面的网站上,您将看到关于liveness和readiness探测如何工作的详细描述
如果您想以零停机时间更新部署,您应该检查
额外资源: