3.10. 使用 hostPath 的持久性存储

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

重要

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

3.10.1. 概述

OpenShift Container Platform 支持在单节点集群中使用 hostPath 挂载用于开发和测试目的。

在用于生产环境的集群中,不要使用 hostPath。集群管理员会置备网络资源,如 GCE Persistent Disk 卷、NFS 共享或 Amazon EBS 卷。网络资源支持使用 StorageClasses 设置动态置备。

hostPath 卷必须静态置备 。

3.10.2. 静态置备 hostPath 卷

使用 hostPath 卷的 Pod 必须通过手动(静态)置备来引用。

流程

  1. 定义持久性卷(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
    1
    卷的名称。PersistentVolumeClaim 或 Pod 通过这个名称来识别它。
    2
    用于将 PersistentVolumeClaim 请求绑定到此 PersistentVolume。
    3
    这个卷可以被一个单一的节点以 read-write 的形式挂载。
    4
    配置文件指定卷在集群节点的 /mnt/data 中。
  2. 从该文件创建 PV:

    $ oc create -f pv.yaml
  3. 定义持久性卷声明(PVC)。创建包括 PVC 对象定义的一个 pv.yaml 文件:

    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

3.10.3. 在特权 Pod 中挂载 hostPath 共享

创建 PersistentVolumeClaim 后,应用程序就可以使用它。以下示例演示了在 Pod 中挂载此共享。

先决条件

  • 存在的 PersistentVolumeClaim 被映射到底层的 hostPath 共享。

流程

  • 创建可挂载现有 PersistentVolumeClaim 的特权 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 共享的路径。
    4
    之前创建的 PersistentVolumeClaim 的名称。