扩展 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 的更多信息。