Openshift 如何将持久卷更改为使用主机上的路径?

Openshift 如何将持久卷更改为使用主机上的路径?,openshift,openshift-origin,Openshift,Openshift Origin,我完全通过Web控制台创建了一个持久卷声明,并将其附加到Web服务器的/www/log装载路径。 我看到持久卷声明的工作原理就像我重新启动Pod一样,日志被保留 但是,我希望在主机上为持久卷使用本地挂载,以便轻松跟踪日志。 在OKD Web控制台上,只能创建新的PVC,但不能创建指向本地挂载的PV。 您能否建议如何更新自动拾取的持久卷以使用本地装载(例如/mnt/data)?这可以通过在OpenShift中通过命令行运行hostPath选项持久卷YAML来解决。但是,如果你想走这条路,有一些事情


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

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

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

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

  • 下面的YAML在持久卷中具有hostPath选项的语法

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

  • 一旦持久卷可用,创建一个持久卷声明,该声明将绑定到上述创建的持久卷

  • apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: test-pv
    spec:
      capacity:
        storage: 1Mi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Recycle
      hostPath:
        path: /mnt/data
    
  • 如果要将主机路径直接装载到Pod上,请确保在部署配置中使用节点选择器,因为Pod是短暂的,并且可以在任何时间点重新创建。如果在另一台可能没有
    /mnt/data
    路径可用的主机上调度具有主机路径的POD,则可能会导致
    CrashLoopBackOff
    错误

  • 下面的YAMLPod上的主机路径的一个示例

    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
    

  • 非常感谢您的详细回答!