StorageClass自动创建卷

之前提到的都是需要集群管理员手动创建PV资源的,这里将提供一种可以动态创建PV卷的方法,即利用StorageClass资源。

StorageClass中会指定置备程序,在使用PVC尝试申请PV卷时,该程序会自动创建PV卷,然后绑定至PVC。

使用StorageClass动态创建PV卷的步骤有三步:

  1. 创建StorageClass,并且指定其置备程序(即创建哪种类型的存储技术的PV卷);

  2. 创建PVC,在PVC的spec.storageClassName中指定需要动态创建PV卷的StorageClass的名字;

  3. 创建Pod,挂载PVC卷;

从上面的步骤中可以看到,省去了手动创建PV卷的功能,且StorageClass资源一次创建,可无数次使用。

Tips: 可以在StorageClass中预创建PV资源,即在PV的spec.storageClassName指定其所属的StorageClass资源(通常不这么做,因为使用StorageClass就是为了动态创建PV,因此这样做没什么意义)。

下面展示完整的从StorageClass中申请PV资源的步骤:

PV动态配置的完整图示

创建StorageClass

StorageClass在Kubernetes中也是一种资源,同样可以使用配置文件进行创建。

下面展示一个例子,创建一个名为fast的StorageClass资源,其用来创建hostPath类型的PV卷,因此其置备程序被指定为k8s.io/minikube-hostpath

创建PVC

在PVC中,需要指定spec.storageClassName从指定的StorageClass资源中动态申请PV资源:

  1. storageClassName不指定,即没有写该字段,则从集群默认的StorageClass资源中分配PV卷;

  2. storageClassName="",则不从任何一个StorageClass中申请PV,而是尝试与预创建的不属于任何StorageClass的PV卷绑定(即PV的spec.storageClassName="");

  3. storageClassName=fast,则从名为fast的StorageClass中申请PV卷;

下面展示一个例子,创建一个名为mongodb-pvc的PVC资源,该资源从名为fast的StorageClass中动态分配大小为100Mi,访问模式为仅允许被一个Node读写的PV资源:

使用Pod挂载PVC资源

对于用户而言,无论是动态创建PV还是静态创建PV,他们都是无感的,因此只需要在Pod中挂载PVC,两步即可:

  1. 定义卷:此处定义的是PVC资源,即在spec.volumes.persistentVolumeClaim中指定claimName为预先创建好的PVC资源的名字,即与PVC相关联;

  2. 挂载卷:在Pod的spec.container.volumeMounts中指定挂载点和挂载卷名;

下面举一个例子,创建一个名为mongodb的Pod,其在内部的名为mongodb的容器的/data/db下挂载一个名为mongodb-data的PVC卷,该卷与名为mongodb-pvc的PVC资源关联:

Last updated

Was this helpful?