Files
ermnvldmr.com/services/docs/content/ru/apex/concepts/node-identity.md
T

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.


См. также: