本任务演示如何扩缩 StatefulSet。扩缩 StatefulSet 是指增加或减少副本的数量。
StatefulSet 仅在 Kubernetes 1.5 或更高版本中可用。要检查你的 Kubernetes 版本,请运行 kubectl version。
并非所有的有状态应用都能很好地进行扩缩。如果你不确定是否要扩缩你的 StatefulSet,请参阅 StatefulSet 概念 或 StatefulSet 教程 以获取更多信息。
你应仅在确认有状态应用集群完全健康的情况下执行扩缩操作。
首先,找到要扩缩的 StatefulSet。
kubectl get statefulsets <stateful-set-name>
更改 StatefulSet 的副本数量
kubectl scale statefulsets <stateful-set-name> --replicas=<new-replicas>
或者,你可以对 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 可能再次变得可用,那么瞬态错误可能会干扰你的扩容或缩容操作。一些分布式数据库在节点同时加入和离开时会出现问题。在这种情况下,最好在应用层面考虑扩缩操作,并仅在确定有状态应用集群完全健康时才执行扩缩。