首页 > 解决方案 > Kubernetes 如何阻止新流量到一个副本?

问题描述

我有 10 个 pod 的应用程序,并且所有 pod 之间的流量都是负载平衡的。有一个问题导致事务排队,一旦问题得到修复,很少有 pod 无法正常恢复或需要很长时间来处理队列。对于一些 pod 来说,新的流量仍然太多。

我想知道我是否可以阻止到副本集中特定 pod 的新流量并让他们处理队列,一旦队列被处理,然后让新流量再次进入?

标签: kubernetes

解决方案


为此,您可以使用探针来处理这种情况

就绪探测是一种方法。

探测要做的是,不断检查容器或 POD 内部的进程是否在配置的时间间隔内启动。

例子

readinessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 5

您可以在应用程序中创建端点,该端点将由 K8s 自动检查,如果 K8s为200,它将标记 POD 为准备好处理流量。或者标记为未准备好不处理流量。

注意

Readiness 和 liveness 探针可以并行用于同一个容器。使用两者可以确保流量不会到达尚未准备好的容器,并且容器在失败时会重新启动。

如果 POD 失败,Readiness 探针不会重新启动您的 POD,而 liveness 探针会在失败并发送400时重新启动您的 POD 或容器。

在您的场景中,最好使用Readiness探针,以便进程继续运行并且永远不会重新启动。一旦应用程序准备好处理流量,K8s 将在端点上获得200 个响应。

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/


推荐阅读