Управление классами хранилищ
Класс хранилищ (StorageClass
) предоставляет администраторам возможность разделить хранилища, которые они предлагают, на классы с определенными параметрами. Классы отличаются типом создаваемого диска и правилами тарификации.
Внимание
Стоимость использования хранилища зависит от типа его диска. Ознакомьтесь с ценами на диски Yandex Compute Cloud перед созданием хранилища.
В Managed Service for Kubernetes доступны следующие классы хранилищ, которые отличаются типом создаваемого диска:
yc-network-hdd
(используется по умолчанию) — хранилище на сетевых HDD-дисках (network-hdd
).yc-network-ssd
— хранилище на сетевых SSD-дисках (network-ssd
).yc-network-ssd-nonreplicated
— хранилище на нереплицируемых SSD-дисках с повышенной производительностью (network-ssd-nonreplicated
).yc-network-ssd-io-m3
— хранилище на сетевых SSD-дисках с повышенной производительностью (network-ssd-io-m3
).
Внимание
Нереплицируемые диски не имеют резервирования. При выходе диска из строя данные будут утеряны безвозвратно. Подробнее см. в разделе Нереплицируемые диски и сверхбыстрые сетевые хранилища с тремя репликами (SSD).
Все хранилища создаются с параметрами:
- Volume Binding Mode
—WaitForFirstConsumer
. - Reclaim Policy
—Delete
.
Данные классы допускают использование объектов PersistentVolumeClaim
и PersistentVolume
только в режиме доступаReadWriteOnce
.
Вы можете создать свой класс хранилищ, а также изменить класс хранилищ по умолчанию.
Перед началом работы установите kubectl
Примечание
Класс yc-network-nvme
является устаревшим. Вместо него используйте класс yc-network-ssd
.
Создайте класс хранилищ
-
Сохраните спецификацию для создания класса хранилищ в YAML-файл
my-sc-hdd.yaml
:Подробнее про формат спецификации для создания класса хранилищ.
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: my-sc-hdd provisioner: disk-csi-driver.mks.ycloud.io volumeBindingMode: WaitForFirstConsumer parameters: type: network-hdd csi.storage.k8s.io/fstype: ext4 allowVolumeExpansion: false reclaimPolicy: Retain
-
Выполните команду:
kubectl create -f my-sc-hdd.yaml
Результат:
storageclass.storage.k8s.io/my-sc-hdd created
-
Проверьте, что класс хранилищ создался:
kubectl get storageclass
Результат:
NAME PROVISIONER AGE my-sc-hdd disk-csi-driver.mks.ycloud.io 76s yc-network-hdd (default) disk-csi-driver.mks.ycloud.io 16m yc-network-ssd disk-csi-driver.mks.ycloud.io 16m
Формат спецификации для создания класса хранилищ
Каждый объект StorageClass
содержит параметры parameters
, allowVolumeExpansion
и reclaimPolicy
, которые используются для динамического выделения объекта PersistentVolume
.
Структура YAML-файла:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: <имя_класса_хранилищ> # Используется для обращения к классу хранилищ.
provisioner: <имя_поставщика>
volumeBindingMode: WaitForFirstConsumer
parameters: # Параметры класса хранилищ.
type: <тип_диска>
csi.storage.k8s.io/fstype: <тип_файловой_системы>
allowVolumeExpansion: <включение_механизма_увеличения_размера_тома>
reclaimPolicy: <политика_переиспользования>
Допустимые значения параметров:
parameters
:type
—network-hdd
,network-ssd
,network-ssd-nonreplicated
илиnetwork-ssd-io-m3
.csi.storage.k8s.io/fstype
—ext2
,ext3
илиext4
.
reclaimPolicy
—Retain
илиDelete
.allowVolumeExpansion
—true
илиfalse
.
Измените класс хранилищ по умолчанию
-
Посмотрите, какой класс хранилищ установлен по умолчанию. Рядом с его названием в скобках будет указано
default
.kubectl get storageclass
Результат:
NAME PROVISIONER AGE my-sc-hdd disk-csi-driver.mks.ycloud.io 76s yc-network-hdd (default) disk-csi-driver.mks.ycloud.io 16m yc-network-ssd disk-csi-driver.mks.ycloud.io 16m
-
Измените параметр
storageclass.kubernetes.io/is-default-class
класса хранилищ по умолчанию наfalse
, чтобы он перестал быть классом по умолчанию:kubectl patch storageclass yc-network-hdd \ -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
-
Проверьте, что
yc-network-hdd
больше не является классом хранилищ по умолчанию:kubectl get storageclass
Результат:
NAME PROVISIONER AGE my-sc-hdd disk-csi-driver.mks.ycloud.io 2m36s yc-network-hdd disk-csi-driver.mks.ycloud.io 17m yc-network-ssd disk-csi-driver.mks.ycloud.io 17m
-
Укажите новый класс хранилищ по умолчанию, например
my-sc-hdd
:kubectl patch storageclass my-sc-hdd \ -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
-
Проверьте, что
my-sc-hdd
стал классом хранилищ по умолчанию:kubectl get storageclass
Результат:
NAME PROVISIONER AGE my-sc-hdd (default) disk-csi-driver.mks.ycloud.io 4m21s yc-network-hdd disk-csi-driver.mks.ycloud.io 19m yc-network-ssd disk-csi-driver.mks.ycloud.io 19m