Kubernetes MountPropagation уточнения - PullRequest
       118

Kubernetes MountPropagation уточнения

0 голосов
/ 06 августа 2020

У меня есть docker изображение A, которое содержит папку, которую мне нужно передать другому контейнеру B в том же модуле K8s.

Сначала я решил использовать общий том (emptyDir) и запустил A в качестве контейнера инициализации для копирования всего содержимого папки в общий том. Это работает нормально.

Затем, глядя на k8s do c, я понял, что могу использовать mountPropagation между контейнерами. Итак, я изменил initContainer на простой контейнер (боковую машину) в том же модуле и выполнил монтирование контейнера. Папка, которую я хочу поделиться с контейнером B. Это работает нормально, но мне нужно, чтобы контейнер работал с A с ожиданием л oop. Или нет ...

Затем я решил вернуться к шаблону InitContainer и сделать то же самое, то есть смонтировать папку в A внутри общего тома, а затем контейнер завершится, потому что это InitContainer, а затем использовать недавно смонтированная папка в контейнере B. И это работает !!!!

Итак, мой вопрос: может ли кто-нибудь объяснить мне, ожидается ли это на всех кластерах Kubernetes? и объясните мне, почему смонтированная папка из A, которая больше не работает как контейнер, все еще видна моему другому контейнеру?

Вот простой манифест, чтобы продемонстрировать это.

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: {}

здесь манифест для воспроизведения поведения

...