首页 > 解决方案 > 为什么 Openshift 在滚动部署之前扩展旧部署

问题描述

在我的团队中,我们有时会缩减到 Openshift 中的一个 pod,以使测试更容易。如果我们随后将所需的副本数设置为 2 进行滚动更新,Openshift 会在执行滚动部署之前扩展到两个 pod。这很麻烦,因为新的“旧” pod 可以启动我们不希望在新部署开始之前启动的东西,因此我们必须记住在新部署之前取下一个 pod。

有没有办法阻止旧部署扩大到所需的副本数,而新部署扩大到所需的副本数?另外,为什么它会这样工作?

从我们的 Openshift 模板:

- apiVersion: v1
  kind: DeploymentConfig
  spec:
    replicas: 2
    strategy:
      type: Rolling

标签: kubernetesdeploymentopenshift

解决方案


这是使用RollingUpdate策略时的预期行为。它一个一个地移除旧的 Pod,同时添加新的 Pod,使应用程序在整个过程中保持可用,并确保其处理请求的能力不下降。由于您只有一个 pod,Kubernetes 会zero-downtime根据清单中的要求扩展部署以保持策略。

它扩展到 2,因为如果未指定,则maxSurge默认为 25%。这意味着在更新期间,Pod 实例最多可以比所需数量多 25%。

如果您想确保这不会被缩放,您可以将策略更改为Recreate. 这将导致在创建新 Pod 之前删除所有旧 Pod。当您的应用程序不支持并行运行多个版本并且需要在启动新版本之前完全停止旧版本时,请使用此策略。但是请注意,此策略确实涉及您的应用程序完全不可用的短时间内。

这是描述滚动更新策略的好文档。还值得查看有关部署的官方 kubernetes文档。


推荐阅读