动态卷供应
动态卷配置允许按需创建存储卷。如果没有动态配置,集群管理员必须手动调用他们的云或存储提供商来创建新的存储卷,然后创建 PersistentVolume 对象 来在 Kubernetes 中表示它们。动态配置功能消除了集群管理员预配置存储的需要。相反,它会在用户创建 PersistentVolumeClaim 对象 时自动配置存储。
背景
动态卷配置的实现基于 API 组 storage.k8s.io 中的 API 对象 StorageClass。集群管理员可以根据需要定义任意数量的 StorageClass 对象,每个对象指定一个卷插件(也称为配置器)来配置一个卷,以及在配置时传递给该配置器的参数集。集群管理员可以在集群内定义和公开来自相同或不同存储系统的多种存储变体,每种变体都具有自定义参数集。这种设计也确保了最终用户不必担心存储配置的复杂性和细微之处,但仍然可以选择多种存储选项。
有关更多详细信息,请参阅 存储类 概念。
启用动态配置
要启用动态配置,集群管理员需要预先创建一个或多个 StorageClass 对象供用户使用。StorageClass 对象定义应使用哪个配置器以及在调用动态配置时应传递给该配置器的参数。StorageClass 对象的名称必须是有效的 DNS 子域名。
以下清单创建了一个名为 "slow" 的存储类,它配置标准的磁盘型持久磁盘。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
以下清单创建了一个名为 "fast" 的存储类,它配置 SSD 型持久磁盘。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
使用动态配置
用户通过在他们的 PersistentVolumeClaim 中包含存储类来请求动态配置的存储。在 Kubernetes v1.6 之前,这是通过 volume.beta.kubernetes.io/storage-class 注解完成的。但是,此注解自 v1.9 起已被弃用。用户现在可以使用并且应该使用 PersistentVolumeClaim 对象的 storageClassName 字段。该字段的值必须与管理员配置的 StorageClass 的名称匹配(请参阅 启用动态配置)。
例如,要选择 "fast" 存储类,用户将创建以下 PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim1
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast
resources:
requests:
storage: 30Gi
此声明将自动配置一个 SSD 型持久磁盘。当声明被删除时,卷将被销毁。
默认行为
可以在集群上启用动态配置,以便在未指定存储类的情况下,所有声明都将动态配置。集群管理员可以通过以下方式启用此行为:
- 将一个
StorageClass对象标记为默认。 - 确保 API 服务器上启用了
DefaultStorageClass准入控制器。
管理员可以通过将 storageclass.kubernetes.io/is-default-class 注解 添加到它来标记特定的 StorageClass 为默认值。当集群中存在默认 StorageClass 并且用户创建 storageClassName 未指定的 PersistentVolumeClaim 时,DefaultStorageClass 准入控制器会自动添加指向默认存储类的 storageClassName 字段。
请注意,如果您将 storageclass.kubernetes.io/is-default-class 注解设置为 true 到集群中的多个 StorageClass 上,然后您创建一个没有设置 storageClassName 的 PersistentVolumeClaim,Kubernetes 将使用最近创建的默认 StorageClass。
拓扑感知
在 多区域 集群中,Pod 可以在区域内跨区域分布。应在 Pod 被调度到的区域中配置单区域存储后端。这可以通过设置 卷绑定模式 来完成。