NodeConfig (NC)

Обзор

NodeConfig (NC) — кастомный ресурс (API node.shturval.tech), представляющий экземпляр конфигурации для конкретного узла. NodeConfig создаётся модулем shturval-node-config и агрегирует список NCI, которые должны быть применены к данному узлу.

Связь: NCI задаёт что настраивать и на каких узлах (по селектору). NodeConfig — результат для конкретного узла: какие NCI применены и в каком состоянии.

Один NCI может применяться к нескольким узлам — для каждого узла будет свой NodeConfig с NCI в списке nodeconfigitems.


Как создаётся NodeConfig

  1. Контроллеры модуля shturval-node-config отслеживают Node и NodeConfigItem.
  2. Для каждого узла контроллер определяет NCI, чей nodeconfigselector соответствует лейблам узла.
  3. Создаётся или обновляется NodeConfig с именем, совпадающим с именем узла (hostname).
  4. В spec.nodeconfigitems записывается список NCI для применения.
  5. Контроллер применяет конфигурацию на узел (через shturvald) и обновляет статус.

Структура NodeConfig

apiVersion: node.shturval.tech/v1beta2
kind: NodeConfig
metadata:
  name: <node-name>           # Имя узла (hostname)
  ownerReferences:
    - kind: Node
      name: <node-name>      # Владелец — объект Node
    - kind: NodeConfigItem
      name: <nci-name>       # Ссылки на NCI
spec:
  applygroup: workers        # Группа применения (control-plane, workers)
  nodeconfigitems:           # Список NCI для конфигурации узла
    - generic-init-config
    - ntp-example
status:
  ready: true                # Конфигурация применена успешно
  ncistate:                  # Состояние каждого NCI на узле
    - name: generic-init-config
      state: applied
    - name: ntp-example
      state: applied

Поля NodeConfig

spec

Поле Описание
applygroup Группа применения: control-plane или workers. Определяет порядок применения.
nodeconfigitems Список имён NCI, которые должны быть применены к узлу. Заполняется контроллером на основе селекторов NCI.

status

Поле Описание
ready true — конфигурация применена успешно; false — есть ошибки или применение в процессе.
ncistate Состояние каждого NCI: name — имя NCI, state — статус (например, applied, error).

Аннотации (примеры)

Аннотация Описание
node.shturval.tech/initchecksum Контрольная сумма для проверки инициализации.
node.shturval.tech/ssh Статус доступа по SSH (например, accessed).

Удаление аннотации контрольной суммы

Если NodeConfig находится в состоянии ConfigApplied=False с причиной ChecksumMismatch, локальный /etc/std/nci.json на узле не совпадает с checksum, записанной в NodeConfig. После сверки локального init NCI и ожидаемой конфигурации кластера удалите аннотацию node.shturval.tech/initchecksum, чтобы повторно запустить применение конфигурации (подробнее — раздел диагностики в модуле shturval-node-config):

kubectl get nodeconfig <node-name> -o jsonpath='{.status}'
kubectl annotate nodeconfig <node-name> node.shturval.tech/initchecksum-

Просмотр NodeConfig

# Список NodeConfig (по одному на узел)
kubectl get nodeconfig -A

# Детали NodeConfig для узла
kubectl get nodeconfig <node-name> -o yaml

# Проверка статуса применения
kubectl get nodeconfig <node-name> -o jsonpath='{.status.ready}'

В интерфейсе: на странице узла на вкладке Конфигурация узла отображается список NCI и статус их применения. При ошибке статус — Не применено.