StorageClass自动创建卷
Last updated
Was this helpful?
Last updated
Was this helpful?
之前提到的都是需要集群管理员手动创建PV资源的,这里将提供一种可以动态创建PV卷的方法,即利用StorageClass资源。
StorageClass中会指定置备程序,在使用PVC尝试申请PV卷时,该程序会自动创建PV卷,然后绑定至PVC。
使用StorageClass动态创建PV卷的步骤有三步:
创建StorageClass,并且指定其置备程序(即创建哪种类型的存储技术的PV卷);
创建PVC,在PVC的spec.storageClassName
中指定需要动态创建PV卷的StorageClass的名字;
创建Pod,挂载PVC卷;
从上面的步骤中可以看到,省去了手动创建PV卷的功能,且StorageClass资源一次创建,可无数次使用。
下面展示完整的从StorageClass中申请PV资源的步骤:
StorageClass在Kubernetes中也是一种资源,同样可以使用配置文件进行创建。
下面展示一个例子,创建一个名为fast
的StorageClass资源,其用来创建hostPath类型的PV卷,因此其置备程序被指定为k8s.io/minikube-hostpath
:
在PVC中,需要指定spec.storageClassName
从指定的StorageClass资源中动态申请PV资源:
若storageClassName
不指定,即没有写该字段,则从集群默认的StorageClass资源中分配PV卷;
若storageClassName=""
,则不从任何一个StorageClass中申请PV,而是尝试与预创建的不属于任何StorageClass的PV卷绑定(即PV的spec.storageClassName=""
);
若storageClassName=fast
,则从名为fast
的StorageClass中申请PV卷;
下面展示一个例子,创建一个名为mongodb-pvc
的PVC资源,该资源从名为fast
的StorageClass中动态分配大小为100Mi
,访问模式为仅允许被一个Node读写
的PV资源:
对于用户而言,无论是动态创建PV还是静态创建PV,他们都是无感的,因此只需要在Pod中挂载PVC,两步即可:
定义卷:此处定义的是PVC资源,即在spec.volumes.persistentVolumeClaim
中指定claimName
为预先创建好的PVC资源的名字,即与PVC相关联;
挂载卷:在Pod的spec.container.volumeMounts
中指定挂载点和挂载卷名;
下面举一个例子,创建一个名为mongodb
的Pod,其在内部的名为mongodb
的容器的/data/db
下挂载一个名为mongodb-data
的PVC卷,该卷与名为mongodb-pvc
的PVC资源关联: