gpt4 book ai didi

kubernetes - 有没有一种方法可以跨容器共享文件,在 kubernetes 中具有读写访问权限

转载 作者:行者123 更新时间:2023-12-05 03:29:40 26 4
gpt4 key购买 nike

我刚刚开始探索 kubernetes 概念。我正在使用 helm chart 来部署 pod。陷入困境以解决以下问题。任何人都好心帮我解决这个问题。

我有三个容器,比方说 A、B 和 C。容器 A 有一个文件 =>“/root/dir1/sample.txt”。否则我可以离线准备这个文件,但需要安装在所有三个容器中。容器 A 和容器 C 正在运行将更新该文件的服务。容器 B 有一个正在运行的服务将读取该文件。因此,我需要在所有三个容器之间共享此文件。

方法一:使用 emptyDir 卷,我尝试挂载此文件,但它对我的情况没有帮助。因为当我使用 emptyDir 时,我丢失了 dir1 下的所有文件,这些文件来自容器镜像。另外我不希望 dir1 下的其他文件在容器之间共享。除此之外,我需要将文件挂载为相同的目录结构“/root/dir1/sample.txt”,而不是创建空目录说“/root/dir2”作为共享数据挂载并将 sample.txt 复制到 dir2 作为“/root/dir2/sample.txt”。 Reason 现在正在所有三个容器中安装/root/dir2(文件写入发生在任何容器中反射(reflect)在其他容器中)。但这对我的情况没有帮助,因为我需要将文件挂载为相同的目录结构“/root/dir1/sample.txt”。

方法二:使用 configmap 卷,我可以按预期将文件“sample.txt”挂载到 dir1 下。但它被挂载为只读文件系统,容器 A 和 C 无法写入文件。

所以以上两种方法对我的情况没有帮助。如果有人帮助我如何将文件直接挂载到具有相同目录结构下的写访问权限并跨容器共享的容器中,那就太好了。或者 kubernetes 中可用的任何卷类型都将有助于我的情况(https://kubernetes.io/docs/concepts/storage/volumes/#cinder)。

提前致谢!

最佳答案

我认为您最好的选择是使用一个 emptyDir 和一个 initContainer 将其安装到另一个路径并将原始文件复制到其中。这不是一种罕见的模式。在 rabbitmq cluster operator 中查看实际效果.

在 pod 中看起来像这样:

(...)
spec:
volumes:
- name: shared-dir
emptyDir: {}
initContainers:
- name: prepare-dir
image: YOUR_IMAGE
command:
- sh
- '-c'
- 'cp /root/dir1 /tmp/dir1'
volumeMounts:
- name: shared-dir
mountPath: /tmp/dir1/
containers:
- name: container-a
image: YOUR_IMAGE
volumeMounts:
- name: shared-dir
mountPath: /root/dir1/
- name: container-b
image: YOUR_IMAGE
volumeMounts:
- name: shared-dir
mountPath: /root/dir1/
(...)

关于kubernetes - 有没有一种方法可以跨容器共享文件,在 kubernetes 中具有读写访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70987993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com