本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

Kubernetes 1.25:兩項應用程式發布功能升級為穩定版

本部落格說明 SIG Apps 很高興在 Kubernetes 1.25 中升級至穩定的兩項功能,即 StatefulSets 的 minReadySeconds 和 DaemonSets 的 maxSurge

當在 .spec.updateStrategy 欄位中使用 RollingUpdate 值時,指定 minReadySeconds 會減慢 StatefulSet 的推出速度,方法是等待每個 pod 達到所需的時間。此時間可用於初始化 pod(例如,預熱快取)或作為確認 pod 之前的延遲。

當在 .spec.updateStrategy 欄位中使用 RollingUpdate 值時,maxSurge 允許 DaemonSet 工作負載在推出期間於節點上執行同一 pod 的多個執行個體。這有助於最大限度地減少 DaemonSet 對消費者的停機時間。

這些功能已在 Deployment 和其他工作負載中提供。此升級有助於使此功能在工作負載之間保持一致。

這些功能解決了哪些問題?

StatefulSets 的 minReadySeconds

minReadySeconds 確保 StatefulSet 工作負載在報告 pod 為 Available 之前,Ready 狀態維持給定的秒數。ReadyAvailable 的概念對於工作負載非常重要。例如,某些工作負載(例如,具有多個 Alertmanager 執行個體的 Prometheus)只有在 Alertmanager 的狀態傳輸完成時才應被視為 Available。當搭配雲端供應商的負載平衡器使用時,minReadySeconds 也很有幫助。由於 pod 應在給定的秒數內處於 Ready 狀態,因此它提供了緩衝時間,以防止在新 pod 出現之前輪流終止 pod。

DaemonSets 的 maxSurge

Kubernetes 系統級元件(如 CNI、CSI)通常作為 DaemonSet 執行。如果這些 DaemonSet 在升級期間短暫停機,這些元件可能會影響工作負載的可用性。此功能允許 DaemonSet pod 暫時增加其數量,從而確保 DaemonSet 的零停機時間。

請注意,不允許在 DaemonSet 中將 hostPortmaxSurge 結合使用,因為 DaemonSet pod 繫結至單一節點,而兩個作用中的 pod 無法在同一節點上共用相同的埠。

它是如何運作的?

StatefulSets 的 minReadySeconds

StatefulSet 控制器監看 StatefulSet pod,並計算特定 pod 處於 Running 狀態的時間長度,如果此值大於或等於 StatefulSet 的 .spec.minReadySeconds 欄位中指定的時間,則 StatefulSet 控制器會更新 StatefulSet 狀態中的 AvailableReplicas 欄位。

DaemonSets 的 maxSurge

DaemonSet 控制器會根據 .spec.strategy.rollingUpdate.maxSurge 中給定的值,建立額外的 pod(超出 DaemonSet 規格產生的所需數量)。額外的 pod 將在舊 DaemonSet pod 執行的同一節點上執行,直到舊 pod 被終止。

  • 預設值為 0。
  • MaxUnavailable 為 0 時,該值不能為 0
  • 該值可以指定為 pod 的絕對數量,也可以指定為所需 pod 的百分比(向上取整)。

我該如何使用它?

StatefulSets 的 minReadySeconds

為任何 StatefulSet 指定 minReadySeconds 的值,並透過檢查 AvailableReplicas 欄位來檢查 pod 是否可用,使用

kubectl get statefulset/<statefulset 名稱> -o yaml

請注意,minReadySeconds 的預設值為 0。

DaemonSets 的 maxSurge

.spec.updateStrategy.rollingUpdate.maxSurge 指定值,並將 .spec.updateStrategy.rollingUpdate.maxUnavailable 設定為 0

然後觀察更快的推出速度,以及在下一次推出中同時執行的更多 pod。

kubectl rollout restart daemonset <name_of_the_daemonset>
kubectl get pods -w

我如何能瞭解更多資訊?

StatefulSets 的 minReadySeconds

DaemonSets 的 maxSurge

我該如何參與?

請透過 Slack 上的 #sig-apps 頻道或 SIG Apps 郵寄清單 kubernetes-sig-apps@googlegroups.com 與我們聯絡。