StatefulSet 更新:重新创建然后删除 pods
StatefulSet update: recreate THEN delete pods
Kubernetes StatefulSet RollingUpdate
strategy 按顺序删除和重新创建每个 Pod。我有兴趣通过重新创建 pod 然后 逐个删除旧 Pod(注意反转)来更新 StatefulSet。
这对我来说很有趣,因为:
- 就绪人数没有减少Pods。我知道这也是正常部署更新的工作方式(即,只有在替换它的新 Pod 就绪后,Pod 才会被删除)。
- 更重要的是,它允许我在 StatefulSet 升级期间执行特定于应用程序的实时迁移。我想在
(old) pod-i
终止之前将数据从 (old) pod-i
“迁移”到 (new) pod-i
(我将在 (new) pod-i
准备逻辑中实现)。
这样的更新策略可行吗?
不,因为 pods 根据其序号(-0
、-1
等)有特定的名称,并且一次只能有一个 pod 具有给定的名称。 Deployments 和 DaemonSets 可能会突发更新,因为它们的名称是随机的,所以无论您按什么顺序做事都没有关系。
对于 Deployments 这在本质上是可能的,但 StatefulSets 则不行。当您非常关心具有众所周知名称的副本的确切数量时,可以使用 StatefulSets。部署用于更具弹性的工作负载。
您也许可以通过使用多个 StatefulSet 来实现您的目标 - 例如代替 3 个副本的 StatefulSet,使用 3 个 StatefulSet,每个 1 个副本。然后在删除之前的其中一个之前为您的数据迁移部署一个额外的 StatefulSet。
或者,这可能是 Operator 管理应用程序的用例。
Kubernetes StatefulSet RollingUpdate
strategy 按顺序删除和重新创建每个 Pod。我有兴趣通过重新创建 pod 然后 逐个删除旧 Pod(注意反转)来更新 StatefulSet。
这对我来说很有趣,因为:
- 就绪人数没有减少Pods。我知道这也是正常部署更新的工作方式(即,只有在替换它的新 Pod 就绪后,Pod 才会被删除)。
- 更重要的是,它允许我在 StatefulSet 升级期间执行特定于应用程序的实时迁移。我想在
(old) pod-i
终止之前将数据从(old) pod-i
“迁移”到(new) pod-i
(我将在(new) pod-i
准备逻辑中实现)。
这样的更新策略可行吗?
不,因为 pods 根据其序号(-0
、-1
等)有特定的名称,并且一次只能有一个 pod 具有给定的名称。 Deployments 和 DaemonSets 可能会突发更新,因为它们的名称是随机的,所以无论您按什么顺序做事都没有关系。
对于 Deployments 这在本质上是可能的,但 StatefulSets 则不行。当您非常关心具有众所周知名称的副本的确切数量时,可以使用 StatefulSets。部署用于更具弹性的工作负载。
您也许可以通过使用多个 StatefulSet 来实现您的目标 - 例如代替 3 个副本的 StatefulSet,使用 3 个 StatefulSet,每个 1 个副本。然后在删除之前的其中一个之前为您的数据迁移部署一个额外的 StatefulSet。
或者,这可能是 Operator 管理应用程序的用例。