Kubernetes - 将只读共享挂载为可写
Posted
技术标签:
【中文标题】Kubernetes - 将只读共享挂载为可写【英文标题】:Kubernetes - mount read only share as writable 【发布时间】:2019-01-09 05:33:52 【问题描述】:我正在使用此配置来安装对 docker 映像只读的驱动器:
volumes:
- name: drive-c
hostPath:
path: /media/sf_C_DRIVE
containers:
...
volumeMounts:
- name: drive-c
mountPath: /c
当我尝试将 (mkdir) 写入 docker 映像内的此文件夹(这是虚拟盒只读安装文件夹)时,我得到:
mkdir: can't create directory 'somedir': Read-only file system
这没关系,因为这是只读文件系统 (C_DRIVE on /c type vboxsf (rw,nodev,relatime)
)
是否有可能以某种方式使这个文件夹在 docker 容器中可写?更改不需要传播到 hostPath。我读过一些关于 overlayfs 的内容,但我不确定如何在 Kubernetes yaml 中指定它。
【问题讨论】:
【参考方案1】:您不能通过 Kubernetes 卷挂载来执行此操作,因为它们只是在卷上工作。您需要做的是在您的主机上创建一个可写的覆盖文件系统,然后将其映射到具有不同可写路径的 Kubernetes。
您想创建类似/mnt/writable_sf_C_drive
的东西,方法是安装您的/media/sf_C_DRIVE
并在其顶部覆盖,然后您在Kubernetes 中的卷安装将安装/mnt/writable_sf_C_DRIVE.
有一些说明here
【讨论】:
我是这么认为的。唯一的问题是我不能在两个 docker 镜像之间共享相同的覆盖挂载(因为任何人都会看到另一个镜像的变化)。另外,我读到 vboxsf 不支持覆盖。 如何创建一个具有该卷挂载的 initContainer,然后简单地将所有内容复制到您的 pod 中,然后当真正的 pod 运行时,它将拥有数据的副本。 我需要共享整个驱动器,正如您从我的问题中看到的那样(所以谈论 1TB 的数据......),这使得复制变得不可行。此外,我需要立即看到变化。但在其他一些用例中可能是解决方案......以上是关于Kubernetes - 将只读共享挂载为可写的主要内容,如果未能解决你的问题,请参考以下文章
sshfs+overlayfs实现一个共享只读资源被多个主机挂载成可写目录
JSLint:设置控制台时出现只读错误,即使它设置为可写全局
在 Kubernetes 中,我可以同时使用只读和可写文件进行部署吗?
vs 2010 用vb ,DevExpress.XtraGrid.view.gridview 如何设置某字段为只读,但新增行数据该字段为可写。