伸缩 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 可能再次可用,则瞬时错误可能会干扰你的扩容或缩容操作。当节点同时加入和离开时,某些分布式数据库会出现问题。在这些情况下,最好在应用程序级别上考虑扩缩操作,并且仅在确信你的有状态应用程序集群完全健康时才执行扩缩。
下一步
- 了解有关删除 StatefulSet的更多信息。