0

我想部署一个具有三个副本的服务,每个副本都有一个就绪探针。只有当其他两个 pod 也启动时,一个 pod 才会开始工作(在测试就绪的端口发送数据)。所有三个 pod 都需要启动,在内部服务中注册它们的 IP,然后它们才能被发现。

在我看来,就绪探测是按顺序工作的,因此只会启动一个 pod。这造成了一种死锁情况,即启动的 pod 等待其他两个 pod 开始运行,即使它们没有启动应用程序,并且 K8s 不会启动其他两个 pod,直到第一个 pod 的就绪状态得到满足。

我的就绪配置是:

readinessProbe=ExecProbe(
          execute=ExecAction(command=["curl", "localhost:2004"]),
          initialDelaySeconds=120,
          timeoutSeconds=10,
          periodSeconds=10,
          successThreshold=1,
          failureThreshold=10
        )

我希望我的 pod 能够启动,即使当前的 pod 正在运行但它们的准备工作并不成功。或者也许我应该使用准备以外的东西?

4

1 回答 1

1

如果您使用 StatefulSet,请使用并行 pod 管理以允许 Kubernetes 并行创建副本,而无需等待先前的 pod 准备好。

在 StatefulSet 的清单中设置.spec.podManagementPolicy: Parallel

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-db
spec:
  podManagementPolicy: Parallel
  replicas: 3
  <omitted>
于 2021-10-11T22:31:46.473 回答