У меня есть 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: {}
здесь манифест для воспроизведения поведения