扩缩 StatefulSet

此任务展示如何扩缩 StatefulSet。扩缩 StatefulSet 是指增加或减少副本的数量。

准备工作

  • StatefulSet 仅在 Kubernetes 1.5 或更高版本中可用。要检查你的 Kubernetes 版本,请运行 kubectl version

  • 并非所有有状态应用都能很好地进行扩缩。如果你不确定是否扩缩 StatefulSet,请参阅 StatefulSet 概念StatefulSet 教程以获取更多信息。

  • 只有当你确信有状态应用集群完全健康时,才应该执行扩缩操作。

扩缩 StatefulSet

使用 kubectl 扩缩 StatefulSet

首先,找到要扩缩的 StatefulSet。

kubectl get statefulsets <stateful-set-name>

更改 StatefulSet 的副本数量

kubectl scale statefulsets <stateful-set-name> --replicas=<new-replicas>

对 StatefulSet 进行原地更新

或者,你可以对 StatefulSet 进行原地更新

如果你的 StatefulSet 最初是使用 kubectl apply 创建的,请更新 StatefulSet 清单的 .spec.replicas 字段,然后执行 kubectl apply

kubectl apply -f <stateful-set-file-updated>

否则,使用 kubectl edit 编辑该字段

kubectl edit statefulsets <stateful-set-name>

或者使用 kubectl patch

kubectl patch statefulsets <stateful-set-name> -p '{"spec":{"replicas":<new-replicas>}}'

故障排除

缩容不成功

当 StatefulSet 管理的任何有状态 Pod 不健康时,你无法缩减 StatefulSet。缩容只有在这些有状态 Pod 变为运行状态并就绪后才能进行。

如果 spec.replicas > 1,Kubernetes 无法确定 Pod 不健康的原因。这可能是永久性故障或瞬时故障的结果。瞬时故障可能是由于升级或维护所需的重启引起的。

如果 Pod 因永久性故障而导致不健康,则在不纠正故障的情况下进行扩缩可能会导致 StatefulSet 成员数量低于正常运行所需的最低副本数量。这可能会导致你的 StatefulSet 不可用。

如果 Pod 因瞬时故障而导致不健康且 Pod 可能会再次可用,则瞬时错误可能会干扰你的扩容或缩容操作。某些分布式数据库在节点同时加入和离开时会出现问题。在这种情况下,最好在应用层面考虑扩缩操作,并且只有当你确信有状态应用集群完全健康时才执行扩缩。

下一步

上次修改时间:2023 年 3 月 14 日太平洋标准时间晚上 8:12:调整 run-application 中的行换行 (8b527bab7e)