StatefulSet 更新:重新创建 THEN 删除 pod

问题描述

Kubernetes StatefulSet RollingUpdate strategy 按顺序删除并重新创建每个 Pod。我有兴趣通过重新创建一个 Pod 然后删除旧的 Pod(注意反转)来更新 StatefulSet,一个一个

这对我来说很有趣,因为:

  1. Ready Pod 的数量没有减少。我了解这也是正常部署更新的工作方式(即,仅在替换它的新 Pod 就绪后才会删除 Pod)。
  2. 更重要的是,它允许我在 StatefulSet 升级期间执行特定于应用程序的实时迁移。我想在 (old) pod-i 终止之前将数据从 (new) pod-i“迁移”到 (old) pod-i(我将在 (new) pod-i 就绪逻辑中实现这一点)。

这样的更新策略可行吗?

解决方法

这对于部署本身是可行的,但不是 StatefulSet。当您非常关心具有众所周知名称的副本的确切数量时,将使用 StatefulSet。部署用于更具弹性的工作负载。

你可以通过使用多个 StatefulSets 来实现你的目标——例如而不是 3 个副本的 StatefulSet,使用 3 个 StatefulSet,每个 1 个副本。然后在删除之前的一个之前为您的数据迁移部署一个额外的 StatefulSet。

或者,这可能是 Operator 管理应用程序的用例。

,

不可以,因为 Pod 具有基于其序数的特定名称(-0-1 等),并且一次只能有一个具有给定名称的 Pod。 Deployments 和 DaemonSets 可以突发更新,因为它们的名字是随机的,所以你做事的顺序无关紧要。