卷属性类

特性状态: Kubernetes v1.31 [beta]

本页假设你已经熟悉 Kubernetes 中的 StorageClassVolumePersistentVolume

卷属性类(VolumeAttributesClass)为管理员提供了一种描述可变更的存储“类”的方法。 不同的类可以映射到不同的服务质量级别。Kubernetes 本身不关注这些类代表什么。

这是一个 Beta 特性,默认被禁用。

如果你想测试这一处于 Beta 阶段的特性,你需要为 kube-controller-manager 和 kube-apiserver 启用 VolumeAttributesClass 特性门控。 你可以使用 --feature-gates 命令行参数:

  1. --feature-gates="...,VolumeAttributesClass=true"

你还必须通过 kube-apiserver 运行时配置启用 storage.k8s.io/v1beta1 API 组:

  1. --runtime-config=storage.k8s.io/v1beta1=true

另外你只有在使用容器存储接口(CSI)支持的存储时才能使用 VolumeAttributesClass,并且要求相关的 CSI 驱动实现了 ModifyVolume API。

VolumeAttributesClass API

每个 VolumeAttributesClass 都包含 driverNameparameters 字段, 当属于此类的持久卷(PV)需要被动态制备或修改时系统会使用这两个字段。

VolumeAttributesClass 对象的名称比较重要,用户用对象名称来请求特定的类。 管理员在首次创建 VolumeAttributesClass 对象时会设置某个类的名称和其他参数。 虽然在 PersistentVolumeClaim 中 VolumeAttributesClass 对象的名称是可变的, 但现有类中的参数是不可变的。

  1. apiVersion: storage.k8s.io/v1beta1
  2. kind: VolumeAttributesClass
  3. metadata:
  4. name: silver
  5. driverName: pd.csi.storage.gke.io
  6. parameters:
  7. provisioned-iops: "3000"
  8. provisioned-throughput: "50"

存储制备器

每个 VolumeAttributesClass 都有一个制备器(Provisioner),用来决定使用哪个卷插件制备 PV。 driverName 字段是必填项。

针对 VolumeAttributesClass 的特性支持在 kubernetes-csi/external-provisioner 中实现。

你并非必须指定 kubernetes-csi/external-provisioner。 你也可以运行并指定外部制备器,它们是遵循 Kubernetes 所定义的规范的独立程序。 外部制备器的作者可以完全自行决定他们的代码放在哪儿、如何交付制备器、以何种方式运行、使用什么卷插件等。

调整器

每个 VolumeAttributesClass 都有一个调整器(Resizer),用于确定修改 PV 所用的卷插件。 driverName 字段是必填项。

针对 VolumeAttributesClass 的修改卷特性支持在 kubernetes-csi/external-resizer 中实现。

如以下 YAML 所示,有一个 PersistentVolumeClaim 使用名为 silver 的 VolumeAttributesClass:

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: test-pv-claim
  5. spec:
  6. volumeAttributesClassName: silver

集群中有一个新的名为 gold 的 VolumeAttributesClass:

  1. apiVersion: storage.k8s.io/v1beta1
  2. kind: VolumeAttributesClass
  3. metadata:
  4. name: gold
  5. driverName: pd.csi.storage.gke.io
  6. parameters:
  7. iops: "4000"
  8. throughput: "60"

最终用户可以更新 PVC,使之使用新的名为 gold 的 VolumeAttributesClass,并应用此更新:

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: test-pv-claim
  5. spec:
  6. volumeAttributesClassName: gold

参数

VolumeAttributeClass 具有参数,用来描述隶属于该类的存储卷。可接受的参数可能因制备器或调整器而异。 例如,参数 iops 的取值 4000 和参数 throughput 是特定于 GCE PD 的。 如果某个参数被省略,则在卷制备时使用默认值。 如果用户使用带有省略参数的不同 VolumeAttributesClass 来应用 PVC,参数的默认取值可能会因 CSI 驱动实现而异。 有关细节参阅相关的 CSI 驱动文档。

VolumeAttributesClass 最多可以定义 512 个参数。 这些参数对象的总长度(包括其键和值)不能超过 256 KiB。