【问题标题】: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 来解决。但是,如果你想走这条路,有一些事情需要注意。
路径/mnt/data中创建的所有文件和目录只能由root用户写入。在这种情况下,您要么必须运行 特权容器,要么必须为 hostPath 提供适当的权限才能写入。
-
下面的 YAML 具有 Persistent 卷中 hostPath 选项的语法。
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv
spec:
capacity:
storage: 1Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /mnt/data
运行以下命令在特定项目中创建持久卷。 oc create -f test-pv.yaml -n <project>
一旦有了可用的持久卷,请创建一个持久卷声明,绑定到上面创建的持久卷。
如果您想将 hostPath 直接挂载到 Pod 上,请确保在部署配置中使用 节点选择器,因为 pod 是短暂的并且它们可以在任何时间点重新创建。如果将带有 hostPath 的 pod 安排在可能没有 /mnt/data 路径可用的另一台主机上,则可能会导致 CrashLoopBackOff 错误。
-
以下 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