Стадия жизненного цикла модуля: Экспериментальная версия

У модуля есть требования для установки

Перед включением модуля необходимо разрешить использование экспериментальных модулей в ModuleConfig deckhouse. Для этого установите параметр allowExperimentalModules в true.

Как явно включить или отключить модуль…

Явно включить или выключить модуль можно одним из следующих способов:

  • С помощью веб-интерфейса Deckhouse. В разделе «Система» → «Управление системой» → «Deckhouse» → «Модули» откройте модуль system-s3 и включите (или выключите) переключатель «Модуль включен». Сохраните изменения.

    Пример:

    Интерфейс включения и выключения модуля
  • С помощью Deckhouse CLI (d8).

    Используйте команду d8 system module enable для включения модуля или d8 system module disable для выключения модуля (требуется Deckhouse CLI (d8), настроенный на работу с кластером).

    Пример включения модуля system-s3:

    d8 system module enable system-s3
  • С помощью ModuleConfig system-s3.

    Установите spec.enabled в true или false в ModuleConfig system-s3 (при необходимости создайте его).

    Пример манифеста для включения модуля system-s3:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: system-s3
    spec:
      enabled: true

Как настроить модуль…

Настроить модуль можно одним из следующих способов:

  • С помощью веб-интерфейса Deckhouse.

    В разделе «Система» → «Управление системой» → «Deckhouse» → «Модули» откройте модуль system-s3 и включите переключатель «Дополнительные настройки». Заполните необходимые поля формы на вкладке «Конфигурация» или укажите настройки модуля в формате YAML на вкладке «YAML» без ключа верхнего уровня settings. Сохраните изменения.

    Пример:

    Интерфейс настройки модуля

    Вы также можете отредактировать объект ModuleConfig system-s3 на вкладке «YAML» в окне настроек модуля («Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль system-s3), указав версию схемы в параметре spec.version и необходимые параметры модуля в секции spec.settings.

  • С помощью Deckhouse CLI (d8) (требуется Deckhouse CLI (d8), настроенный на работу с кластером).

    Отредактируйте существующий ModuleConfig system-s3 (подробнее о настройке Deckhouse Platform читайте в документации), выполнив следующую команду:

    d8 k edit mc system-s3

    Внесите необходимые изменения в секцию spec.settings. При необходимости укажите версию схемы в параметре spec.version. Сохраните изменения.

    Вы также можете создать файл манифеста ModuleConfig system-s3, используя пример ниже. Заполните секцию spec.settings необходимыми параметрами модуля. При необходимости укажите версию схемы в параметре spec.version.

    Примените манифест с помощью следующей команды (укажите имя файла манифеста):

    d8 k apply -f <FILENAME>

    Пример файла манифеста ModuleConfig system-s3:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: system-s3
    spec:
      version: 3
      enabled: true
      settings: # Параметры модуля из раздела «Параметры» ниже.

Как сменить канал обновлений модуля…

Чтобы сменить канал обновлений модуля, выполните действия из раздела Как сменить канал обновлений для модуля?.

Требования

К версии 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
    объект
    • 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
          строка
          Режим управления запросами ресурсов: классические Static requests/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: true
      
      highAvailability: 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-rbd
      
      storageClass: localpath-system