首页 > 解决方案 > 如何更改持久卷以使用主机上的路径?

问题描述


我完全通过 Web 控制台创建了一个持久卷声明并附加到我的 Web 服务器的 /www/log 挂载路径。我看到 Persistent Volume Claim 就像我重新启动 Pod 一样工作,日志被保留了。

但是,我想在主机上为持久卷使用本地挂载,以便我可以轻松地跟踪我的日志。在 OKD Web 控制台上,您只能创建新的 PVC,但不能创建指向本地挂载的 PV。您能否建议如何更新自动拾取的持久卷以使用本地挂载(例如 /mnt/data)?

标签: openshiftopenshift-origin

解决方案


这可以通过在通过命令行运行的 OpenShift 中使用hostPath选项Persistent Volume YAML来解决。但是,如果你想走这条路,有一些事情需要注意。

  1. 路径中创建的所有文件和目录/mnt/data只能由root用户写入。在这种情况下,您必须运行特权容器或授予hostPath 适当的可写权限。

  2. 以下YAML在 Persistent 卷中具有hostPath选项的语法。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: test-pv
    spec:
      capacity:
        storage: 1Mi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Recycle
      hostPath:
        path: /mnt/data
    
  3. 运行以下命令在特定项目中创建持久卷。oc create -f test-pv.yaml -n <project>

  4. 一旦你有可用的持久卷,创建一个持久卷声明,该声明绑定到上面创建的持久卷。

  5. 如果您想直接在 Pod 上挂载 hostPath,请确保在部署配置中使用节点选择器,因为 pod 是临时的,并且可以随时重新创建。如果将带有 hostPath 的 pod 安排在可能没有/mnt/data可用路径的另一台主机上,则可能会导致CrashLoopBackOff错误。

  6. 下面的YAML是Pod上的hostPath的示例。

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pod
    spec:
      containers:
      - image: tomcat
        name: test-container
        volumeMounts:
        - mountPath: /www/log
          name: test-volume
      volumes:
      - name: test-volume
        hostPath:
          # directory location on host
          path: /mnt/data
          # this field is optional
          type: Directory
    

推荐阅读