首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes mountPropagation澄清

Kubernetes mountPropagation澄清
EN

Stack Overflow用户
提问于 2020-08-06 08:33:40
回答 1查看 450关注 0票数 0

我有一个码头形象A,其中包含一个文件夹,我需要与另一个容器B共享在同一个K8s吊舱。

起初,我决定使用共享卷(emptyDir),并启动A作为init容器,将文件夹的所有内容复制到共享卷中。这个很好用。

然后看着k8s文档,我意识到我可以在容器之间使用mountPropagation。因此,我将initContainer更改为同一个容器中的一个普通容器(侧车),并执行了容器A文件夹的挂载操作。我想要与容器B共享该文件夹。这很好,但我需要保持容器运行A与等待循环同步。或者不是..。

然后,我决定回到InitContainer模式并执行同样的操作,这意味着在共享卷中装入A中的文件夹,然后容器完成,因为它是一个InitContainer,然后使用容器B中新挂载的文件夹,它工作了!

所以我的问题是,能不能有人解释一下,如果这是所有库伯奈特星系团的预期?并向我解释为什么我的另一个容器仍然可以看到来自A的已不再作为容器运行的挂载文件夹?

这里有一个简单的清单来演示它。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: testvol
spec:
  initContainers:
    - name: busybox-init
      image: busybox
      securityContext:
        privileged: true
      command: ["/bin/sh"]
      args: ["-c", "mkdir -p /opt/connectors; echo \"bar\" > /opt/connectors/foo.txt;  mkdir -p /opt/connectors_new; mount --bind /opt/connectors /opt/connectors_new; echo connectors mount is ok"]
      volumeMounts:
        - name: connectors
          mountPath: /opt/connectors_new
          mountPropagation: Bidirectional

  containers:
    - name: busybox
      image: busybox
      command: ["/bin/sh"]
      args: ["-c", "cat /opt/connectors/foo.txt; trap : TERM INT; (while true; do sleep 1000; done) & wait"]
      volumeMounts:
        - name: connectors
          mountPath: /opt/connectors
          mountPropagation: HostToContainer
  volumes:
    - name: connectors
      emptyDir: {}

在这里,再现行为的清单

EN

回答 1

Stack Overflow用户

发布于 2022-05-03 15:34:53

这是因为你的容器在一个容器中运行。容器是定义卷的地方,而不是容器。因此,您正在您的荚中创建一个卷,它是一个空目录。然后,您将其安装在init容器中并进行更改。这就改变了吊舱上的音量。

然后,当init容器完成时,pod级别的文件不会消失,它们仍然存在,所以当第二个容器从容器中安装相同的卷时,第二个容器就会拾取文件。

这是预期的行为,根本不需要mountPropagation字段。mountPropagation字段可能对emptyDir卷有一定影响,但与保存文件无关:

https://kubernetes.io/docs/concepts/storage/volumes/#emptydir

Pod中的所有容器都可以在emptyDir卷中读取和写入相同的文件,尽管该卷可以安装在每个容器中相同或不同的路径上。当Pod因任何原因从节点中删除时,emptyDir中的数据将被永久删除。 注意:容器崩溃不会从节点中移除Pod。emptyDir卷中的数据在容器崩溃期间是安全的。

这里的注释没有显式地声明它,但这意味着它在initContainer到容器转换之间也是安全的。只要您的吊舱存在于节点上,您的数据就会在卷中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63279759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档