如果您只有一个大型持久卷 (PV),则可以通过在 hostpath provisioner (HPP) 自定义资源 (CR) 中定义 PVC 模板来创建存储池。
使用 PVC 模板创建的存储池可以包含多个 HPP 卷。将 PV 分割成较小的卷可以提高数据分配的灵活性。
PVC 模板基于 PersistentVolumeClaim
对象的 spec
部分
PersistentVolumeClaim
对象示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: iso-pvc
spec:
volumeMode: Block (1)
storageClassName: my-storage-class
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
您可以使用 HPP CR 中的 pvcTemplate
规范定义存储池。Operator 会根据 pvcTemplate
规范为包含 HPP CSI 驱动程序的每个节点创建一个 PVC。从 PVC 模板创建的 PVC 使用大型 PV,允许 HPP 创建较小的动态卷。
您可以将基本存储池与从 PVC 模板创建的存储池结合使用。
创建具有 PVC 模板的存储池
您可以通过在 HPP 自定义资源 (CR) 中指定 PVC 模板来为多个 hostpath provisioner (HPP) 卷创建一个存储池。
|
请勿在与操作系统相同的分区中创建存储池。否则,操作系统分区可能会被填满,从而影响性能或导致节点变得不稳定或不可用。
|
步骤
-
创建一个 hpp_pvc_template_pool.yaml
文件,用于指定 storagePools
部分中持久卷 (PVC) 模板的 HPP CR,如下例所示
apiVersion: hostpathprovisioner.kubevirt.io/v1beta1
kind: HostPathProvisioner
metadata:
name: hostpath-provisioner
spec:
imagePullPolicy: IfNotPresent
storagePools: (1)
- name: my-storage-pool
path: "/var/myvolumes" (2)
pvcTemplate:
volumeMode: Block (3)
storageClassName: my-storage-class (4)
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi (5)
workload:
nodeSelector:
kubernetes.io/os: linux
1 |
storagePools 部分是一个数组,可以包含基本存储池和 PVC 模板存储池。 |
2 |
在此节点路径下指定存储池目录。 |
3 |
可选:volumeMode 参数可以是 Block 或 Filesystem ,只要它与已供应的卷格式匹配即可。如果未指定值,则默认为 Filesystem 。如果 volumeMode 为 Block ,则安装 Pod 会在安装块卷之前在其上创建一个 XFS 文件系统。 |
4 |
如果省略 storageClassName 参数,则使用默认存储类来创建 PVC。如果省略 storageClassName ,请确保 HPP 存储类不是默认存储类。 |
5 |
您可以指定静态或动态供应的存储。无论哪种情况,请确保请求的存储大小适合您要虚拟划分的卷,否则 PVC 无法绑定到大型 PV。如果您使用的存储类使用动态供应的存储,请选择与典型请求大小匹配的分配大小。 |
-
保存文件并退出。
-
运行以下命令创建具有存储池的 HPP
$ oc create -f hpp_pvc_template_pool.yaml