如何在kubernetes loadbalancer中将pod直接标记为脱机

如何在kubernetes loadbalancer中将pod直接标记为脱机,kubernetes,internal-load-balancer,Kubernetes,Internal Load Balancer,我在一些吊舱前面有一个k8s负载平衡器。当我部署更新的pod时,一定数量的pod流量将超时并失败-看起来k8s基本上会按照预期处理pod更新/部署,但loadbalancer不会意识到这一点,只会继续向所有pod发送流量,直到liveness监视器出现故障,然后才停止向播客发送流量 我想看到的是以下场景: 在loadbalancer中将一个pod标记为离线,这样就不会向那里发送新的通信量,但不会重新启动pod 更新/更换吊舱 当新pod响应就绪探测时,向其发送通信量 这样我就不会超时了。那么,如

我在一些吊舱前面有一个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探测如何工作的详细描述


    如果您想以零停机时间更新部署,您应该检查


    额外资源:


    您的健康检查是什么样的。负载平衡器仅在运行状况检查表明资源正常时才向其发送流量。我将live and ready Probe设置为1秒,liveness failure threshold设置为2。但是,如果k8s在未通知负载平衡器的情况下关闭pod,则仍然会有失败的tips请求谢谢。我已经用更多的信息更新了这个问题。我已经准备好了准备就绪和活动探测器设置,以及滚动更新。在pod不健康后,loadbalancer仍然发送通信量,或者执行类似操作,导致502s/503s。您添加的deepsource链接详细说明了这一点:“这就是造成我们部署中可用性差距的原因;pod是在负载平衡器注意到更改并可以更新其配置时被终止信号停用的。”这与我们看到的完全一样