卷属性类
特性状态: Kubernetes v1.31 [beta]
本页假设你已经熟悉 Kubernetes 中的 StorageClass、 Volume 和 PersistentVolume。
卷属性类(VolumeAttributesClass)为管理员提供了一种描述可变更的存储“类”的方法。 不同的类可以映射到不同的服务质量级别。Kubernetes 本身不关注这些类代表什么。
这是一个 Beta 特性,默认被禁用。
如果你想测试这一处于 Beta 阶段的特性,你需要为 kube-controller-manager 和 kube-apiserver 启用 VolumeAttributesClass
特性门控。 你可以使用 --feature-gates
命令行参数:
--feature-gates="...,VolumeAttributesClass=true"
你还必须通过 kube-apiserver
运行时配置启用 storage.k8s.io/v1beta1
API 组:
--runtime-config=storage.k8s.io/v1beta1=true
另外你只有在使用容器存储接口(CSI)支持的存储时才能使用 VolumeAttributesClass,并且要求相关的 CSI 驱动实现了 ModifyVolume
API。
VolumeAttributesClass API
每个 VolumeAttributesClass 都包含 driverName
和 parameters
字段, 当属于此类的持久卷(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 都有一个制备器(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:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pv-claim
spec:
…
volumeAttributesClassName: silver
…
集群中有一个新的名为 gold 的 VolumeAttributesClass:
apiVersion: storage.k8s.io/v1beta1
kind: VolumeAttributesClass
metadata:
name: gold
driverName: pd.csi.storage.gke.io
parameters:
iops: "4000"
throughput: "60"
最终用户可以更新 PVC,使之使用新的名为 gold 的 VolumeAttributesClass,并应用此更新:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pv-claim
spec:
…
volumeAttributesClassName: gold
…
参数
VolumeAttributeClass 具有参数,用来描述隶属于该类的存储卷。可接受的参数可能因制备器或调整器而异。 例如,参数 iops
的取值 4000
和参数 throughput
是特定于 GCE PD 的。 如果某个参数被省略,则在卷制备时使用默认值。 如果用户使用带有省略参数的不同 VolumeAttributesClass 来应用 PVC,参数的默认取值可能会因 CSI 驱动实现而异。 有关细节参阅相关的 CSI 驱动文档。
VolumeAttributesClass 最多可以定义 512 个参数。 这些参数对象的总长度(包括其键和值)不能超过 256 KiB。