Управление классами хранилищ
Примечание
В регионе Казахстан доступны только платформы standard-v3 (Intel Ice Lake) и standard-v3-t4i (Intel Ice Lake with T4i). Другие типы платформ, кластеры GPU и выделенные хосты недоступны.
Класс хранилищ (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