Volumes
Тема дорожной карты · Kubernetes
Тома Kubernetes (Volumes) — абстракции хранилища, переживающие файловую систему контейнера и разделяемые между контейнерами в одном Pod'е, решая фундаментальную проблему эфемерного хранилища контейнеров, где все данные теряются при перезапуске контейнера. Том объявляется в spec.volumes[] и монтируется в один или несколько контейнеров через spec.containers[].volumeMounts[].mountPath; тип тома определяет бэкенд-механизм хранения. Встроенные эфемерные типы томов: emptyDir (локальное на узле временное пространство, очищаемое при удалении Pod'а), configMap и secret (объекты Kubernetes, проецируемые как файлы), downwardAPI (метаданные Pod'а, открываемые как файлы) и hostPath (доступ к файловой системе узла, используемый осторожно из-за соображений безопасности). Долговечное хранилище обеспечивается томами persistentVolumeClaim, привязывающимися к PersistentVolume, обеспеченному CSI-драйвером, и универсальными эфемерными томами через volumeClaimTemplates в StatefulSet. Тип тома projected объединяет несколько источников — токены ServiceAccount, ConfigMap, Secret и downward API — в единую точку монтирования, обеспечивая чистые паттерны внедрения учётных данных без множественных объявлений томов в спецификации Pod Kubernetes.
Как это работает
Volumes в Kubernetes соединяет pods с долговременным хранилищем через три слоя: PersistentVolumeClaim (PVC), декларируемый пользователем, PersistentVolume (PV), стоящий за claim (pre-provisioned или динамически создаваемый через StorageClass) и underlying storage (cloud block storage, NFS, Ceph и т.д.). При старте pod с PVC volume монтируется; при перемещении pod volume следует за ним.
Когда применять
Используйте Volumes для stateful-нагрузок: БД, очереди сообщений, кэши с persistence, загрузки файлов. Подбирайте тип под нагрузку — block storage (EBS, GCE PD) для одно-pod БД; ReadWriteMany (NFS, EFS, CephFS) когда несколько pods делят данные; ephemeral emptyDir для scratch space, которое может исчезнуть. Не используйте один PVC для несвязанных нагрузок — coupling усложняет upgrade.
Типичные ошибки
Storage-ловушки: неверный access mode (ReadWriteOnce на Deployment с replicas > 1 — pods deadlock на attach); не установили volumeBindingMode: WaitForFirstConsumer (volume провижится в не той AZ); забыли, что StatefulSet PVC НЕ удаляются при удалении StatefulSet (данные и счёт продолжают идти). Backup-стратегия важна: Velero или CSI-snapshot pipeline до production.