Короткий ответ
Volume — это каталог с данными, доступный контейнерам внутри Pod, который может переживать перезапуск контейнера (в отличие от файловой системы самого контейнера) и позволяет нескольким контейнерам одного Pod обмениваться файлами.
Как это работает подробнее
файловая система контейнера по умолчанию эфемерна — при перезапуске контейнера (не Pod) все изменения в ней теряются. Volume монтируется в один или несколько контейнеров Pod по указанному пути и живёт столько, сколько живёт сам Pod (для эфемерных типов, например emptyDir) или дольше (для PersistentVolume, подключаемого через PersistentVolumeClaim).
Пример кода
manifest.yaml
spec:
containers:
- name: app
image: myapp:1.0
volumeMounts:
- name: cache
mountPath: /tmp/cache
volumes:
- name: cache
emptyDir: {}Что использовать на практике
- Практика.
emptyDirчасто используют для временного обмена данными между основным контейнером и sidecar (например, логи или кэш); для данных, которые должны пережить пересоздание Pod, используютPersistentVolumeClaim, подключённый к реальному сетевому или облачному хранилищу.
Подводные камни
- Риски. рассчитывать, что
emptyDirсохранит данные после удаления Pod — он удаляется вместе с Pod; путать перезапуск контейнера внутри Pod (файлыemptyDirсохраняются) с пересозданием самого Pod (эфемерные volume теряются); монтировать один и тот жеReadWriteOnceтом в поды на разных узлах одновременно, что для большинства типов хранилищ невозможно.