StorageClass

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

StorageClass — ресурс Kubernetes, определяющий профиль для динамического провизирования PersistentVolume: какой CSI-драйвер использовать, какие параметры хранилища применять и как обрабатывать освобождение тома при удалении PersistentVolumeClaim. Поле provisioner называет CSI-драйвер — например ebs.csi.aws.com, pd.csi.storage.gke.io, disk.csi.azure.com или rook-ceph.rbd.csi.ceph.com, — а parameters содержит специфичные для драйвера настройки: type: gp3, iopsPerGB: "50" или encrypted: "true". Поле reclaimPolicy (Delete или Retain) управляет тем, удаляется ли нижележащий облачный диск или сохраняется при удалении PVC, а volumeBindingMode: WaitForFirstConsumer откладывает провизирование тома до планирования Pod'а, обеспечивая создание тома в той же зоне доступности, что и узел. Администраторы кластера могут назначить StorageClass по умолчанию аннотацией storageclass.kubernetes.io/is-default-class: "true", которая используется для PVC, не указывающих storageClassName. Объекты StorageClass проверяются через kubectl get storageclass и kubectl describe storageclass <name>; они обязательны для volumeClaimTemplates StatefulSet и динамического провизирования PV во всех дистрибутивах Kubernetes.

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

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

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

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

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

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