Storage

Тема дорожной карты · Kubernetes

Хранилище Kubernetes — подсистема, предоставляющая контейнеризированным нагрузкам долговечные, общедоступные и динамически провизируемые тома данных, абстрагируясь от нижележащей инфраструктуры через Container Storage Interface (CSI). Модель хранилища построена на трёх уровнях: объекты Volume, прикреплённые к отдельным Pod'ам для временных или локальных на узле данных; ресурсы PersistentVolume уровня кластера, представляющие провизированный бэкенд хранилища; и PersistentVolumeClaim уровня пространства имён — запросы, привязывающие Pod'ы к PV через StorageClass. CSI-драйверы реализуют фактическую логику провизирования и подключения для облачного блочного хранилища (AWS EBS, GCP Persistent Disk, Azure Disk), сетевых файловых систем (NFS, CephFS, GlusterFS) и распределённых систем хранения (Rook/Ceph, Longhorn, Portworx). Режимы доступа хранилища Kubernetes — ReadWriteOnce, ReadWriteMany, ReadOnlyMany и более новый ReadWriteOncePod — определяют, как PersistentVolume могут монтироваться в Pod'ы и узлы; ReadWriteMany необходим для общего хранилища в многорепликовых Deployment. Velero обеспечивает резервное копирование и восстановление хранилища Kubernetes на уровне кластера, интегрируясь с API снимков CSI-томов (VolumeSnapshot, VolumeSnapshotClass) для захвата точечных копий PersistentVolume.

Как это работает

Storage в Kubernetes соединяет pods с долговременным хранилищем через три слоя: PersistentVolumeClaim (PVC), декларируемый пользователем, PersistentVolume (PV), стоящий за claim (pre-provisioned или динамически создаваемый через StorageClass) и underlying storage (cloud block storage, NFS, Ceph и т.д.). При старте pod с PVC volume монтируется; при перемещении pod volume следует за ним.

Когда применять

Используйте Storage для 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.

Связанные понятия

Полезные ресурсы