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

Kubernetes 1.29:用於卷修改的 VolumeAttributesClass

Kubernetes v1.29 版本引入了一個 Alpha 特性,支援透過更改為 PersistentVolumeClaim (PVC) 指定的 volumeAttributesClassName 來修改卷。啟用該特性後,Kubernetes 可以處理容量以外的卷屬性更新。允許更改卷屬性而無需直接透過不同提供商的 API 進行管理,簡化了當前的流程。

你可以在 Kubernetes 文件中閱讀有關 VolumeAttributesClass 用法的詳細資訊,或者繼續閱讀以瞭解 Kubernetes 專案支援此特性的原因。

VolumeAttributesClass

新的 storage.k8s.io/v1alpha1 API 組提供了兩種新型別:

VolumeAttributesClass

表示由 CSI 驅動程式定義的可變卷屬性的規約。該類可以在 PersistentVolumeClaim 的動態製備期間指定,並在製備後在 PersistentVolumeClaim 的 spec 中進行更改。

ModifyVolumeStatus

表示 ControllerModifyVolume 操作的狀態物件。

啟用此 Alpha 特性後,PersistentVolumeClaim 的 spec 中定義了在 PVC 中使用的 VolumeAttributesClassName。在卷製備時,CreateVolume 操作將應用 VolumeAttributesClass 中的引數以及 StorageClass 中的引數。

當 PVC spec 中的 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. 使用以下命令驗證 PersistentVolumeClaim 是否已更新了 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)