【问题标题】:Strategy Replace for StatefulSetStatefulSet 的策略替换
【发布时间】:2020-11-25 23:45:41
【问题描述】:

我的开发环境和 CI 上的 StatefulSet 更新存在简单问题。

我想在不先使用 Kubectl delete 的情况下立即替换所有 StatefulSet 副本。 是否可以将清单更改为策略:替换为 Deployments 并继续使用 kubectl apply ...

【问题讨论】:

  • 你指的是更新策略吗?

标签: kubernetes statefulset


【解决方案1】:

目前StatefulSets只支持两种update strategies

  • RollingUpdateRollingUpdate 更新策略实现了 StatefulSet 中 Pod 的自动滚动更新。当.spec.updateStrategy 未指定时,这是默认策略。当 StatefulSet 的 .spec.updateStrategy.type 设置为 RollingUpdate 时,StatefulSet 控制器将删除并重新创建 StatefulSet 中的每个 Pod。它将按照与 Pod 终止相同的顺序(从最大的序数到最小的序数)进行,一次更新每个 Pod。它会等到更新的 Pod 正在运行并准备就绪,然后再更新其前身。

  • OnDeleteOnDelete 更新策略实现了旧版(1.6 和更早版本)行为。当 StatefulSet 的 .spec.updateStrategy.type 设置为 OnDelete 时,StatefulSet 控制器不会自动更新 StatefulSet 中的 Pod。用户必须手动删除 Pod 以使控制器创建反映对 StatefulSet 的 .spec.template 所做修改的新 Pod。

但是,有计划实施MaxUnavailable Rolling Update to StatefulSet。它将允许您基于maxUnavailble 策略一起更新 X 个副本。它导致了这个update proposal,但它还没有完成,从最新的 cmets 来看,它应该被设置为 Kubernetes 1.20 的里程碑。

【讨论】:

  • @user3077014 它回答你的问题了吗?
  • 如果使用“kubectl rollout restart sts/mysts -n mynamespace”重新启动 Pod 时,Statefulsets 的 RollingUpdate 策略可能会导致停机?我可以看到官方文档说滚动更新将是零停机时间,但它提供了部署示例。不是有状态的。 kubernetes.io/docs/tutorials/kubernetes-basics/update/…有人能帮帮我吗?
猜你喜欢
  • 2019-04-23
  • 2022-08-20
  • 2016-11-29
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 2011-11-04
相关资源
最近更新 更多