卷属性类别

特性状态: Kubernetes v1.31 [beta] (默认启用: 否)

本页面假设你熟悉 Kubernetes 中的 StorageClass卷(Volume)持久卷(PersistentVolume)

VolumeAttributesClass 为管理员提供了一种方式,用来描述他们提供的可变存储“类别”。不同的类别可能对应不同的服务质量级别。Kubernetes 本身对于这些类别代表什么没有预设观点。

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

如果想在它处于 Beta 阶段时测试此特性,你需要为 kube-controller-manager、kube-scheduler 和 kube-apiserver 启用 VolumeAttributesClass 特性门控。你可以使用 --feature-gates 命令行参数。

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

你还需要通过 kube-apiserver运行时配置(runtime-config) 来启用 storage.k8s.io/v1beta1 API 组。你需要使用以下命令行参数:

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

你还只能将 VolumeAttributesClass 用于由 容器存储接口(CSI) 支持的存储,并且仅限于相关的 CSI 驱动实现了 ModifyVolume API 的情况。

VolumeAttributesClass API

每个 VolumeAttributesClass 都包含 driverNameparameters,当属于该类别的 PersistentVolume (PV) 需要动态创建或修改时就会使用它们。

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

apiVersion: storage.k8s.io/v1beta1
kind: VolumeAttributesClass
metadata:
  name: silver
driverName: pd.csi.storage.gke.io
parameters:
  provisioned-iops: "3000"
  provisioned-throughput: "50" 

供应者

每个 VolumeAttributesClass 都有一个供应者,它决定了使用哪个卷插件来供应 PV。必须指定 driverName 字段。

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

你不仅限于指定 kubernetes-csi/external-provisioner。你还可以运行和指定外部供应者,它们是遵循 Kubernetes 定义规范的独立程序。外部供应者的作者对其代码存放位置、供应者的分发方式、运行方式、使用哪个卷插件等拥有完全的自由裁量权。

扩缩容器

每个 VolumeAttributesClass 都有一个扩缩容器,它决定了使用哪个卷插件来修改 PV。必须指定 driverName 字段。

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

例如,一个现有的 PersistentVolumeClaim 正在使用一个名为 silver 的 VolumeAttributesClass。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pv-claim
spec:
  
  volumeAttributesClassName: silver
  

集群中有一个新的 VolumeAttributesClass gold 可用。

apiVersion: storage.k8s.io/v1beta1
kind: VolumeAttributesClass
metadata:
  name: gold
driverName: pd.csi.storage.gke.io
parameters:
  iops: "4000"
  throughput: "60"

最终用户可以用新的 VolumeAttributesClass gold 更新 PVC 并应用。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pv-claim
spec:
  
  volumeAttributesClassName: gold
  

参数

VolumeAttributeClass 具有描述属于它们的卷的参数。根据供应者或扩缩容器,可能会接受不同的参数。例如,对于 GCE PD,参数 iops 的值 4000 和参数 throughput 是特定的。当参数被省略时,在卷供应时会使用默认值。如果用户使用具有省略参数的不同 VolumeAttributesClass 应用 PVC,则根据 CSI 驱动实现的差异,可能会使用参数的默认值。请参阅相关的 CSI 驱动文档了解更多详细信息。

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

最后修改于 2024 年 8 月 19 日太平洋标准时间 12:08 PM:Fix volume-attributes-classes.md feature gate requirements (d29ccb8319)