Kubernetes 擴縮StatefulSet

2022-06-15 09:02 更新

擴縮 StatefulSet

本文介紹如何擴縮StatefulSet。StatefulSet 的擴縮指的是增加或者減少副本個數(shù)。

在開始之前

  • StatefulSets 僅適用于 Kubernetes 1.5 及以上版本。
  • 不是所有 Stateful 應(yīng)用都能很好地執(zhí)行擴縮操作。 
  • 僅當(dāng)你確定你的有狀態(tài)應(yīng)用的集群是完全健康的,才可執(zhí)行擴縮操作。

使用 kubectl 擴縮 StatefulSet

首先,找到你要擴縮的 StatefulSet。

kubectl get statefulsets <statefulset 名稱>

更改 StatefulSet 中副本個數(shù):

kubectl scale statefulsets <statefulset 名稱> --replicas=<新的副本數(shù)>

對 StatefulSet 執(zhí)行就地更新

另外, 你可以就地更新 StatefulSet。

如果你的 StatefulSet 最初通過 ?kubectl apply? 或 ?kubectl create --save-config? 創(chuàng)建, 你可以更新 StatefulSet 清單中的 ?.spec.replicas?, 然后執(zhí)行命令 ?kubectl apply?:

kubectl apply -f <更新后的 statefulset 文件>

否則,可以使用 ?kubectl edit? 編輯副本字段:

kubectl edit statefulsets <statefulset 名稱>

或者使用 ?kubectl patch?:

kubectl patch statefulsets <statefulset 名稱> -p '{"spec":{"replicas":<new-replicas>}}'

故障排查 

縮容操作無法正常工作

當(dāng) Stateful 所管理的任何 Pod 不健康時,你不能對該 StatefulSet 執(zhí)行縮容操作。 僅當(dāng) StatefulSet 的所有 Pod 都處于運行狀態(tài)和 Ready 狀況后才可縮容.

如果 ?spec.replicas? 大于 1,Kubernetes 無法判定 Pod 不健康的原因。 Pod 不健康可能是由于永久性故障造成也可能是瞬態(tài)故障。 瞬態(tài)故障可能是節(jié)點升級或維護而引起的節(jié)點重啟造成的。

如果該 Pod 不健康是由于永久性故障導(dǎo)致, 則在不糾正該故障的情況下進行縮容可能會導(dǎo)致 StatefulSet 進入一種狀態(tài),其成員 Pod 數(shù)量低于應(yīng)正常運行的副本數(shù)。 這種狀態(tài)也許會導(dǎo)致 StatefulSet 不可用。

如果由于瞬態(tài)故障而導(dǎo)致 Pod 不健康并且 Pod 可能再次變?yōu)榭捎?,那么瞬態(tài)錯誤可能會干擾 你對 StatefulSet 的擴容/縮容操作。 一些分布式數(shù)據(jù)庫在同時有節(jié)點加入和離開時 會遇到問題。在這些情況下,最好是在應(yīng)用級別進行分析擴縮操作的狀態(tài), 并且只有在確保 Stateful 應(yīng)用的集群是完全健康時才執(zhí)行擴縮操作。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號