Files
notes_estom/kubenets/04-4.StatefulSet.md
yinkanglong 37b228c3c2 博客系统
2024-01-07 21:39:29 +08:00

1.9 KiB
Raw Blame History

在 Kubernetes 1.7 及之后的版本中,可以为 StatefulSet 设定 .spec.updateStrategy 字段,以便您可以在改变 StatefulSet 中 Pod 的某些字段时container/labels/resource request/resource limit/annotation等禁用滚动更新。

On Delete OnDelete 策略实现了 StatefulSet 的遗留版本kuberentes 1.6及以前的版本)的行为。如果 StatefulSet 的 .spec.updateStrategy.type 字段被设置为 OnDelete当您修改 .spec.template 的内容时StatefulSet Controller 将不会自动更新其 Pod。您必须手工删除 Pod此时 StatefulSet Controller 在重新创建 Pod 时,使用修改过的 .spec.template 的内容创建新 Pod。

Rolling Updates .spec.updateStrategy.type 字段的默认值是 RollingUpdate该策略为 StatefulSet 实现了 Pod 的自动滚动更新。在用户更新 StatefulSet 的 .spec.tempalte 字段时StatefulSet Controller 将自动地删除并重建 StatefulSet 中的每一个 Pod。处理顺序如下

从序号最大的 Pod 开始,逐个删除和更新每一个 Pod直到序号最小的 Pod 被更新

当正在更新的 Pod 达到了 Running 和 Ready 的状态之后,才继续更新其前序 Pod

Partitions

通过指定 .spec.updateStrategy.rollingUpdate.partition 字段可以分片partitioned执行RollingUpdate 更新策略。当更新 StatefulSet 的 .spec.template 时:

序号大于或等于 .spec.updateStrategy.rollingUpdate.partition 的 Pod 将被删除重建 序号小于 .spec.updateStrategy.rollingUpdate.partition 的 Pod 将不会更新,及时手工删除该 Podkubernetes 也会使用前一个版本的 .spec.template 重建该 Pod 如果 .spec.updateStrategy.rollingUpdate.partition 大于 .spec.replicas更新 .spec.tempalte 将不会影响到任何 Pod TIP

大部分情况下,您不需要使用 .spec.updateStrategy.rollingUpdate.partition除非您碰到如下场景

执行预发布 执行金丝雀更新 执行按阶段的更新