Ответ
Контейнеры в одном поде могут совместно использовать данные через общие тома (Volumes). Это стандартный паттерн для sidecar-контейнеров, например, когда один контейнер пишет логи, а другой их обрабатывает или выгружает.
Наиболее частый и безопасный вариант — emptyDir:
apiVersion: v1
kind: Pod
metadata:
name: shared-files-pod
spec:
containers:
- name: app-container
image: nginx:alpine
volumeMounts:
- name: shared-storage
mountPath: /usr/share/nginx/html # Папка для статики
- name: sidecar-sync
image: alpine
command: ["/bin/sh", "-c"]
args:
- |
apk add curl &&
while true; do
echo "Sidecar data $(date)" > /shared-data/status.txt;
sleep 30;
done
volumeMounts:
- name: shared-storage
mountPath: /shared-data
volumes:
- name: shared-storage
emptyDir: {}
Как это работает:
- В секции
spec.volumesобъявляется томshared-storageтипаemptyDir. - Каждый контейнер монтирует этот том в свою файловую систему, указывая путь в
volumeMounts.mountPath. emptyDirсоздается на ноде при старте пода. Все контейнеры пода видят одни и те же файлы в этом томе.- Данные в
emptyDirсохраняются при перезапуске контейнеров, но удаляются при удалении пода.
Альтернативы:
hostPath: Монтирует директорию с ноды. Использую редко, только для системных демонов (например, сборщиков логов), так как это привязывает под к конкретной ноде.- Сетевые тома (CSI)**: Для данных, которые должны пережить удаление пода (например,
PersistentVolumeClaimна основе NFS или облачного диска).