本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

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 特性门控外,你特定于存储供应器的 CSI 驱动程序必须支持新的 ModifyVolume API,这是此功能的 CSI 端。

请参阅完整文档了解所有细节。这里我们展示了常见的工作流程。

动态修改卷属性。

VolumeAttributesClass 是一种集群范围的资源,用于指定特定于存储供应器的属性。这些属性由集群管理员创建,方式与存储类相同。例如,可以为具有不同配置 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 版本中实现但尚未完成的功能。最大的一个是配额支持,详情请参阅 KEP 以及在 sig-storage 中的讨论。

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