Kubernetes 1.29:修改卷之 VolumeAttributesClass

2023年 12月 18日 100.7k 0

作者:Sunny Song (Google)

译者:Baofa Fan (DaoCloud)

Kubernetes v1.29 版本引入了一个 Alpha 功能,支持通过变更 PersistentVolumeClaim(PVC)的
volumeAttributesClassName 字段来修改卷。启用该功能后,Kubernetes 可以处理除容量以外的卷属性的更新。
允许更改卷属性,而无需通过不同提供商的 API 对其进行管理,这直接简化了当前流程。

你可以在 Kubernetes 文档中,阅读有关 VolumeAttributesClass 的详细使用信息,或者继续阅读了解
Kubernetes 项目为什么支持此功能。

VolumeAttributesClass

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

VolumeAttributesClass

表示由 CSI 驱动程序定义的可变卷属性的规约。你可以在 PersistentVolumeClaim 动态制备时指定它,
并且允许在制备完成后在 PersistentVolumeClaim 规约中进行更改。

ModifyVolumeStatus

表示 ControllerModifyVolume 操作的状态对象。

启用此 Alpha 功能后,PersistentVolumeClaim 的 spec.VolumeAttributesClassName 字段指明了在 PVC 中使用的 VolumeAttributesClass。
在制备卷时,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。

用户流程

如果你想看到该功能的运行情况,并验证它在你的集群中是否正常工作,可以尝试以下操作:

  • 定义 StorageClass 和 VolumeAttributesClass

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-sc-example
    provisioner: pd.csi.storage.gke.io
    parameters:
      disk-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"
    
  • 定义并创建 PersistentVolumeClaim

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pv-claim
    spec:
      storageClassName: csi-sc-example
      volumeAttributesClassName: silver
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 64Gi
    
  • 验证 PersistentVolumeClaim 是否已正确制备:

    kubectl get pvc
    
  • 创建一个新的名为 gold 的 VolumeAttributesClass:

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pv-claim
    spec:
      storageClassName: csi-sc-example
      volumeAttributesClassName: gold
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 64Gi
    
  • 验证 PersistentVolumeClaims 是否具有更新的 VolumeAttributesClass 参数:

    kubectl describe pvc 
    
  • 后续步骤

    • 有关设计的更多信息,请参阅 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)

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论