Kubernetes 1.29:用於 Volume 修改的 VolumeAttributesClass

Kubernetes v1.29 版本推出了一項 Alpha 功能,以支援透過變更為 PersistentVolumeClaim (PVC) 指定的 volumeAttributesClassName 來修改卷。啟用此功能後,Kubernetes 可以處理容量以外的卷屬性更新。允許變更卷屬性而無需直接透過不同供應商的 API 進行管理,簡化了目前的流程。

您可以在 Kubernetes 文件中閱讀 VolumeAttributesClass 的使用詳情,或者繼續閱讀以了解 Kubernetes 專案為何支援此功能。

VolumeAttributesClass

新的 storage.k8s.io/v1alpha1 API 群組提供兩種新類型

VolumeAttributesClass

代表 CSI 驅動程式定義的可變卷屬性規格。此類別可以在 PersistentVolumeClaims 的動態佈建期間指定,並在佈建後於 PersistentVolumeClaim 規格中變更。

ModifyVolumeStatus

代表 ControllerModifyVolume 操作的狀態物件。

啟用此 Alpha 功能後,PersistentVolumeClaim 的規格定義了 PVC 中使用的 VolumeAttributesClassName。在卷佈建時,CreateVolume 操作將套用 VolumeAttributesClass 中的參數以及 StorageClass 中的參數。

當 PVC 規格中的 volumeAttributesClassName 發生變更時,external-resizer sidecar 將收到一個 informer 事件。根據目前的組態狀態,resizer 將觸發 CSI ControllerModifyVolume。更多詳細資訊請參閱 KEP-3751

如何使用

如果您想在功能處於 Alpha 階段時進行測試,您需要在 kube-controller-managerkube-apiserver 中啟用相關的功能閘道。使用 --feature-gates 命令列引數。

--feature-gates="...,VolumeAttributesClass=true"

這也要求 CSI 驅動程式已實作 ModifyVolume API。

使用者流程

如果您想查看功能實際運作情況並驗證其在您的叢集中運作良好,您可以嘗試以下操作

  1. 定義 StorageClass 和 VolumeAttributesClass

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-sc-example
    provisioner: pd.csi.storage.gke.io
    parameters:
      type: "hyperdisk-balanced"
    volumeBindingMode: WaitForFirstConsumer
    
    apiVersion: storage.k8s.io/v1alpha1
    kind: VolumeAttributesClass
    metadata:
      name: silver
    driverName: pd.csi.storage.gke.io
    parameters:
      provisioned-iops: "3000"
      provisioned-throughput: "50"
    
  2. 定義並建立 PersistentVolumeClaim

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pv-claim
    spec:
      storageClassName: csi-sc-example
      volumeAttributesClassName: silver
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 64Gi
    
  3. 驗證 PersistentVolumeClaim 現在已使用以下項目正確佈建

    kubectl get pvc
    
  4. 建立新的 VolumeAttributesClass gold

    apiVersion: storage.k8s.io/v1alpha1
    kind: VolumeAttributesClass
    metadata:
      name: gold
    driverName: pd.csi.storage.gke.io
    parameters:
      iops: "4000"
      throughput: "60"
    
  5. 使用新的 VolumeAttributesClass 更新 PVC 並套用

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pv-claim
    spec:
      storageClassName: csi-sc-example
      volumeAttributesClassName: gold
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 64Gi
    
  6. 驗證 PersistentVolumeClaims 是否具有使用以下項目更新的 VolumeAttributesClass 參數

    kubectl describe pvc <PVC_NAME>
    

後續步驟

  • 請參閱 VolumeAttributesClass KEP 以取得有關設計的更多資訊
  • 您可以檢視或評論 VolumeAttributesClass 的 專案看板
  • 為了將此功能推向 Beta 階段,我們需要社群的回饋,因此這裡有一個行動號召:為 CSI 驅動程式新增支援、試用此功能、考慮它如何幫助解決您的使用者遇到的問題…

參與其中

我們隨時歡迎新的貢獻者。因此,如果您想參與其中,您可以加入我們的 Kubernetes 儲存特別興趣小組 (SIG)。

如果您想分享回饋,您可以在我們的 公開 Slack 頻道 上進行。

特別感謝所有提供出色評論、分享寶貴見解並協助實作此功能的貢獻者(依字母順序排列)

  • Baofa Fan (calory)
  • Ben Swartzlander (bswartz)
  • Connor Catlett (ConnorJC3)
  • Hemant Kumar (gnufied)
  • Jan Šafránek (jsafrane)
  • Joe Betz (jpbetz)
  • Jordan Liggitt (liggitt)
  • Matthew Cary (mattcary)
  • Michelle Au (msau42)
  • Xing Yang (xing-yang)