【发布时间】:2018-02-02 16:38:19
【问题描述】:
我的 pod 有两个容器 - 一个主容器和一个 sidecar 容器,用于监控主容器中的 /var/run/utmp 文件并在它发生变化时采取行动。我正在尝试弄清楚如何让这个文件在 sidecar 容器中可见。
This page 描述了如何使用emptyDir 卷在 pod 中的容器之间共享目录。但是,这似乎只适用于目录,而不是单个文件。我也不能使用这种策略来共享主容器中的整个 /var/run/ 目录,因为在那里挂载一个卷会擦除容器需要运行的目录的内容。
我尝试通过在另一个目录中创建指向utmp 的符号链接并挂载该目录来解决此问题,但看起来卷中的符号链接并没有按照它们需要的方式来解决这个问题。
有什么方法可以使容器中的一个文件对同一个 pod 中的其他容器可见?我正在试验的清单如下所示:
apiVersion: v1
kind: Pod
metadata:
name: utmp-demo
spec:
restartPolicy: Never
containers:
- name: main
image: debian
command: ["/bin/bash"]
args: ["-c", "sleep infinity"]
volumeMounts:
- name: main-run
mountPath: /var/run # or /var/run/utmp, which crashes
- name: helper
image: debian
command: ["/bin/bash"]
args: ["-c", "sleep infinity"]
volumeMounts:
- name: main-run
mountPath: /tmp/main-run
volumes:
- name: main-run
emptyDir: {}
【问题讨论】:
-
不确定 subPath 是否可以在这里工作,但可能值得一试。Here 就是一个例子。但我会尝试在路径中包含文件名,类似于只包含一个 configMap 文件。
-
似乎没有帮助,即使使用 subPath,目录的其余部分似乎也被清除了。
-
在主容器启动时简单地创建与原始文件具有相同权限的 /var/run/utmp 文件怎么样?我认为它一开始就已经是一个空文件(没有安装任何卷)。
-
如果需要/var/run的原始内容,可以通过“mkdir /somedir; mount -o bind / /somedir; cp -r /somedir/var/run/* /var/run; 卸载 /somedir”。你的容器需要有特权才能工作,否则 mount 命令会抛出权限被拒绝。
标签: kubernetes