6.6 KiB
title, description, weight
| title | description | weight |
|---|---|---|
| Разрешение идентичности узла | Как узел определяет собственную идентичность: параметры node.env и резервный FQDN. | 12 |
Каждая операция apex выполняется в контексте строго одного узла. Движок извлекает идентичность узла — имя, подсеть, FQDN и публичный адрес — из файла node.env в корне репозитория. Системное имя хоста используется исключительно как резервный вариант для FQDN. Фреймворк не делает предположений о домене или наличии кластера: узел заявляет о себе явно. Этот механизм пришёл на смену функции root_require_node bash-фреймворка «root» commons, развитием которого стал apex.
Источники идентичности
node.env
Файл node.env — это простой конфигурационный файл формата KEY=value (совместимый с командой source в shell), расположенный в корне репозитория. При разборе комментарии и пустые строки игнорируются, а одинарные или двойные кавычки вокруг значений отбрасываются.
Идентичность объявляется явно с помощью следующих ключей:
APEX_NODE_FQDN— канонический FQDN узла для правилаHost()в traefik. Если ключ не задан, движок берёт имя хоста из ОС и выводит предупреждение.APEX_NODE_HOST— публичное имя хоста узла, используемое для флага--hostпри резервном копировании и меткиinstanceв системе мониторинга и уведомлений. По умолчанию совпадает сAPEX_NODE_FQDN.APEX_SUBNET— подсеть/24узла для сетиdirect. Параметр обязателен: альтернативных источников для него нет (см. Концепция: Схема адресации флота).
APEX_NODE_FQDN=node1.example.com
APEX_NODE_HOST=node1.example.com
APEX_SUBNET=198.18.0.0/24
Имя хоста ОС
Имя хоста операционной системы используется только как резервный вариант для APEX_NODE_FQDN. Если в node.env значение APEX_NODE_FQDN не указано, движок берёт имя хоста ОС и выводит предупреждение. Это значение никогда не парсится для вычисления короткого имени узла или других параметров.
Порядок разрешения
{{% steps %}}
Определение FQDN
Параметр fqdn принимает значение APEX_NODE_FQDN из node.env либо системное имя хоста ОС, если ключ не задан. Если оба источника пусты, разрешение завершается фатальной ошибкой (см. Режимы сбоев).
Определение публичного хоста
Параметр host берётся из APEX_NODE_HOST в node.env либо приравнивается к вычисленному fqdn.
Вычисление короткого имени
Значение name — это первая часть имени host (host.split(".")[0]), например node1 для node1.example.com. Оно используется в логах, имени ветки sync/<node> и уведомлениях.
Получение подсети
Значение subnet всегда читается из переменной APEX_SUBNET файла node.env. Этот параметр строго обязателен.
{{% /steps %}}
В результате формируется структура Node с четырьмя полями: name, subnet, fqdn и host.
Предупреждения
При разрешении идентичности может выводиться одно штатное предупреждение: оно указывает на неполную конфигурацию, которую стоит исправить.
| Условие | Сообщение предупреждения |
|---|---|
APEX_NODE_FQDN не задан в node.env (используется имя хоста ОС) |
APEX_NODE_FQDN not set in node.env; using hostname '<fqdn>'. |
Режимы сбоев
Движок никогда не пытается угадывать параметры наугад. Две ситуации считаются критическими и приводят к завершению с кодом 66 (соглашение движка о коде выхода при отсутствии обязательного ввода):
- FQDN не определён: ключ
APEX_NODE_FQDNотсутствует вnode.env, а также не задано имя хоста в ОС. Движок выводит в stderr сообщениеidentity: APEX_NODE_FQDN missing from node.env and no hostnameи завершает работу. - Подсеть не задана: ключ
APEX_SUBNETотсутствует вnode.env(либо сам файл отсутствует). Движок выводит в stderr сообщениеidentity: APEX_SUBNET missing from node.envи завершает работу.
Warning
Корректный файл
node.envс заданным параметромAPEX_SUBNETобязателен на каждом узле. ПараметрAPEX_NODE_FQDNдопустимо опускать только в том случае, если системное имя хоста ОС возвращает валидный FQDN.
См. также: