我一直在搜索,每个答案似乎都是同一个例子(https://kubernetes.io/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/)。在一个容器中,您可以创建一个空卷,然后将其挂载到两个容器中,并在每个容器上看到在该挂载中写入的任何内容。虽然这很好,但我的用例略有不同。
集装箱A/opt/内容
集装箱B /data
容器A安装了大约4G的数据。我想做的是在/content将/opt/content装载到Container中。这样,容器B在运行时就可以访问数据的4G,并且我不必复制内容或专门构建容器B。
我的问题,这有可能。如果是的话,正确的pod语法是什么?
apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
restartPolicy: Never
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: nginx-container
image: nginx
volumeMounts:
- name: shared-data
mountPath: /opt/content
- name: debian-container
image: debian
volumeMounts:
- name: shared-data
mountPath: /content发布于 2022-10-27 10:37:37
您的问题中的代码示例应该有效。两者都使用相同的卷,您可以将它们安装在容器中的不同位置。nginx容器将具有/opt/content中的共享数据内容,debian容器将在/content中具有共享数据内容。使用mountPath,可以指定将卷安装在容器中的位置。
发布于 2022-10-27 19:16:17
从我的研究和测试中,我能知道最好的是在一个POD,两个容器不能看到对方的文件系统。卷挂载将允许每个容器在吊舱中创建一个挂载到指定的路径(如示例所示),然后在这两个位置上都会看到写入到它的任何项目。这对原木和其他东西很有用。
在我的上下文中,这证明这是不可能的,并且创建这个挂载,然后让Container将4G目录复制到新创建的挂载中是很费时的。
我只能告诉您,这样做的唯一方法是创建持久卷或其他类似的内容,并在Container中挂载它。通过这种方式,Container内容存储在持久卷中,并且可以在需要时轻松地挂载。唯一的问题是,必须在每个定义的Kube集群中设置持久卷,这就是痛点。
如果其中任何一个是错误的,我只是没有找到正确的文件,请纠正我。我很乐意这样做。
发布于 2022-10-27 20:21:57
当容器启动时,首先安装容器映像(或者更精确地说,是图像的层)。之后,您的自定义卷将被挂载,将任何数据隐藏在挂载路径及其下面的图像中。因此,在几个容器之间共享图像中的数据而不复制它们是不可能的。
典型的解决方案是并将继续使用init容器,该容器下载或将实际数据复制到一个短暂的卷中,然后由一个或多个其他容器(https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/#create-a-pod-that-has-an-init-container)共享。
initContainers:
- name: init
image: <image-containing-the-data-based-on-some-basic-image>
command: ["sh", "-c", "cp -ar /opt/content/* /mnt/target/"]
volumeMounts:
- name: shared-data
mountPath: /mnt/target您实际上需要的是一种容器存储接口(CSI)驱动程序,它支持从容器映像创建卷。我发现了两个完全可以做到这一点的项目,但没有一个项目表示准备投入生产。
https://stackoverflow.com/questions/74214125
复制相似问题