【问题标题】:How to change a Persistent Volume to use a path on the Host machine?如何更改持久卷以使用主机上的路径?
【发布时间】:2018-12-03 11:43:45
【问题描述】:


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

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

【问题讨论】:

    标签: openshift openshift-origin


    【解决方案1】:

    这可以通过在命令行运行的 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. 如果您想将 hostPath 直接挂载到 Pod 上,请确保在部署配置中使用 节点选择器,因为 pod 是短暂的并且它们可以在任何时间点重新创建。如果将带有 hostPath 的 pod 安排在可能没有 /mnt/data 路径可用的另一台主机上,则可能会导致 CrashLoopBackOff 错误。

    6. 以下 YAMLPodhostPath 的示例。

      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
      

    【讨论】:

    • 非常感谢您的详细解答!
    猜你喜欢
    • 2018-12-19
    • 2019-01-08
    • 2020-12-08
    • 1970-01-01
    • 2021-10-14
    • 2015-11-06
    • 2018-12-07
    • 2020-05-27
    • 1970-01-01
    相关资源
    最近更新 更多