Переключить компонент на другой класс хранилища
При развёртывании Stackland назначает класс хранилища по умолчанию — тот, который указан в StacklandClusterConfig.spec.storage.defaultStorageClass. Этот класс получает аннотацию storageclass.kubernetes.io/is-default-class: "true" и используется для всех PVC, в которых класс хранилища не задан явно.
Для баз данных обычно предпочтительнее SSD или NVMe, а для объектного хранилища — HDD. Если компоненту нужен класс хранилища, отличный от указанного при установке, пропишите его явно в конфигурации этого компонента.
Важно
Данные при смене класса хранилища не переносятся автоматически.
Смена класса хранилища приводит к пересозданию PVC и потере данных. Выполняйте операцию до записи пользовательских данных — в идеале при первоначальном развёртывании.
Перед началом работы
-
Убедитесь, что нужный класс хранилища существует в кластере:
kubectl get storageclasses -
Убедитесь, что на узлах есть диски соответствующего типа:
kubectl get volumegroups -A -o wide
Подробнее о доступных классах хранилища в разделе Дисковая подсистема.
Смена класса хранилища по умолчанию
Вы можете указать класс хранилища по умолчанию как всем, так и отдельным компонентам.
Смена класса хранилища для всех компонентов
Класс хранилища по умолчанию определяется аннотацией storageclass.kubernetes.io/is-default-class: "true" у ресурса StorageClass. Вы можете переместить эту аннотацию на другой класс хранилища. После этого все новые PVC, в которых класс хранилища не указан явно, будут использовать новый класс по умолчанию.
Чтобы сменить класс хранилища по умолчанию:
-
Снимите аннотацию с текущего класса по умолчанию:
kubectl annotate storageclass <текущий_класс> storageclass.kubernetes.io/is-default-class- -
Установите аннотацию на новый класс:
kubectl annotate storageclass <новый_класс> storageclass.kubernetes.io/is-default-class=true
Важно
Смена класса по умолчанию влияет только на новые PVC. Существующие PVC сохраняют прежний класс хранилища.
Смена класса хранилища для отдельного компонента
Чтобы изменить класс хранилища для конкретного платформенного компонента, укажите соответствующее поле в конфигурации компонента.
Управляемые БД
PostgreSQL, ClickHouse® и Apache Kafka® не требуют настройки класса хранилища на уровне компонента. Кластеры используют класс хранилища по умолчанию. Чтобы задать класс хранилища, отличный от класса по умолчанию, укажите его в манифесте при создании кластера.
Object Storage
apiVersion: stackland.yandex.cloud/v1alpha1
kind: StorageConfig
metadata:
name: main
spec:
enabled: false
settings:
storage:
diskType: HDD
servers: 3
size: 154Gi
storageClass: "stackland-hdd"
Смена класса хранилища для пользовательских кластеров БД
Кластеры баз данных используют класс хранилища по умолчанию, если атрибут storageClass не указан в спецификации кластера. Чтобы задать класс хранилища для конкретного кластера, укажите его в манифесте при создании.
Для уже созданных кластеров PostgreSQL, ClickHouse® и Apache Kafka® нельзя сменить класс хранилища.
PostgreSQL
Укажите поле spec.storage.storageClass в ресурсе PostgresqlCluster:
apiVersion: postgresql.stackland.yandex.cloud/v1alpha1
kind: PostgresqlCluster
metadata:
name: <имя_кластера>
spec:
storage:
size: 10Gi
storageClass: "stackland-ssd"
# ...
Подробнее о создании кластера в разделе Создать кластер PostgreSQL.
ClickHouse®
Укажите поля spec.clickhouse.storage.storageClass и spec.keeper.storage.storageClass в ресурсе ClickhouseCluster:
apiVersion: clickhouse.stackland.yandex.cloud/v1alpha1
kind: ClickhouseCluster
metadata:
name: <имя_кластера>
spec:
clickhouse:
storage:
size: 10Gi
storageClass: "stackland-ssd"
# ...
keeper:
storage:
size: 5Gi
storageClass: "stackland-ssd"
Подробнее о создании кластера в разделе Создать кластер Managed Service for ClickHouse®.
Apache Kafka®
Укажите поля spec.controller.storage.storageClass и spec.broker.storage.storageClass в ресурсе KafkaCluster:
apiVersion: kafka.stackland.yandex.cloud/v1alpha1
kind: KafkaCluster
metadata:
name: <имя_кластера>
spec:
controller:
storage:
size: 5Gi
storageClass: "stackland-ssd"
broker:
storage:
size: 20Gi
storageClass: "stackland-ssd"
# ...
Подробнее о создании кластера в разделе Создать кластер.
Переключение класса хранилища для системных компонентов
Для системных компонентов укажите нужный класс хранилища в конфигурационном файле компонента. Если компонент уже запущен, следуйте процедуре из раздела Смена класса хранилища для существующего компонента с данными.
Logging (Loki)
Укажите поле spec.settings.logStorage.storage.storageClass в ресурсе LoggingConfig:
apiVersion: stackland.yandex.cloud/v1alpha1
kind: LoggingConfig
metadata:
name: main
spec:
enabled: true
settings:
logStorage:
storage:
enabled: true
storageClass: "stackland-hdd"
size: 50Gi
Secrets Store (OpenBao)
Укажите поле spec.settings.server.dataStorage.storageClass в ресурсе SecretsStoreConfig:
apiVersion: stackland.yandex.cloud/v1alpha1
kind: SecretsStoreConfig
metadata:
name: main
spec:
enabled: true
settings:
server:
dataStorage:
size: 2Gi
storageClass: "stackland-ssd"
DataLens
Укажите поле spec.settings.database.storageClass в ресурсе DataLensConfig:
apiVersion: stackland.yandex.cloud/v1alpha1
kind: DataLensConfig
metadata:
name: main
spec:
enabled: true
settings:
database:
storageSize: "2Gi"
storageClass: "stackland-ssd"
Object Storage
Укажите поле spec.settings.storage.storageClass в ресурсе StorageConfig:
apiVersion: stackland.yandex.cloud/v1alpha1
kind: StorageConfig
metadata:
name: main
spec:
enabled: false
settings:
storage:
diskType: HDD
servers: 3
size: 154Gi
storageClass: "stackland-hdd"
Смена класса хранилища для существующего компонента с данными
Смена класса хранилища требует отключения и повторной активации компонента.
Внимание
Операция приводит к полной потере данных на затронутых PVC. Убедитесь, что у вас есть резервная копия, из которой можно восстановить данные.
Чтобы сменить класс хранилища для уже запущенного компонента:
-
Создайте резервную копию данных.
-
Отключите компонент. Для системных компонентов установите
spec.enabled: falseи примените манифест:kubectl apply -f <файл_конфигурации>.yamlДля пользовательских кластеров БД удалите ресурс кластера:
kubectl delete <тип_ресурса> <имя_кластера> -n <название_проекта> -
Удалите PVC компонента:
kubectl delete pvc <имя_pvc> -n <namespace>Чтобы получить список PVC компонента:
kubectl get pvc -n <namespace> -
В манифесте укажите новый класс хранилища и включите компонент обратно (
spec.enabled: true). -
Примените манифест:
kubectl apply -f <файл_конфигурации>.yaml -
Восстановите данные из резервной копии.