【问题标题】:Can I share a single file between containers in a pod?我可以在 pod 中的容器之间共享单个文件吗?
【发布时间】: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


【解决方案1】:

如果您可以将要共享的文件移动到空子文件夹中,这可能是一个简单的解决方案。

例如,将您的文件移动到 /var/run/utmp/utmp 并与空目录共享 /var/run/utmp 文件夹。

【讨论】:

  • 不幸的是,这在我的情况下不起作用,因为 /var/run/utmp 的位置是由 Linux 定义的,无法移动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 2012-01-10
  • 2011-02-14
相关资源
最近更新 更多