为什么 Openshift 在滚动部署之前扩展旧部署
Why does Openshift scale up old deployment before rolling deployment
在我的团队中,我们有时会在 Openshift 中缩减到只有一个 pod,以使测试更容易。如果我们随后将所需副本数设置为 2 进行滚动更新,则 Openshift 在执行滚动部署之前会扩展到两个 pods。这很麻烦,因为新的“旧”pod 可以启动我们不希望在新部署开始之前启动的东西,所以我们必须记住在新部署之前取下一个 pod。
在新部署扩展到所需的副本数时,是否有办法阻止旧部署扩展到所需的副本数?还有,为什么会这样?
- OpenShift 大师:
v3.11.200
- Kubernetes 大师:
v1.11.0+d4cacc0
- OpenShift Web 控制台:
3.11.200-1-8a53b1d
来自我们的 Openshift 模板:
- apiVersion: v1
kind: DeploymentConfig
spec:
replicas: 2
strategy:
type: Rolling
这是使用 RollingUpdate
策略时的预期行为。它一个一个地移除旧的pods,同时添加新的,保持应用程序在整个过程中可用,并确保其处理请求的能力不下降。由于您只有一个 pod,因此 Kubernetes 会扩展部署以保持清单中要求的策略和 zero-downtime
。
它放大到 2,因为如果没有指定 maxSurge
默认为 25%。这意味着在更新期间最多可以有比所需数量多 25% 的 pod 实例。
如果您想确保不会缩放,您可以将策略更改为 Recreate
。这将导致在创建新的 pods 之前删除所有旧的 pods 。当您的应用程序不支持 运行 多个版本并行并且需要在新版本启动之前完全停止旧版本时使用此策略。但请注意,此策略确实涉及您的应用程序完全不可用的短时间。
这是关于部署的好document that describes rolling update strategy. It is worth also checking official kubernetes documentation。
在我的团队中,我们有时会在 Openshift 中缩减到只有一个 pod,以使测试更容易。如果我们随后将所需副本数设置为 2 进行滚动更新,则 Openshift 在执行滚动部署之前会扩展到两个 pods。这很麻烦,因为新的“旧”pod 可以启动我们不希望在新部署开始之前启动的东西,所以我们必须记住在新部署之前取下一个 pod。
在新部署扩展到所需的副本数时,是否有办法阻止旧部署扩展到所需的副本数?还有,为什么会这样?
- OpenShift 大师: v3.11.200
- Kubernetes 大师: v1.11.0+d4cacc0
- OpenShift Web 控制台: 3.11.200-1-8a53b1d
来自我们的 Openshift 模板:
- apiVersion: v1
kind: DeploymentConfig
spec:
replicas: 2
strategy:
type: Rolling
这是使用 RollingUpdate
策略时的预期行为。它一个一个地移除旧的pods,同时添加新的,保持应用程序在整个过程中可用,并确保其处理请求的能力不下降。由于您只有一个 pod,因此 Kubernetes 会扩展部署以保持清单中要求的策略和 zero-downtime
。
它放大到 2,因为如果没有指定 maxSurge
默认为 25%。这意味着在更新期间最多可以有比所需数量多 25% 的 pod 实例。
如果您想确保不会缩放,您可以将策略更改为 Recreate
。这将导致在创建新的 pods 之前删除所有旧的 pods 。当您的应用程序不支持 运行 多个版本并行并且需要在新版本启动之前完全停止旧版本时使用此策略。但请注意,此策略确实涉及您的应用程序完全不可用的短时间。
这是关于部署的好document that describes rolling update strategy. It is worth also checking official kubernetes documentation。