statefulset 的就绪探测,而不是单个 pod/container

Readiness probe for statefulset, not individual pod/container

我一直在阅读有关 liveness and readiness probes in kubernetes 的内容,我想用它们来检查集群是否已激活。

问题是如何为整个有状态集配置就绪探测,而不是为单个 pod/container。

可以使用简单的 HTTP 检查来确定准备情况,但我 运行 遇到的问题是 readinessCheck 似乎适用于 container/pod 而不是集本身。

对于我使用的软件,HTTP 端点在集群形成之前不会出现;这意味着每个单独的 pod 都将无法通过 readinessCheck,直到所有三个 pod 都启动并找到彼此。

我现在在 Kubernetes 中看到的行为是创建了 3 个副本中的第一个,并且 Kubernetes 甚至不会尝试创建副本 2 和 3,直到第一个通过 readinessCheck,这从来没有发生过,因为所有必须三个才能有机会通过。

您需要将 .spec.podManagementPolicyStatefulSet 政策从 OrderedReady 更改为 Parallel 政策。

这样 K8S 将并行启动所有 pods,不会等待探测。

来自documentation

podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is OrderedReady, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is Parallel which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.