擴縮 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)