×

OpenShift Container Platform 集群中的 hostPath 卷将主机节点文件系统中的文件或目录挂载到您的 Pod 中。大多数 Pod 不需要 hostPath 卷,但如果应用程序需要,它确实提供了一个快速测试选项。

集群管理员必须将 Pod 配置为以特权方式运行。这允许访问同一节点中的 Pod。

概述

OpenShift Container Platform 支持在单节点集群上进行开发和测试的 hostPath 挂载。

在生产集群中,您不会使用 hostPath。相反,集群管理员将配置网络资源,例如 GCE 持久性磁盘卷、NFS 共享或 Amazon EBS 卷。网络资源支持使用存储类来设置动态配置。

必须静态配置 hostPath 卷。

不要挂载到容器根目录 (/) 或主机和容器中相同的任何路径。如果容器具有足够的权限,这可能会损坏您的主机系统。可以使用 /host 安全地挂载主机。以下示例显示主机中的 / 目录被挂载到容器中的 /host

apiVersion: v1
kind: Pod
metadata:
  name: test-host-mount
spec:
  containers:
  - image: registry.access.redhat.com/ubi9/ubi
    name: test-container
    command: ['sh', '-c', 'sleep 3600']
    volumeMounts:
    - mountPath: /host
      name: host-slash
  volumes:
   - name: host-slash
     hostPath:
       path: /
       type: ''

静态配置 hostPath 卷

使用 hostPath 卷的 Pod 必须通过手动(静态)配置进行引用。

步骤
  1. 通过使用包含 `PersistentVolume` 对象定义的 `pv.yaml` 文件定义持久卷 (PV)

    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)
    1 卷的名称。此名称是持久卷 (PV) 声明或 Pod 如何识别卷的方式。
    2 用于将持久卷声明 (PVC) 请求绑定到 PV。
    3 该卷可以被单个节点以 `读写` 方式挂载。
    4 配置文件指定卷位于集群节点上的 `/mnt/data`。为了避免损坏您的主机系统,请不要挂载到容器根目录 (/) 或主机和容器中相同的任何路径。您可以使用 /host 安全地挂载主机
  2. 从文件创建 PV

    $ oc create -f pv.yaml
  3. 通过使用包含 `PersistentVolumeClaim` 对象定义的 `pvc.yaml` 文件定义 PVC

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: task-pvc-volume
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: manual
  4. 从文件创建 PVC

    $ oc create -f pvc.yaml

在特权 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)
    1 Pod 的名称。
    2 Pod 必须以特权方式运行才能访问节点的存储。
    3 在特权 Pod 中挂载 hostPath 共享的路径。不要挂载到容器根目录 (/) 或主机和容器中相同的任何路径。如果容器具有足够的权限(例如主机 /dev/pts 文件),这可能会损坏您的主机系统。可以使用 /host 安全地挂载主机。
    4 先前创建的 `PersistentVolumeClaim` 对象的名称。