【问题标题】:StatefulSet update: recreate THEN delete podsStatefulSet 更新:重新创建 THEN 删除 pod
【发布时间】:2021-08-27 22:24:43
【问题描述】:
Kubernetes StatefulSet RollingUpdate strategy 按顺序删除和重新创建每个 Pod。我有兴趣通过重新创建一个 pod 然后逐个删除旧的 Pod(注意反转)来更新 StatefulSet。
这对我来说很有趣,因为:
- Ready Pod 的数量没有减少。我理解这也是普通部署更新的工作方式(即,仅在替换它的新 Pod 就绪后才删除 Pod)。
- 更重要的是,它允许我在 StatefulSet 升级期间执行特定于应用程序的实时迁移。我想在
(old) pod-i 终止之前将数据从(old) pod-i“迁移”到(new) pod-i(我将在(new) pod-i 就绪逻辑中实现这一点)。
这样的更新策略可行吗?
【问题讨论】:
标签:
kubernetes
kubernetes-statefulset
【解决方案1】:
这在 Deployment 中是可以实现的,但 StatefulSet 则不行。当您非常关心具有众所周知名称的副本的确切数量时,可以使用 StatefulSet。部署用于更具弹性的工作负载。
您可以通过使用多个 StatefulSet 来实现您的目标 - 例如而不是 3 个副本的 StatefulSet,而是使用 3 个 StatefulSet,每个副本 1 个。然后为您的数据迁移部署一个额外的 StatefulSet,然后再删除之前的一个。
或者,这可能是Operator 管理应用程序的用例。
【解决方案2】:
不可以,因为 pod 具有基于其序号的特定名称(-0、-1 等),并且一次只能有一个具有给定名称的 pod。 Deployments 和 DaemonSets 可能会因更新而爆发,因为它们的名称是随机的,因此无论您以什么顺序执行操作都无关紧要。