[Документация Yandex Cloud](../../../index.md) > [Yandex Managed Service for Kubernetes](../../index.md) > [Пошаговые инструкции](../index.md) > Работа с постоянными томами > Управление классами хранилищ

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


{% note info %}

В [регионе Казахстан](../../../overview/concepts/region.md) доступны только [платформы](../../../compute/concepts/vm-platforms.md#standard-platforms) `standard-v3` (Intel Ice Lake) и `standard-v3-t4i` (Intel Ice Lake with T4i). Другие типы платформ, кластеры GPU и выделенные хосты недоступны.

{% endnote %}


_Класс хранилищ_ (`StorageClass`) предоставляет администраторам возможность разделить хранилища, которые они предлагают, на классы с определенными параметрами. Классы отличаются [типом создаваемого диска](../../../compute/concepts/disk.md#disks_types) и правилами тарификации.

{% note alert %}

Стоимость использования хранилища зависит от типа его [диска](../../../compute/concepts/disk.md). Ознакомьтесь с [ценами на диски Yandex Compute Cloud](../../../compute/concepts/disk.md#disks_types) перед созданием хранилища.

{% endnote %}

В Managed Service for Kubernetes доступны следующие классы хранилищ, которые отличаются [типом создаваемого диска](../../../compute/concepts/disk.md#disks_types):
* `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`).

{% note alert %}

Нереплицируемые диски не имеют резервирования. При выходе диска из строя данные будут утеряны безвозвратно. Подробнее в разделе [Нереплицируемые диски и сверхбыстрые сетевые хранилища с тремя репликами (SSD)](../../../compute/concepts/disk.md#nr-disks).

{% endnote %}

Все хранилища создаются с параметрами:
* [Volume Binding Mode](https://kubernetes.io/docs/concepts/storage/storage-classes/#volume-binding-mode) — `WaitForFirstConsumer`.
* [Reclaim Policy](https://kubernetes.io/docs/concepts/storage/storage-classes/#reclaim-policy) — `Delete`.

Данные классы допускают использование объектов `PersistentVolumeClaim` и `PersistentVolume` только в [режиме доступа](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) `ReadWriteOnce`.

Вы можете [создать свой класс хранилищ](#sc-create), а также [изменить класс хранилищ по умолчанию](#sc-default).

Перед началом работы [установите kubectl](https://kubernetes.io/ru/docs/tasks/tools/install-kubectl/) и [настройте его на работу с созданным кластером Managed Service for Kubernetes](../connect/index.md#kubectl-connect).

{% note info %}

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

{% endnote %}


## Создайте класс хранилищ {#sc-create}

1. Сохраните спецификацию для создания класса хранилищ в YAML-файл `my-sc-hdd.yaml`:

   Подробнее про [формат спецификации для создания класса хранилищ](#sc-spec).

   ```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
   ```

1. Выполните команду:

   ```bash
   kubectl create -f my-sc-hdd.yaml
   ```

   Результат:

   ```text
   storageclass.storage.k8s.io/my-sc-hdd created
   ```

1. Проверьте, что класс хранилищ создался:

   ```bash
   kubectl get storageclass
   ```

   Результат:

   ```text
   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
   ```

### Формат спецификации для создания класса хранилищ {#sc-spec}

Каждый объект `StorageClass` содержит параметры `parameters`, `allowVolumeExpansion` и `reclaimPolicy`, которые используются для динамического выделения объекта `PersistentVolume`.

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

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

Допустимые значения параметров:
* `parameters`:
  * `type` — `network-hdd`, `network-ssd`, `network-ssd-nonreplicated` или `network-ssd-io-m3`.
  * `csi.storage.k8s.io/fstype` — `ext2`, `ext3`, `ext4` или `btrfs`.
  * `blockSize` — `4096`, `8192`, `16384`, `32768`, `65536`, `131072`. По умолчанию размер блоков всех создаваемых дисков равен 4096 байт. Подробнее в разделе [создание пустого диска с блоком большого размера](../../../compute/operations/disk-create/empty-disk-blocksize.md).
* `reclaimPolicy` — `Retain` или `Delete`.
* `allowVolumeExpansion` — `true` или `false`.


## Измените класс хранилищ по умолчанию {#sc-default}

1. Посмотрите, какой класс хранилищ установлен по умолчанию. Рядом с его названием в скобках будет указано `default`.

   ```bash
   kubectl get storageclass
   ```

   Результат:

   ```text
   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
   ```

1. Измените параметр `storageclass.kubernetes.io/is-default-class` класса хранилищ по умолчанию на `false`, чтобы он перестал быть классом по умолчанию:

   ```bash
   kubectl patch storageclass yc-network-hdd \
     -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
   ```

1. Проверьте, что `yc-network-hdd` больше не является классом хранилищ по умолчанию:

   ```bash
   kubectl get storageclass
   ```

   Результат:

   ```text
   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
   ```

1. Укажите новый класс хранилищ по умолчанию, например `my-sc-hdd`:

   ```bash
   kubectl patch storageclass my-sc-hdd \
     -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
   ```

1. Проверьте, что `my-sc-hdd` стал классом хранилищ по умолчанию:

   ```bash
   kubectl get storageclass
   ```

   Результат:

   ```text
   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
   ```

### Полезные ссылки {#see-also}

* [Том](../../concepts/volume.md)
* [Использование зашифрованных дисков для постоянных томов](encrypted-disks.md)
* [Динамическая подготовка тома](dynamic-create-pv.md)
* [Статическая подготовка тома](static-create-pv.md)