4.8. 使用 hostPath 的持久性存储
OpenShift Container Platform 集群中的 hostPath 卷将主机节点的文件系统中的文件或目录挂载到 pod 中。大多数 pod 都不需要 hostPath 卷,但是如果应用程序需要它,它会提供一个快速的测试选项。
集群管理员必须将 pod 配置为以特权方式运行。这样可访问同一节点上的 pod。
4.8.1. 概述
OpenShift Container Platform 支持在单节点集群中使用 hostPath 挂载用于开发和测试目的。
在用于生产环境的集群中,不要使用 hostPath。集群管理员会置备网络资源,如 GCE Persistent Disk 卷、NFS 共享或 Amazon EBS 卷。网络资源支持使用存储类设置动态置备。
hostPath 卷必须静态置备 。
不要挂载到容器 root、/
或主机和容器中相同的任何路径。如果容器有足够权限,可能会损坏您的主机系统。使用 /host
挂载主机是安全的。以下示例显示主机中的 /
目录被挂载到位于 /host
的容器中。
apiVersion: v1 kind: Pod metadata: name: test-host-mount spec: containers: - image: registry.access.redhat.com/ubi8/ubi name: test-container command: ['sh', '-c', 'sleep 3600'] volumeMounts: - mountPath: /host name: host-slash volumes: - name: host-slash hostPath: path: / type: ''
4.8.2. 静态置备 hostPath 卷
使用 hostPath 卷的 pod 必须通过手动(静态)置备来引用。
流程
定义持久性卷(PV)的名称。创建包含
PersistentVolume
对象定义的pv.yaml
文件:apiVersion: v1 kind: PersistentVolume metadata: name: task-pv-volume 1 labels: type: local spec: storageClassName: manual 2 capacity: storage: 5Gi accessModes: - ReadWriteOnce 3 persistentVolumeReclaimPolicy: Retain hostPath: path: "/mnt/data" 4
从该文件创建 PV:
$ oc create -f pv.yaml
定义持久性卷声明(PVC)。创建包含
PersistentVolumeClaim
对象定义的pvc.yaml
文件:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: task-pvc-volume spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: manual
从文件创建 PVC:
$ oc create -f pvc.yaml
4.8.3. 在特权 pod 中挂载 hostPath 共享
创建持久性卷声明后,应用程序就可以使用它。以下示例演示了在 pod 中挂载此共享。
先决条件
- 已存在一个映射到底层 hostPath 共享的持久性卷声明。
流程
创建可挂载现有持久性卷声明的特权 pod:
apiVersion: v1 kind: Pod metadata: name: pod-name 1 spec: containers: ... securityContext: privileged: true 2 volumeMounts: - mountPath: /data 3 name: hostpath-privileged ... securityContext: {} volumes: - name: hostpath-privileged persistentVolumeClaim: claimName: task-pvc-volume 4