Управление классами хранилищ

Класс хранилищ (StorageClass) предоставляет администраторам возможность разделить хранилища, которые они предлагают, на классы с определенными параметрами.

В Managed Service for Kubernetes автоматически доступны два класса хранилищ yc-network-hdd и yc-network-ssd со следующими параметрами:

Данные классы допускают использование объектов PersistentVolumeClaim и PersistentVolume только в режиме доступа ReadWriteOnce.

Классы отличаются типом создаваемого диска:

  • Для yc-network-hdd используется стандартный сетевой диск (network-hdd).
  • Для yc-network-ssd используется быстрый сетевой диск (network-ssd).

Вы можете создать свой класс хранилищ, а также изменить класс хранилищ по умолчанию.

Примечание

Класс yc-network-nvme является устаревшим. Вместо него используйте класс yc-network-ssd.

Создайте класс хранилищ

  1. Сохраните спецификацию для создания класса хранилищ в 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
    
  2. Выполните команду:

    $ kubectl create -f my-sc-hdd.yaml
    storageclass.storage.k8s.io/my-sc-hdd created
    
  3. Проверьте, что класс хранилищ создался:

    $ 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 содержит параметры provisioner, parameters и reclaimPolicy, которые используются для динамического выделения объекта PersistentVolume.

Допустимые значения параметров:

  • provisioner: disk-csi-driver.mks.ycloud.io.
  • parameters
    • type: network-hdd или network-ssd.
    • csi.storage.k8s.io/fstype: ext2, ext3 или ext4.
  • reclaimPolicy: Retain или Delete.

Структура YAML-файла:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: <имя класса хранилищ> # Используется для обращения к классу хранилищ.
provisioner: <имя поставщика>
volumeBindingMode: WaitForFirstConsumer
parameters: # Параметры класа хранилищ.
  type: <тип диска>
  csi.storage.k8s.io/fstype: <тип файловой системы>
allowVolumeExpansion: false
reclaimPolicy: <политика переиспользования>

Измените класс хранилищ по умолчанию

  1. Посмотрите, какой класс хранилищ установлен по умолчанию. Рядом с его названием в скобках будет указано 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
    
  2. Измените параметр storageclass.kubernetes.io/is-default-class класса хранилищ по умолчанию на false, чтобы он перестал быть классом по умолчанию:

    $ kubectl patch storageclass yc-network-hdd \
              -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  3. Проверьте, что 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
    
  4. Укажите новый класс хранилищ по умолчанию, например my-sc-hdd:

    $ kubectl patch storageclass my-sc-hdd \
              -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    
  5. Проверьте, что 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