本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes 中的 PersistentVolume Last Phase Transition Time
在最近的 Kubernetes v1.28 版本中,我們(SIG Storage)引入了一個新的 Alpha 特性,旨在改進 PersistentVolume (PV) 儲存管理,並幫助叢集管理員更好地瞭解 PV 的生命週期。透過在 PV 的狀態中新增 lastPhaseTransitionTime
欄位,叢集管理員現在能夠跟蹤 PV 最後一次轉換到不同階段(phase)的時間,從而實現更高效、更明智的資源管理。
我們為什麼需要新的 PV 欄位?
Kubernetes 中的 PersistentVolume 在為叢集中執行的工作負載提供儲存資源方面扮演著至關重要的角色。然而,有效地管理這些 PV 可能具有挑戰性,尤其是在確定 PV 最後一次在不同階段之間轉換的時間,例如 Pending
、Bound
或 Released
。管理員通常需要知道 PV 上次被使用或轉換到某個階段的時間;例如,為了實施保留策略、執行清理或監控儲存健康狀況。
過去,Kubernetes 使用者在使用 Delete
回收策略時曾遇到資料丟失問題,不得不求助於更安全的 Retain
策略。當我們計劃引入新的 lastPhaseTransitionTime
欄位時,我們希望提供一個更通用的解決方案,可以用於各種用例,包括根據捲上次使用的時間進行手動清理,或根據階段轉換時間生成警報。
lastPhaseTransitionTime 如何提供幫助
只要你啟用了該特性門控(參見如何使用),每當 PersistentVolume (PV) 從一個階段轉換到另一個階段時,其新的 .status.lastPhaseTransitionTime
欄位都會更新。無論是從 Pending
轉換到 Bound
,從 Bound
轉換到 Released
,還是任何其他階段轉換,lastPhaseTransitionTime
都會被記錄下來。對於新建立的 PV,其階段將被設定為 Pending
,並且 lastPhaseTransitionTime
也會被記錄下來。
此功能允許叢集管理員
實施保留策略
透過
lastPhaseTransitionTime
,管理員現在可以跟蹤 PV 上次被使用或轉換到Released
階段的時間。這些資訊對於實施保留策略至關重要,以便清理在Released
階段停留了特定時間的資源。例如,現在編寫一個指令碼或策略來刪除所有在Released
階段超過一週的 PV 變得非常簡單。監控儲存健康狀況
透過分析 PV 的階段轉換時間,管理員可以更有效地監控儲存健康狀況。例如,他們可以識別出在
Pending
階段停留時間異常長的 PV,這可能表明儲存供應程式存在潛在問題。
如何使用它
從 Kubernetes v1.28 開始,lastPhaseTransitionTime
欄位處於 Alpha 階段,因此需要啟用 PersistentVolumeLastPhaseTransitionTime
特性門控。
如果你想在 Alpha 階段測試該功能,你需要在 kube-controller-manager
和 kube-apiserver
上啟用此特性門控。
使用 --feature-gates
命令列引數
--feature-gates="...,PersistentVolumeLastPhaseTransitionTime=true"
請記住,啟用該特性不會立即生效;每當 PV 更新並在階段之間轉換時,這個新欄位才會被填充。然後,管理員可以透過 PV 狀態訪問該新欄位,這可以透過標準的 Kubernetes API 呼叫或 Kubernetes 客戶端庫來檢索。
以下是使用 kubectl
命令列工具檢索特定 PV 的 lastPhaseTransitionTime
的示例
kubectl get pv <pv-name> -o jsonpath='{.status.lastPhaseTransitionTime}'
未來展望
此功能最初作為 Alpha 特性引入,受預設停用的特性門控保護。在 Alpha 階段,我們(Kubernetes SIG Storage)將收集終端使用者社群的反饋,並解決任何已發現的問題或改進點。
一旦收到足夠的反饋,或者沒有收到任何投訴,該功能就可以進入 Beta 階段。Beta 階段將使我們能夠進一步驗證實現並確保其穩定性。
在該欄位升級到 Beta 的版本和該欄位升級到正式釋出(GA)的版本之間,至少會間隔兩個 Kubernetes 版本。這意味著該欄位最早可能在 Kubernetes 1.32 版本中正式可用,該版本可能安排在 2025 年初。
參與進來
我們始終歡迎新的貢獻者,所以如果你想參與進來,可以加入我們的Kubernetes 儲存特別興趣小組(SIG)。
如果你想分享反饋,可以在我們的公共 Slack 頻道上進行。如果你還不是該 Slack 工作區的成員,可以訪問 https://slack.k8s.io/ 獲取邀請。
特別感謝所有提供出色審查、分享寶貴見解並幫助實現此功能的貢獻者(按字母順序排列):