StatefulSet 的策略替换

use*_*014 3 kubernetes statefulset

我的开发环境和 CI 上的 StatefulSet 更新有一个简单的问题。

我想立即替换所有 StatefulSet 副本,而不先使用 Kubectl delete。是否可以将清单更改为策略:替换为部署中的内容并继续使用 kubectl apply ...

OhH*_*ark 5

目前StatefulSet仅支持两种更新策略

  • 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 的修改的新 Pod .spec.template

但是,有计划对 StatefulSet 实施 MaxUnavailable 滚动更新。它将允许您根据maxUnavailble策略一起更新 X 个副本。它导致了这个更新提案,但尚未完成,从最新评论来看,它应该被设置为 Kubernetes 1.20 的里程碑。