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

Kubernetes 1.25:兩個用於應用釋出的特性進階至穩定版

本部落格描述了 SIG Apps 很高興在 Kubernetes 1.25 中釋出為穩定版的兩個特性,即 StatefulSets 的 minReadySeconds 和 DaemonSets 的 maxSurge

當在 .spec.updateStrategy 欄位中使用 RollingUpdate 值時,指定 minReadySeconds 可以透過為每個 Pod 等待所需時間來減慢 StatefulSet 的釋出速度。這段時間可用於初始化 Pod(例如,預熱快取)或作為確認 Pod 之前的延遲。

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

這些特性已經在 Deployment 和其他工作負載中可用。這次升級有助於在所有工作負載中統一此功能。

這些特性解決了什麼問題?

StatefulSets 的 minReadySeconds

minReadySeconds 確保 StatefulSet 工作負載在報告 Pod 為 Available(可用)之前,已經 Ready(就緒)了給定的秒數。ReadyAvailable 的概念對於工作負載非常重要。例如,某些工作負載,如具有多個 Alertmanager 例項的 Prometheus,只有在 Alertmanager 的狀態轉移完成後才應被視為 AvailableminReadySeconds 在使用雲提供商的負載均衡器時也很有幫助。由於 Pod 應 Ready 給定的秒數,它提供了緩衝時間,以防止在新 Pod 出現之前殺死輪換中的 Pod。

DaemonSets 的 maxSurge

像 CNI、CSI 這樣的 Kubernetes 系統級元件通常作為 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_name> -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 與我們聯絡。