如果您有一个大型持久卷 (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 为包含 HPP CSI 驱动程序的每个节点从pvcTemplate
规范创建 PVC。从 PVC 模板创建的 PVC 使用单个大型 PV,允许 HPP 创建较小的动态卷。
您可以将基本存储池与使用 PVC 模板创建的存储池组合。
使用 PVC 模板创建存储池
您可以通过在 HPP 自定义资源 (CR) 中指定 PVC 模板来为多个主机路径供应程序 (HPP) 卷创建存储池。
|
请勿在与操作系统相同的分区中创建存储池。否则,操作系统分区可能会填满,从而影响性能或导致节点变得不稳定或无法使用。
|
步骤
-
为指定了 `storagePools` 节中持久卷 (PVC) 模板的 HPP CR 创建一个 `hpp_pvc_template_pool.yaml` 文件,如下例所示。
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