如何在kubernetes loadbalancer中直接将pod标记为离线

How to directly mark pod as offline in kubernetes loadbalancer

我在一些 pods 前面有一个 k8s 负载均衡器。当我部署更新后的 pods 时,一定数量的流量到 pods 会超时并失败——基本上看起来 k8s 会按预期处理 pod update/deploy,但负载均衡器不会意识到这将继续向所有 pods 发送流量,直到活动监视器似乎失败,然后才停止向 pods.

发送流量

我希望看到的是以下场景:

  1. 在负载均衡器中将 pod 标记为离线,因此不会向那里发送新流量 - 但不会重新启动 pod
  2. update/replace 豆荚
  3. 当新 pod 响应 200 就绪探测时将流量发送到新 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 秒。

不过,我正在考虑尝试使用就绪探测器 - 看看我是否可以在开始部署之前让 pod 脱机而无需重新启动它。不完全是最佳选择,但也许是前进的方向。

正如@Daniel Lee 在评论中提到的那样

要实现您想要的,您应该在部署中配置运行状况检查。


那么让我们从什么是健康检查开始?

如前所述here.

健康检查的类型

Kubernetes gives you two types of health checks, and it is important to understand the differences between the two, and their uses.

Readiness

Readiness probes are designed to let Kubernetes know when your app is ready to serve traffic. Kubernetes makes sure the readiness probe passes before allowing a service to send traffic to the pod. If a readiness probe starts to fail, Kubernetes stops sending traffic to the pod until it passes.

Liveness

Liveness probes let Kubernetes know if your app is alive or dead. If you app is alive, then Kubernetes leaves it alone. If your app is dead, Kubernetes removes the Pod and starts a new one to replace it.

此外,在上面的网站上,您将找到有关 liveness 和 readiness 探测器如何工作的详细说明。


如果您想在零停机时间更新您的部署,您应该检查 Rolling updates


其他资源: