Kubernetes 1.31:用于卷修改的 VolumeAttributesClass Beta 版

Kubernetes 中的卷由两个属性描述:存储类和容量。存储类是卷的不可变属性,而容量可以通过卷大小调整动态更改。

这使得带有卷的工作负载的垂直伸缩变得复杂。虽然云提供商和存储厂商通常提供允许指定 IO 服务质量 (性能) 参数 (例如 IOPS 或吞吐量) 并根据工作负载运行情况调整这些参数的卷,但 Kubernetes 没有允许更改这些参数的 API。

我们很高兴地宣布,自 Kubernetes 1.29 起处于 Alpha 阶段的VolumeAttributesClass KEP,将在 1.31 版本中进入 Beta 阶段。这提供了一个通用的、Kubernetes 原生的 API,用于修改卷参数,例如预置 IO。

与 Kubernetes 中的所有新卷功能一样,此 API 通过容器存储接口 (CSI) 实现。除了 VolumeAttributesClass 功能门控外,您的 provisioner 特定的 CSI 驱动程序必须支持新的 ModifyVolume API,这是此功能在 CSI 端的体现。

有关所有详细信息,请参阅完整文档。这里我们展示了常见的工作流程。

动态修改卷属性。

一个 VolumeAttributesClass 是一个集群范围的资源,用于指定 provisioner 特定的属性。这些由集群管理员创建,方式与存储类相同。例如,可以创建一系列黄金、白银和青铜级别的卷属性类,用于表示预置 IO 量更大或更小的卷。

apiVersion: storage.k8s.io/v1alpha1
kind: VolumeAttributesClass
metadata:
  name: silver
driverName: your-csi-driver
parameters:
  provisioned-iops: "500"
  provisioned-throughput: "50MiB/s"
---
apiVersion: storage.k8s.io/v1alpha1
kind: VolumeAttributesClass
metadata:
  name: gold
driverName: your-csi-driver
parameters:
  provisioned-iops: "10000"
  provisioned-throughput: "500MiB/s"

添加属性类到 PVC 的方式与存储类非常相似。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pv-claim
spec:
  storageClassName: any-storage-class
  volumeAttributesClassName: silver
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 64Gi

与存储类不同,卷属性类可以更改

kubectl patch pvc test-pv-claim -p '{"spec": "volumeAttributesClassName": "gold"}'

Kubernetes 将与 CSI 驱动程序协同工作,更新卷的属性。PVC 的状态将跟踪当前和期望的属性类。PV 资源也将使用新的卷属性类进行更新,该属性类将被设置为 PV 当前活动的属性。

Beta 阶段的限制

作为一项 Beta 功能,仍然有一些功能计划在 GA 阶段推出,但目前尚未实现。最大的限制是配额支持,详细信息请参阅KEPsig-storage 中的讨论。

有关 CSI 驱动程序中对该功能支持的最新信息,请参阅Kubernetes CSI 驱动程序列表