本文已发布超过一年。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否仍然准确。

Kubernetes 1.29:用于卷修改的 VolumeAttributesClass

Kubernetes v1.29 版本引入了一个 Alpha 特性,支持通过更改为 PersistentVolumeClaim (PVC) 指定的 volumeAttributesClassName 来修改卷。启用该特性后,Kubernetes 可以处理容量以外的卷属性更新。允许在不通过不同提供商的 API 直接管理的情况下更改卷属性,简化了当前流程。

你可以在 Kubernetes 文档中阅读关于 VolumeAttributesClass 使用细节的信息,或者继续阅读以了解 Kubernetes 项目为何支持此特性。

VolumeAttributesClass

新的 storage.k8s.io/v1alpha1 API group 提供了两种新类型

VolumeAttributesClass

代表 CSI 驱动程序定义的可变卷属性规范。该类可以在动态供应 PersistentVolumeClaims 期间指定,并在供应后在 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 gate。使用 --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)