【发布时间】:2021-03-11 20:51:07
【问题描述】:
我需要在两个容器之间共享一个目录:myapp 和监控,为此我创建了一个 emptyDir: {},然后在两个容器上创建了 volumeMount。
spec:
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: myapp
volumeMounts:
- name: shared-data
mountPath: /etc/myapp/
- name: monitoring
volumeMounts:
- name: shared-data
mountPath: /var/read
这很好用,因为我写入共享数据目录的数据在两个容器中都是可见的。但是,在 /etc/myapp/myapp.config 下创建容器时创建的配置文件是隐藏的,因为共享数据卷安装在 /etc/myapp 路径上(重叠)。
如何强制容器首先将卷挂载到 /etc/myapp 路径,然后使 docker 映像将 myapp.config 文件放置在默认路径 /etc/myapp 下,但它是已挂载的卷,因此允许/var/read下的监控容器可以访问的配置文件?
总结:让监控容器读取 myapp 容器上的 /etc/myapp/myapp.config 文件。
谁能给点建议?
【问题讨论】:
-
容器必须以某种形式运行
cp,无论是在它自己的入口点还是在初始化容器中。 Kubernetes 从不自行将文件复制到卷中(这与 Docker 的行为不同)。 -
我不喜欢使用卷 - 我想要的只是... /etc/myapp 下的数据,它具有默认配置文件(由图像写入)和新配置文件(作为 myapp容器正在运行)应该可供监控容器拾取。
-
@BuggyB 你成功了吗?
-
不,我现在放弃了上述内容。我没有使用需要上述功能的 sidecar,而是将二进制文件(用于度量报废)直接嵌入到主 myapp 容器中,该容器可以直接从 /etc/myapp/* 中读取。这不是一个好的解决方案,因为当我扩展 myapp 时,监控也会扩展,但对于我的场景,我不会扩展 - 单个容器 myapp。
标签: kubernetes