Стадия жизненного цикла модуля: Экспериментальная версия
У модуля есть требования для установки
Перед включением модуля необходимо разрешить использование экспериментальных модулей в ModuleConfig deckhouse. Для этого установите параметр allowExperimentalModules в true.
Требования
К версии Deckhouse Platform: 1.72 и выше.
Конверсии
Модуль настраивается с помощью ресурса ModuleConfig, схема которого содержит номер версии. При применении в кластере старой версии схемы ModuleConfig выполняются автоматические преобразования. Чтобы обновить версию схемы ModuleConfig вручную, необходимо последовательно для каждой версии выполнить следующие действия:
-
Обновление из версии 1 в 2:
Замените
storage.singleReplica: trueнаhighAvailability: falseи удалитеstorage.singleReplicaиstorage.recreateConfirmation. Число реплик теперь следует режиму отказоустойчивости платформы, а подтверждение пересоздания больше не нужно: смена режима выполняется миграцией между двумя кластерами Garage и данных не теряет.
-
Обновление из версии 2 в 3:
Удалите секцию
storage: размер томов системного хранилища больше не задаётся настройкой, а вычисляется как суммаspec.sizeвсех SystemBucket и растёт вместе с ней.
Параметры
Версия схемы: 3
-
-
объектsettings.controllerНастройки system-s3-controller — контроллера, который сводит ресурсы SystemBucket и data plane хранилища.
По умолчанию:
{}-
settings.controller.resourcesManagementУправление ресурсами system-s3-controller.
По умолчанию:
{}Пример:
mode: VPA vpa: cpu: limitRatio: 1.5 max: 200m min: 50m memory: limitRatio: 1.5 max: 256Mi min: 64Mi mode: Auto-
строкаsettings.controller.resourcesManagement.modeРежим управления запросами ресурсов: классические
Staticrequests/limits илиVPA.По умолчанию:
VPAДопустимые значения:
VPA,Static -
объектsettings.controller.resourcesManagement.staticНастройки статического управления ресурсами.
-
объектsettings.controller.resourcesManagement.static.limitsЛимиты ресурсов для пода контроллера.
-
settings.controller.resourcesManagement.static.limits.cpuЛимит CPU.
-
settings.controller.resourcesManagement.static.limits.memoryЛимит памяти.
-
-
объектsettings.controller.resourcesManagement.static.requestsЗапросы ресурсов для пода контроллера.
-
settings.controller.resourcesManagement.static.requests.cpuЗапрос CPU.
-
settings.controller.resourcesManagement.static.requests.memoryЗапрос памяти.
-
-
-
объектsettings.controller.resourcesManagement.vpaПараметры режима VPA.
По умолчанию:
{}-
объектsettings.controller.resourcesManagement.vpa.cpuПараметры, относящиеся к CPU.
По умолчанию:
{}-
числоsettings.controller.resourcesManagement.vpa.cpu.limitRatio
Коэффициент, по которому из запроса вычисляется начальный лимит CPU.
Полученное соотношение limits/requests VPA сохраняет и при дальнейшей подстройке ресурсов.
-
settings.controller.resourcesManagement.vpa.cpu.maxМаксимально допустимый запрос CPU.
По умолчанию:
200m -
settings.controller.resourcesManagement.vpa.cpu.minМинимально допустимый запрос CPU.
По умолчанию:
50m
-
-
объектsettings.controller.resourcesManagement.vpa.memoryПараметры, относящиеся к памяти.
По умолчанию:
{}-
числоsettings.controller.resourcesManagement.vpa.memory.limitRatio
Коэффициент, по которому из запроса вычисляется начальный лимит памяти.
Полученное соотношение limits/requests VPA сохраняет и при дальнейшей подстройке ресурсов.
-
settings.controller.resourcesManagement.vpa.memory.maxМаксимально допустимый запрос памяти.
По умолчанию:
256Mi -
settings.controller.resourcesManagement.vpa.memory.minМинимально допустимый запрос памяти.
По умолчанию:
64Mi
-
-
строкаsettings.controller.resourcesManagement.vpa.modeРежим работы VPA.
По умолчанию:
AutoДопустимые значения:
Initial,Auto
-
-
-
-
булевыйsettings.highAvailability
Переопределяет режим отказоустойчивости платформы для системного объектного хранилища.
Если параметр не задан, берётся
global.highAvailability, а при его отсутствии — отказоустойчивость самого control plane (больше одного мастера).Режим задаёт форму data plane: отказоустойчивый — это три реплики Garage с фактором репликации 3, неотказоустойчивый — одна реплика с фактором 1, то есть треть потребления, отсутствие избыточности и недоступность хранилища, пока под не работает.
Если параметр не задан, режим выводится из кластера — и одно из направлений этого вывода не исполняется: control plane, потерявший мастера, начинает читаться как неотказоустойчивый, а хранилище всё равно остаётся с тремя репликами. Переход на одну реплику — это потеря избыточности, а потеря мастеров не является просьбой о ней: она случается тогда, когда кластер меньше всего может себе это позволить. Хранилище уменьшается до одной реплики, только если это прямо написано в настройке. Обратное направление спрашивать не нужно: вернувшиеся мастера наращивают хранилище сами.
Смена режима на инсталляции, где уже есть данные, выполняется на том же кластере Garage и на тех же томах. Garage не умеет менять фактор репликации на работающем кластере, поэтому модуль останавливает data plane, удаляет сохранённую раскладку кластера и запускает его снова с другим числом реплик; объекты не копируются, второй кластер не поднимается.
При переходе с одной реплики на три хранилище недоступно от остановки до запуска трёх реплик — обычно меньше минуты, дольше, если новые тома медленно заказываются. Новые реплики наполняются в фоне, пока хранилище работает. При переходе с трёх реплик на одну сначала отклоняется запись — пока каждая реплика не получит все данные (чтение продолжает работать); если за 10 минут этого не произошло, запись возвращается, а смена повторяется позже. Затем хранилище недоступно около минуты, пока перезапускается на одной реплике, а тома двух ушедших реплик освобождаются.
Адрес эндпоинта прежний и все ключи продолжают действовать, перечитывать
Secretс кредами не нужно. Ход смены пишется в условиеReplicationReadyмодуля (Module/system-s3).Примеры:
highAvailability: truehighAvailability: false -
строкаsettings.logLevelУровень логирования модуля.
По умолчанию:
INFOДопустимые значения:
ERROR,WARN,INFO,DEBUG,TRACE -
строкаsettings.storageClass
StorageClass, из которого системное объектное хранилище заказывает тома — по одному PersistentVolumeClaim на реплику Garage.
Если параметр не задан, берётся
global.modules.storageClass, а при его отсутствии — StorageClass по умолчанию в кластере.StorageClass обязателен: своего хранилища у модуля нет, поэтому на инсталляции, где не нашлось ни одного из трёх, data plane не разворачивается, и модуль сообщает об этом в условии
StorageReady(Module/system-s3).Выбор класса — это решение о сохранности данных. Класс, тома которого привязаны к узлу (локальный), привязывает к узлу и копию данных реплики: с потерей узла копия теряется и восстанавливается с остальных — что переживает отказоустойчивый режим и не переживает одиночная реплика. Класс, том которого едет за подом (сетевой), сохраняет данные при замене узла.
На локальном классе от того, где работают реплики, зависит, где лежат их данные. Реплики работают на узлах с ролью
node-role.deckhouse.io/system-s3, если такие есть, иначе на системных узлах, а если нет и их — на мастерах. Роль, назначенная NodeGroup, заведённой под хранилище и с дисками под него, уводит данные с узлов, которые NodeGroup растит, сжимает и заменяет ради других нагрузок: на локальном классе каждая такая замена стоит реплике её копии.Смена класса на инсталляции, где уже есть данные, выполняется миграцией, потому что тома работающего хранилища нельзя перезаказать из другого класса на месте: модуль поднимает второй кластер Garage на новом классе, копирует в него объекты и переводит на него эндпоинт. На это время оба кластера существуют одновременно, поэтому места требуется до двух раз больше обычного. Потребители видят только несколько минут на самом переключении, когда запись отклоняется. В режиме высокой доступности хранилище продолжает отдавать данные, хотя отдельное чтение может зависнуть примерно на минуту, пока перезапускается одна из реплик; хранилище из одной реплики на переключении один раз перезапускается, и на минуту-две недоступно и чтение. Кластер, с которого ушли, остаётся в режиме только для чтения, пока каждая реплика нового не получит все блоки, и затем удаляется. Если вернуть настройку назад до переключения, миграция отменяется, а недостроенный кластер удаляется. Смена
highAvailability, сделанная вместе со сменой класса, выполняется той же миграцией.Примеры:
storageClass: ceph-csi-rbdstorageClass: localpath-system
-