Kubernetes 1.33:卷填充器(Volume Populators)進階至 GA

Kubernetes 卷填充器(volume populators) 現已正式釋出(GA)!AnyVolumeDataSource 特性門控在 Kubernetes v1.33 中被視為始終啟用,這意味著使用者可以將任何合適的 自定義資源 指定為 PersistentVolumeClaim (PVC) 的資料來源。

在 PVC 中使用 dataSourceRef 的示例

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
spec:
  ...
  dataSourceRef:
    apiGroup: provider.example.com
    kind: Provider
    name: provider1

新特性

與 Beta 版本相比,有四大主要增強功能。

填充器 Pod 是可選的

在 Beta 階段,Kubernetes 的貢獻者們發現,在卷填充過程中刪除 PersistentVolumeClaim (PVC) 時可能會出現資源洩漏問題;這些洩漏是由於 Finalizer 處理的限制造成的。在升級到正式版之前,Kubernetes 專案增加了對刪除臨時資源(如 PVC Prime 等)的支援,前提是原始 PVC 已被刪除。

為了實現這一點,我們引入了三個新的基於外掛的函式

  • PopulateFn(): 執行特定於供應程式的資料填充邏輯。
  • PopulateCompleteFn(): 檢查資料填充操作是否已成功完成。
  • PopulateCleanupFn(): 在資料填充完成後,清理由特定於供應程式的函式建立的臨時資源。

lib-volume-populator/example 中添加了一個供應程式示例。

用於修改 Kubernetes 資源的 Mutator 函式

對於正式版,CSI 卷填充器控制器程式碼增加了一個 MutatorConfig,允許指定用於修改 Kubernetes 資源的 Mutator 函式。例如,如果 PVC Prime 不是 PVC 的精確副本,並且你需要驅動程式的特定於供應程式的資訊,你可以將這些資訊包含在可選的 MutatorConfig 中。這使你可以在卷填充器中自定義 Kubernetes 物件。

為供應程式提供靈活的度量標準處理

我們的 Beta 階段凸顯了一個新需求:不僅需要聚合來自 lib-volume-populator 的度量標準,還需要聚合來自供應程式程式碼庫中其他元件的度量標準。

為解決此問題,SIG Storage 引入了供應程式度量標準管理器。這一增強功能將度量標準邏輯的實現委託給供應程式本身,而不是完全依賴 lib-volume-populator。這種轉變在度量標準收集和聚合方面提供了更大的靈活性和控制力,從而能夠更全面地瞭解供應程式效能。

清理臨時資源

在 Beta 階段,我們發現在卷填充過程中刪除 PersistentVolumeClaim (PVC) 時,由於 Finalizer 處理的限制,可能會出現資源洩漏。在此次正式版釋出中,我們改進了填充器,以支援在原始 PVC 被刪除時刪除臨時資源(如 PVC Prime 等)。

如何使用它

要試用此功能,請按照之前 Beta 版部落格中的步驟進行操作。

未來方向和潛在功能請求

下一步,卷填充器有幾個潛在的功能請求

  • 多次同步:當前實現是從源到目標的一次性單向同步。這可以擴充套件為支援多次同步,從而實現定期同步或允許使用者按需同步。
  • 雙向同步:這是上述多次同步的擴充套件,但在源和目標之間實現雙向同步。
  • 按優先順序填充資料:透過一個包含不同 dataSourceRef 的列表,根據優先順序進行填充。
  • 從同一供應程式的多個源填充資料:將多個不同的源填充到一個目標。
  • 從不同供應程式的多個源填充資料:將多個不同的源填充到一個目標,實現不同資源的填充流水線。

為確保我們構建的功能真正有價值,Kubernetes SIG Storage 希望瞭解你對該功能有任何特定的用例。如有任何關於卷填充器的查詢或具體問題,請聯絡 SIG Storage 社群