StorageClass в Kubernetes: гибкое управление хранилищами
Что такое StorageClass?
StorageClass — это объект Kubernetes, который определяет тип и параметры хранилища для динамического выделения Persistent Volumes (PV).
Ключевые возможности:
- Автоматическое создание PV по запросу (без ручного управления)
- Абстракция от конкретных провайдеров (AWS EBS, GCP Persistent Disk, NFS, Ceph)
- Гибкость конфигурации (тип диска, политики репликации, IOPS)
Основные параметры StorageClass
Обязательные поля
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd # Уникальное имя класса
provisioner: kubernetes.io/aws-ebs # Драйвер хранилища
Дополнительные настройки
Параметр | Пример значения | Описание |
---|---|---|
volumeBindingMode |
WaitForFirstConsumer |
Отложенное выделение тома |
reclaimPolicy |
Retain |
Не удалять PV после удаления PVC |
allowVolumeExpansion |
true |
Разрешить увеличение размера |
parameters |
type: gp3 |
Провайдер-специфичные опции |
Популярные Provisioners
Облачные провайдеры
- AWS:
kubernetes.io/aws-ebs
(gp3, io1) - GCP:
kubernetes.io/gce-pd
(pd-standard, pd-ssd) - Azure:
kubernetes.io/azure-disk
(Premium_LRS)
Локальные решения
- NFS:
nfs.csi.k8s.io
- Ceph/Rook:
rook-ceph.rbd.csi.ceph.com
- Longhorn:
driver.longhorn.io
Практические примеры
StorageClass для SSD в AWS
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: aws-gp3
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
iops: "3000"
throughput: "125"
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
StorageClass для Ceph
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-rbd
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: rook-ceph
pool: replicapool
imageFormat: "2"
reclaimPolicy: Retain
Как использовать StorageClass?
Запрос хранилища через PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: fast-ssd # Ссылка на StorageClass
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
Проверка созданных ресурсов
kubectl get pvc
kubectl describe pv # Просмотр автоматически созданного тома
Особенности и лучшие практики
Выбор политики удаления
- Delete (по умолчанию) — том удаляется при удалении PVC
- Retain — том сохраняется для ручного управления
Отложенное выделение (WaitForFirstConsumer
)
Позволяет учитывать топологию кластера (например, создавать том в той же зоне, где запущен под).
Мониторинг
Интегрируйте Prometheus для отслеживания:
- Использования дискового пространства
- IOPS/латентности
Трудности и решения
Проблема: «No persistent volumes available»
Решение:
- Проверить доступность provisioner
- Убедиться, что StorageClass указан правильно
Проблема: Невозможно изменить размер PVC
Решение:
- Добавить
allowVolumeExpansion: true
в StorageClass - Некоторые провайдеры (например, AWS) требуют ручного подтверждения
Вывод
StorageClass — это мощный инструмент для:
Динамического выделения хранилищ
Унификации работы с разными провайдерами
Оптимизации затрат (выбор подходящего типа диска)
Совет: Всегда тестируйте новые StorageClass в non-production среде перед промышленным использованием.
0