如何迁移StatefulSet到不同的节点?

How to migrate StatefulSet to different nodes?

我在 Amazon EKS 中有一个包含 3 个节点的 Kubernetes 集群。它是 StatefulSet 中 Cockroachdb 的 运行 3 pods。现在我想为集群的所有节点使用另一种实例类型。 所以我的计划是这样的:

  1. 向集群添加 1 个新节点,将我的 StatefulSet 中的副本增加到 4,并等待新的 Cockroachdb pod 完全同步。
  2. 退役并停止其中一个旧的 Cockroachdb 节点。
  3. 将 StatefulSet 的副本减少回 3 以摆脱旧的 pods。
  4. 再重复步骤 1-3 两次。

显然,这不起作用,因为 StatefulSet 在缩减时首先删除最近的 pods,所以我的新 pod 而不是旧 pod 被删除。 我想我可以创建一个新的 StatefulSet 并让它使用现有的 PV,但这对我来说似乎不是最佳解决方案。还有其他迁移方法吗?

您可以考虑复制您的 ASG 当前启动模板 -> 升级复制模板的实例类型 -> 将您的 ASG 指向使用此新启动模板 -> 执行 ASG 实例刷新。具有至少 90% 健康百分比的 3 个节点的集群确保一次仅替换 1 个实例。 drained 节点上受影响的 pod 将进入 pending 状态 5~10 分钟,然后重新部署到新节点上。这样你就不需要扩展 StatefulSet un-necessary.