Dynamic Provisioning 的目标是完全自动化存储资源的生命周期管理,让用户无需过多的关注存储的管理,可以按需求自动动态创建和调整存储资源。StorageClass 本质上是底层存储介质的抽象:不同的存储介质拥有统一的表示和行为。
StorageClass 是 Dynamic Provisioning(动态配置)的基础,允许集群管理员位底层存储平台做定义抽象。用户只需在 PersistentVolumeClaim(PVC)通过名字引用 StorageClass 即可。
PVC允许用户消耗抽象的存储资源,用户也经常需要各种属性(如性能)的PV。集群管理员需要提供各种各样、不同大小、不同访问模式的PV,而不用向用户暴露这些volume如何实现的细节。因为这种需求,就催生出一种StorageClass资源。
StorageClass提供了一种方式,使得管理员能够描述他提供的存储的等级。集群管理员可以将不同的等级映射到不同的服务等级、不同的后端策略。
定义存储类
每个 StorageClass
都包含字段 provisioner
和 parameters
,当一个属于某个类的 PersistentVolume 需要被动态提供时,将会使用上述的参数域。
StorageClass
对象的命名是非常重要的,它是用户请求指定等级的方式。当创建 StorageClass
对象时,管理员设置等级的名称和其他参数,存储类的对象一旦被创建,将不能被更新。管理员能够为 PVC 指定一个默认的存储类。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
# 指定存储类的供应者
provisioner: kubernetes.io/glusterfs
parameters:
resturl: "http://10.97.20.153:8080"
clusterid: "630372ccdc720a92c681fb928f27b53f"
restauthenabled: "true"
restuser: "admin"
secretNamespace: "default"
secretName: "heketi-secret"
gidMin: "40000"
gidMax: "50000"
volumetype: "replicate:3"
# 指定回收策略
reclaimPolicy: Retain
mountOptions:
- debug
管理员可以指定一个默认的 StorageClass
,用于绑定到那些未请求指定等级的PVC。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
Provisioner 供应者
存储类有一个供应者的参数域,此参数域决定使用哪种存储卷插件提供给PV使用。必须指定该字段。
你不限于指定此处列出的“内部”供应商(其名称前缀为“kubernetes.io”并与Kubernetes一起分发)。你还可以运行和指定外部供应商,它们是遵循Kubernetes定义的规范的独立程序。外部提供者的作者对代码的生命周期,供应商的分发方式,运行状况以及使用的卷插件(包括Flex)等都有充分的自主权。库kubernetes-incubator/external-storage存放了一个库, 用于编写外部存储供应商,而这些提供者实现了大量的规范,并且是各种社区维护的。
存储卷 | 内置供应者 | 配置例子 |
---|---|---|
AWSElasticBlockStore | ✓ | AWS |
AzureFile | ✓ | Azure File |
AzureDisk | ✓ | Azure Disk |
CephFS | – | – |
Cinder | ✓ | OpenStack Cinder |
FC | – | – |
FlexVolume | – | – |
Flocker | ✓ | – |
GCEPersistentDisk | ✓ | GCE |
Glusterfs | ✓ | Glusterfs |
iSCSI | – | – |
PhotonPersistentDisk | ✓ | – |
Quobyte | ✓ | Quobyte |
NFS | – | – |
RBD | ✓ | Ceph RBD |
VsphereVolume | ✓ | vSphere |
PortworxVolume | ✓ | Portworx Volume |
ScaleIO | ✓ | ScaleIO |
StorageOS | ✓ | StorageOS |
Local | – | Local |
Kubernetes 的存储类并不局限于表中的“interneal”供应者,“interneal”供应者的名称带有“kubernetes.io”前缀;也可以允许和指定外部的供应者,外部供应者通过独立的程序进行实现。外部供应者的作者对代码在何处生存、如何供应、如何运行、使用什么卷插件(包括 Flex)等有充分的判断权, kubernetes-incubator/external-storage 仓库中存在编写外部提供者的类库。例如,NFS 不是内部的供应者,但也是可以使用。在 kubernetes-incubator/external-storage 仓库中以列表的形式展示了一些外部的供应者,一些第三方供应商也提供了他们自己的外部供应者。