【问题标题】:How to scale up all OpenShift pods before scaling down old ones如何在缩小旧 Pod 之前扩展所有 OpenShift Pod
【发布时间】:2022-03-18 04:16:16
【问题描述】:

我有一个基本的 OpenShift 部署配置:

  kind: DeploymentConfig
  spec:
    replicas: 3
    strategy:
      type: Rolling

另外我已经放了:

maxSurge: 3
maxUnavailable: 0%

因为我想先扩展所有新 pod,然后再缩减旧 pod(因此在部署期间将运行 6 个 pod,这就是我决定设置 maxSurge 的原因)。 我想让所有旧 pod 运行,直到所有新 pod 都启动,但是使用这组参数会出现问题。部署期间:

  • 所有 3 个新 pod 立即初始化并尝试启动,旧 pod 正在运行(如预期)
  • 如果第一个新 pod 成功启动,则旧 pod 将终止
  • 如果第二个新 pod 准备就绪,则另一个旧 pod 将终止

只有在所有新 pod 都准备好处理请求时,我才想终止所有旧 pod,否则所有旧 pod 都应该处理请求。

在这个配置中我错过了什么?

【问题讨论】:

    标签: deployment openshift redhat


    【解决方案1】:

    您记录的行为是部署推出的预期行为(当新 pod 准备好时,OpenShift 将关闭每个旧 pod)。当新节点可用时,它还将开始将流量路由到新节点,您说您也不想这样做。

    根据定义,服务几乎可以路由到可用的 pod。部署几乎独立处理 pod,所以我不相信任何东西都能真正为您提供您正在寻找的行为。

    如果您想要像您描述的那样蓝绿色风格的部署,您实际上是将新的 pod 部署为单独的部署。然后,一旦新部署完全启动,您就可以将相应的服务更改为指向新的 pod。然后您可以关闭旧部署。

    Service Mesh 可以提供一些帮助。操作员也可以。或者您可以手动完成。

    【讨论】:

      【解决方案2】:

      您可以将推出策略与带有初始延迟的就绪性检查相结合,以确保所有新 Pod 有时间在旧 Pod 同时全部关闭之前启动。

      在下面的例子中,新的 3 个 Pod 将旋转起来(总共 6 个 Pod),然后在 60 秒后进行就绪检查,旧的 Pod 将被关闭。您只想将准备就绪延迟调整到足够大的时间范围,以便让所有新 pod 有时间启动。

      apiVersion: v1
      kind: DeploymentConfig
      spec:
        replicas: 3
        strategy:
          rollingParams:
            maxSurge: 3
            maxUnavailable: 0
          type: Rolling
        template:
          spec:
            containers:
              - readinessProbe:
                  httpGet:
                    path: /actuator/health/readiness
                    port: 8099
                  initialDelaySeconds: 60
      

      【讨论】:

        猜你喜欢
        • 2020-02-12
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        • 2022-01-27
        • 1970-01-01
        • 2016-11-15
        • 2019-01-07
        • 1970-01-01
        相关资源
        最近更新 更多