Корректное выключение узлов
Общая информация
Данная статья описывает один из возможных вариантов интеграции SpaceVM с помощью RestAPI для тех случаев, когда серверное оборудование подключено к UPS, события которого фиксируются и обрабатываются внешней системой мониторинга.
Основная функция UPS — защита системы от кратковременных потерь электричества. После прекращения подачи электричества от основного источника питания (AC), UPS переводит питание оборудования на аккумуляторы. За время их работы необходимо либо активировать генератор для восстановления источника постоянного питания, либо послать сигнал на корректное выключение оборудования.
Корректное выключение
Во избежание потери данных по причине отключения питания оборудования необходимо корректное
выключение узлов инфраструктуры.
Некоторым процессам ВМ требуется продолжительное время для корректного завершения работы.
Для контроля времени работы оборудования на питании от аккумуляторов UPS предоставляет интерфейс для получения событий и метрик, где наиболее важными характеристиками являются:
-
Факт перехода на питание от аккумуляторов или возвращение питания от AC.
-
Среднее расчетное время работы аккумуляторов при текущей нагрузке (runtime).
-
Время, прошедшее с момента потери питания от AC и перехода к питанию от аккумуляторов (режим on_battery).
Характеристика runtime
UPS характеристика runtime является неточной, поскольку нагрузка на батареи динамическая.
В связи с этим рекомендуется использовать метрику, показывающую текущее время работы UPS на питании от аккумуляторов.
Сценарий использования:
-
Питание UPS от АС прекратилось.
-
UPS перешел на питание от аккумуляторов.
-
По истечению заданного времени:
-
Питание от АС не восстановилось.
-
Резервный генератор электричества не включился (или отсутствует).
-
-
Инициация корректного выключения всех ВМ и узлов SpaceVM.
Порядок действий
Создание роли
Для реализации описанной возможности необходимо создать пользовательскую роль, которая будет иметь доступ только к функциям выключения узлов. Для этого нужно выполнить следующие действия:
-
Открыть раздел Безопасность - Роли.
-
Нажать кнопку Добавить и заполнить поля:
-
Название: UPS-shutdown-role.
Примечание
Название роли UPS-shutdown-role приведено в качестве примера. Допускается иное именование роли.
-
Число приоритета: первый свободный после 100.
-
Тип: Администратор.
-
-
Подтвердить создание роли с помощью кнопки ОК.
Редактирование разрешений
Для редактирования разрешений необходимо:
-
Открыть раздел Безопасность - Роли.
-
Открыть подробный просмотр созданной роли нажатием на ее имя.
-
В открывшемся окне перейти в раздел Разрешения.
-
Деактивировать все разрешения, установленные по умолчанию.
-
Нажать на кнопку Фильтр, указать для параметра Действие значение set-status и нажать кнопку Применить.
-
Активировать разрешения:
-
Действие: set_status. Метод: post. Приложение: cluster.
-
Действие: set_status. Метод: post. Приложение: node.
-
-
Нажать кнопку Сохранить в верхней части окна.
Создание пользователя
Для создания пользователя необходимо:
-
Открыть раздел Безопасность - Пользователи.
-
Нажать кнопку Добавить пользователя.
-
В открывшемся окне заполнить поля:
-
Логин: UPS-shutdown-role.
Примечание
Логин пользователя UPS-shutdown-role приведен в качестве примера. Допускается иное именование.
-
Выбор ролей: название роли, указанное на шаге создания роли.
-
Заполнение остальных полей опционально.
-
Создание ключа интеграции
Для создания ключа интеграции необходимо:
-
Открыть раздел Безопасность - Пользователи.
-
Открыть подробный просмотр созданного пользователя нажатием на имя.
-
В открывшемся окне перейти в раздел Ключи интеграции.
-
Нажать кнопку Создать ключ.
-
В открывшемся окне заполнить поля:
-
Приложение для интеграции: UPS-shutdown-role.
Примечание
Приложение для интеграции UPS-shutdown-role приведено в качестве примера. Допускается иное именование.
-
Ключ интеграции: нажать кнопку Сгенерировать ключ.
Важно
Для дальнейших действий необходимо скопировать сгенерированный ключ интеграции.
Примечание
Время жизни ключа интеграции составляет 10 лет.
-
(Опционально) IP-адрес: указать IP-адрес сервиса мониторинга, который будет взаимодействовать с API.
-
Написание curl запроса
Выбор способа выключения (одного узла / всех узлов кластера) зависит от того, как реализовано подключение UPS
в инфраструктуре. Например, если все узлы кластера подключены к одному UPS, возможно использование функции
выключения всех узлов кластера — /api/clusters/XXX/set-status/
.
В другом случае необходимо выключать узлы по отдельности — /api/nodes/XXX/set-status/
.
Для выключения узлов необходимо выполнить соответствующий HTTP-запрос с использованием ранее сгенерированного ключа интеграции для работы с API.
Пример
Примечание
В примере ниже используется вариант выключения узла с UUID b69f23e6-cf5a-46d0-be84-1ca2d764d64e.
-
Определить UUID кластера/узла (в зависимости от выбранного способа выключения):
-
Перейти в раздел Кластеры/Серверы.
-
Открыть подробный просмотр выбранного кластера/узла нажатием на имя.
-
Навести курсор мыши на id.
-
Во всплывающем окне указан UUID выбранной сущности, который можно скопировать, нажав на кнопку рядом с UUID.
-
-
Создать JSON-файл (например, status.json), который будет использован в качестве payload (ниже приведен пример для выключения одного узла):
{ "domains_shutdown": true, "domains_shutdown_timeout": 360, "shutdown": true, "reason": "UPS: the node shutdown process is initiated by transitioning to the on_battery state", "power_on_activate": true }
Описание параметров, указанных в JSON-файле
-
Параметр domains_shutdown определяет: будет происходить отключение виртуальных машин или нет.
-
Параметр domains_shutdown_timeout определяет время, по истечении которого виртуальные машины будут выключены по питанию (в секундах). Значение параметра приведено в качестве примера. Задавать значение необходимо исходя из характеристик UPS и размера нагрузки на него.
-
Параметр shutdown определяет: будет происходить отключение узла или нет.
-
Параметр reason определяет причину отключения ВМ для последующего анализа.
-
Параметр power_on_activate определяет: будет узел автоматически переведен в статус ACTIVE или нет после подачи напряжения.
-
-
В скрипт, осуществляющий передачу управления для выключения узлов, необходимо добавить HTTP-запрос, включающий ранее созданный JSON-файл:
curl -X POST \ -H "Content-Type: application/json" \ -d @shutdown.json ${HOST}/api/nodes/b69f23e6-cf5a-46d0-be84-1ca2d764d64e/set-status/ -H "Authorization: jwt ${JWT}"