Kubernetes只读容器中运行代理的文件系统写入问题求助
Kubernetes节点只读容器中执行代理程序的解决方案需求
问题背景
我在Kubernetes节点上,需要在只读容器的文件系统环境中执行代理程序(代理需认为自己运行在容器的/目录下)。
我需要将代理文件复制到节点上的所有容器中。对于可读写文件系统的容器,只需将文件复制到/proc/<pid>/root/tmp/<file>,再通过chroot /proc/<pid>/root /tmp/agent运行代理即可,但只读文件系统的容器无法执行此操作。
已尝试的失败方法
- 使用默认可写的
/dev作为目标目录,虽能运行,但容器的/dev仅64MB可用空间,无法满足需求; - 在
/tmp/<pid>创建容器的软链接,将文件复制到/tmp后通过chroot /tmp/<pid>让代理以为在容器内,但容器的/opt和/tmp无法访问,/tmp/<pid>/opt映射到主机/opt,用mount --bind替代ln -s也存在相同问题; - 尝试将
/proc/<pid>/root/dev/my_folder挂载到/tmp/my_folder,出现wrong fs type错误,推测因/dev是tmpfs导致; - 使用memfd在
chroot /proc/pid/root后访问文件,但代理需写入磁盘,此场景下会失败。
求助需求
我拥有主机操作权限,现寻求解决方案。以下是待实现的思路,希望得到实现帮助或更多思路:
- 用硬盘容量而非内存扩容
/dev; - 运行时为容器挂载额外的可读写硬盘(含所需文件);
- 将主机目录挂载到容器的
/dev; - 运行时修改容器文件系统权限。
内容的提问来源于stack exchange,提问作者Meir Tolpin
相关产品推荐
相关产品推荐

