扩缩 StatefulSet

此任务演示如何扩展有状态副本集。扩展有状态副本集是指增加或减少副本数量。

开始之前

  • 有状态副本集仅在 Kubernetes 1.5 或更高版本中可用。要检查您的 Kubernetes 版本,请运行 kubectl version

  • 并非所有有状态应用程序都能很好地扩展。如果您不确定是否应该扩展您的有状态副本集,请参阅 有状态副本集概念有状态副本集教程 以获取更多信息。

  • 您应该仅在确信您的有状态应用程序集群完全健康时才执行扩展操作。

扩展有状态副本集

使用 kubectl 扩展有状态副本集

首先,找到您要扩展的有状态副本集。

kubectl get statefulsets <stateful-set-name>

更改有状态副本集的副本数量

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

对您的有状态副本集进行原地更新

或者,您可以对您的有状态副本集进行 原地更新

如果您的有状态副本集最初是使用 kubectl apply 创建的,请更新有状态副本集清单的 .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>}}'

故障排除

缩小规模不起作用

当它管理的任何有状态 Pod 处于不健康状态时,您无法缩小有状态副本集。只有在这些有状态 Pod 变为运行和就绪后,缩小规模才会发生。

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

如果 Pod 由于永久性故障而不健康,则在未纠正故障的情况下进行扩展可能会导致有状态副本集成员数低于正确运行所需的某个最小值。这可能会导致您的有状态副本集不可用。

如果 Pod 由于瞬态性故障而不健康,并且 Pod 可能会再次可用,则瞬态性错误可能会干扰您的扩展或缩小规模操作。一些分布式数据库在节点同时加入和离开时会出现问题。在这种情况下,最好在应用程序级别考虑扩展操作,并且仅在确信您的有状态应用程序集群完全健康时才执行扩展。

接下来

上次修改时间为 2023 年 3 月 14 日下午 8:12 PST:调整 run-application 中的行换行 (8b527bab7e)