Dynamic volume provisioning允许用户按需自动创建存储卷,这种方式可以让用户不需要关心存储的复杂性和差别,又可以选择不同的存储类型。
需要先提前创建StorageClass
对象,StorageClass
中定义了使用哪个provisioner
,并且在provisioner
被调用时传入哪些参数,具体可参考StorageClass
介绍。
例如:
- 磁盘类存储
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
- SSD类存储
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
创建一个PVC对象,并且在其中storageClassName
字段指明需要用到的StorageClass
的名称,例如:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim1
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast
resources:
requests:
storage: 30Gi
当使用到PVC的时候会自动创建对应的外部存储,当PVC被删除的时候,会自动销毁(或备份)外部存储。
当没有对应的StorageClass
配置时,可以设定默认的StorageClass
,需要执行以下操作:
- 在API Server开启
DefaultStorageClass
admission controller 。 - 设置默认的
StorageClass
对象。
可以通过添加storageclass.kubernetes.io/is-default-class
注解的方式设置某个StorageClass
为默认的StorageClass
。当用户创建了一个PersistentVolumeClaim
,但没有指定storageClassName
的时候,会自动将该PVC的storageClassName
指向默认的StorageClass
。
参考文章: