Модуль управления конфигурациями узлов (shturval-node-config)
О сервисе
| Параметр | Значение |
|---|---|
| Название в интерфейсе | Модуль управления конфигурациями узлов |
| Системное название (идентификатор) | shturval-node-config |
| Назначение в кластере | Применение конфигурации узлов (NCI, NodeConfigItem) к машинам кластера: NTP, Container Runtime (в т. ч. реестры), sysctl, Kubelet, доверенные сертификаты и др. |
| Критический | Да |
| Публичный репозиторий | — (компонент платформы «Штурвал») |
| Зависимости | shturval-node-config-crds, shturval-networking |
| Неймспейс | shturval-node-config-system |
Настройка NCI в интерфейсе, селекторы, приоритеты и примеры разделов — на странице Конфигурация узлов (NCI).
Состояние сервиса можно посмотреть в интерфейсе: Сервисы и репозитории → Установленные сервисы → Модуль управления конфигурациями узлов (shturval-node-config) → Управлять.
Скриншоты страницы сервиса

Содержание
- Обзор
- Архитектура
- Установка / развёртывание
- Диагностика
- Жизненный цикл
- Параметры оператора и демона
- Справочник CRD/API
1. Обзор
shturval-node-config обеспечивает доставку и применение конфигурации узлов Kubernetes-кластера. Оператор управляет объектами конфигурации и безопасной перезагрузкой, а демон std применяет конфигурацию на узле, сообщает о необходимости перезагрузки и завершает её после разрешения со стороны оператора.
Место в цепочке управления
Администратор создаёт и изменяет объекты NodeConfigItem, оператор сопоставляет их с NodeConfig конкретных узлов, а демон std на каждом узле получает итоговую конфигурацию, применяет её и отражает состояние обратно в NodeConfig.status. При необходимости оператор выполняет cordon/drain и только после этого разрешает перезагрузку узла.
Сквозная последовательность (NCI → NodeConfig → демон, дрейн, перезагрузка, CSR) на схеме ниже; подробные шаги — в §5.

2. Архитектура
В рабочей среде контроллер представлен двумя SSC:
shturval-node-config-crds— чарт CRD группыnode.shturval.tech;shturval-node-config— основной чарт модуля. (см. скриншот ниже)
Общая схема архитектуры, см. иллюстрацию ниже.

Оператор shturval-node-config
Оператор управляет конфигурацией узлов кластера через CRD NodeConfig и NodeConfigItem, оркестрирует дрейн и перезагрузку и автоматически одобряет CSR для kubelet-serving.
Ключевые характеристики
| Характеристика | Значение |
|---|---|
| Группа API | node.shturval.tech |
| Версия API | v1beta2 |
| Namespace развёртывания | shturval-node-config-system |
| Scope ресурсов | Cluster для NodeConfig и NodeConfigItem |
| Leader election | Управляется флагом --leader-elect, идентификатор nci.shturval.tech |
| Метрики | Адрес задаётся --metrics-bind-address, по умолчанию отключены (0) |
| Health probe | :8081 |
| Webhook | Mutating webhook, путь /mutate-node-shturval-tech-nodeconfig |
| HTTP/2 | По умолчанию отключён |
| Реплики по умолчанию | 2 |
Компоненты
| Компонент | Тип Kubernetes | Назначение |
|---|---|---|
NodeConfigReconciler |
Controller | Управляет дрейном и перезагрузкой узла |
NodeConfigItemReconciler |
Controller | Распределяет шаблоны NodeConfigItem по NodeConfig |
NodeReconciler |
Controller | Поддерживает соответствие Node ↔ NodeConfig |
NodeCSRReconciler |
Controller | Автоматически одобряет CSR kubelet-serving |
NodeConfigItemAdmitter |
MutatingWebhook | Добавляет служебные аннотации к NodeConfigItem |
Демон std
std (shturvald) работает на каждом Linux-узле кластера. Он применяет объединённую конфигурацию узла, следит за локальным init-конфигом, синхронизирует состояние с объектом NodeConfig и выполняет перезагрузку только после разрешения от оператора.
Ключевые характеристики
| Характеристика | Значение |
|---|---|
| Имя бинарника | std |
| Имя systemd unit | shturvald.service |
| Путь unit-файла | /etc/systemd/system/shturvald.service |
| Требуемые права | Запуск только с root-доступом |
| kubeconfig по умолчанию | /etc/kubernetes/kubelet.conf |
| Локальный init NCI | /etc/std/nci.json |
| Кеш NCI | /etc/std/caches/ |
| Состояние применённых NCI | /etc/std/applied/ |
| Объединённый конфиг | /etc/std/merged.json |
| Рабочая директория | /etc/std/ |
Основные задачи
| Компонент | Назначение |
|---|---|
Daemon |
Основной рабочий цикл, обработка сигналов и очереди |
NodeReader |
Чтение NodeConfig и NCI из кластера |
NodeWriter |
Запись статуса и условий в NodeConfig |
WorkQueue |
Очередь синхронизации с периодическим повтором |
fsnotify |
Отслеживание изменений /etc/std/nci.json |
configsyncer |
Синхронизация NCI из кластера в локальный кеш |
Объекты в кластере
| Объекты | Тип | Назначение |
|---|---|---|
| Основной процесс оператора | Deployment | Выполняет контроллеры и webhook |
| ServiceAccount | ServiceAccount | Учётная запись процесса оператора |
| Права доступа | ClusterRole / ClusterRoleBinding | Доступ к CRD, Node, CSR и связанным объектам |
| Webhook endpoint | Mutating webhook | Аннотирует NodeConfigItem при CREATE и UPDATE |
ConfigMap nci-controller-params |
ConfigMap | Передаёт обязательные переменные окружения для webhook |
Внешние зависимости
| Система | Назначение |
|---|---|
| Kubernetes API | Чтение и обновление Node, NodeConfig, NodeConfigItem, CSR |
| Узлы кластера | Cordon, drain, uncordon и координация перезагрузки |
cert-manager |
Выпуск TLS-сертификатов webhook при соответствующем варианте развёртывания |
Демон shurvald (std)
Демон развёртывается непосредственно на Linux-узле и работает как системная служба. Он использует локальные файлы в /etc/std/, kubeconfig kubelet и очередь синхронизации для применения конфигурации и обмена состоянием с оператором.
Схемы демона
Логическая архитектура демона std на узле, см. иллюстрацию ниже.

Схема показывает внутреннюю архитектуру демона на Linux-узле: systemd unit shturvald.service и fsnotify-наблюдатель за /etc/std/nci.json ставят задачи в rate-limited WorkQueue; worker goroutine через NodeReader читает NodeConfig и NCI из API кластера, объединяет конфигурацию в /etc/std/merged.json, применяет её к ОС (пакеты, файлы, kubelet, runtime, sysctl), а NodeWriter записывает статус и условия обратно в NodeConfig.
Поток обработки: конфигурация, применение, взаимодействие с NodeConfig, см. иллюстрацию ниже.

Компоненты на узле
| Компонент | Назначение |
|---|---|
shturvald.service |
Постоянный запуск демона как systemd unit |
/etc/std/nci.json |
Локальный стартовый NCI до подключения к кластеру |
/etc/std/caches/ |
Кеш NCI, полученных из кластера |
/etc/std/applied/ |
Локальное подтверждение уже применённых NCI |
/etc/std/merged.json |
Итоговая объединённая конфигурация |
/etc/kubernetes/kubelet.conf |
Доступ к API кластера после присоединения узла |
Связь оператора и демона
| Направление | Механизм |
|---|---|
| Оператор → демон | Поля NodeConfig.spec, флаги rebootallowed и список nodeconfigitems |
| Демон → оператор | Поля NodeConfig.status, condition ConfigApplied, аннотация node.shturval.tech/initchecksum |
| Координация перезагрузки | Через rebootrequired, rebootscheduled, rebootallowed и состояние ncistate |
3. Установка / развёртывание
shturval-node-config — критический сервис платформы. Включение и жизненный цикл контроллера в кластере обеспечивает cluster-manager (сервис платформы); объекты ShturvalServiceConfig (SSC) для связанных чартов создаются и сопровождаются как часть платформенной конфигурации, а не как произвольная ручная установка Helm-чарта администратором.
Агент std (shturvald) устанавливается платформой на узлы автоматически в рамках процесса подготовки узла (bootstrap). Отдельной ручной установки агента не требуется.
CRD, контроллеры и владение ресурсами:
Иллюстрация: 3. Установка / развёртывание

4. Диагностика
Оператор shturval-node-config
Быстрые проверки
kubectl get nc
kubectl get nci
Оператор публикует следующие печатаемые колонки для NodeConfig:
| Колонка | Смысл |
|---|---|
APPLY GROUP |
Группа координации перезагрузок |
READY |
Все NCI применены, перезагрузка не требуется |
REBOOT REQUIRED |
Демон запросил перезагрузку |
REBOOT SCHEDULED |
Оператор поставил узел в очередь |
REBOOT ALLOWED |
Оператор разрешил перезагрузку |
Для NodeConfigItem доступны колонки:
| Колонка | Смысл |
|---|---|
PRIORITY |
Приоритет мержа |
APPLIED |
Соотношение UpdatedNodes/SelectedNodes |
READY |
Все выбранные NodeConfig обновлены |
SELECTOR |
Селектор сопоставления NodeConfig |
Conditions ресурса NodeConfig
| Condition | Что означает True |
Что означает False / что проверить |
|---|---|---|
NodeDrained |
Дрейн завершён, не требуется или превышен таймаут дрейна | Дрейн ещё идёт или завершился ошибкой |
RebootScheduled |
Узел поставлен в очередь на перезагрузку | Слоты заняты или возник конфликт планирования |
ConfigApplied |
Конфигурация успешно применена | Конфигурация ещё применяется, завершилась ошибкой, обнаружено расхождение checksum, ошибка слияния или ожидание разрешения на перезагрузку |
Обратите внимание! NodeDrained появляется только при rebootscheduled=true, а RebootScheduled появляется только при rebootrequired=true.
Демон std
Быстрые проверки
systemctl status shturvald
std node status
std node info
Если демон ещё не присоединился к кластеру, дополнительным ориентиром служит наличие файлов /etc/std/nci.json и /etc/kubernetes/kubelet.conf.
Состояния демона
| Состояние | Значение |
|---|---|
Working |
Выполняется применение конфигурации |
Done |
Конфигурация успешно применена |
Unreconcilable |
Конфигурацию нельзя привести в требуемое состояние |
Degraded |
Зафиксирована ошибка, не связанная напрямую с конфигурацией |
Аннотации, влияющие на диагностику
| Аннотация | Назначение |
|---|---|
node.shturval.tech/initchecksum |
Контрольная сумма /etc/std/nci.json для выявления расхождений между локальным init NCI и состоянием в кластере |
Типичные эксплуатационные ситуации
| Симптом | Возможная причина | Действие |
|---|---|---|
ConfigApplied=False с причиной ChecksumMismatch |
Локальный /etc/std/nci.json не совпадает с checksum, записанной в NodeConfig |
Сверить локальный init NCI и ожидаемую конфигурацию кластера |
RebootScheduled=False с причиной SlotsOccupied |
В applygroup уже выполняется другая перезагрузка |
Дождаться освобождения слота и повторной попытки оператора |
NodeDrained=False с причиной DrainFailed |
Оператор не смог завершить дрейн | Проверить блокирующие workload на узле и повторить обработку |
| Демон долго не выходит в рабочий режим | Отсутствует /etc/std/nci.json |
Подготовить локальный init NCI |
| Демон не начинает синхронизацию с кластером | Отсутствует /etc/kubernetes/kubelet.conf |
Завершить присоединение узла к кластеру |
std завершается сразу после запуска |
Процесс запущен не от root | Запустить демон от root или через systemd unit |
Если после сверки локального init NCI и ожидаемой конфигурации кластера требуется повторно запустить применение конфигурации, удалите аннотацию node.shturval.tech/initchecksum, записанную в NodeConfig:
kubectl get nodeconfig <node-name> -o jsonpath='{.status}'
kubectl annotate nodeconfig <node-name> node.shturval.tech/initchecksum-
5. Жизненный цикл
Оператор shturval-node-config
Полный сценарий на одной схеме: см. также §1 — место в цепочке.
Контур Node → NodeConfig
| Актор | Действие |
|---|---|
NodeReconciler |
Для каждого Node поддерживает NodeConfig с тем же именем |
NodeReconciler |
Копирует метки узла в NodeConfig, назначает applygroup (workers или controlplane) |
NodeReconciler |
Для единственного control-plane узла устанавливает donotdrain=true |
NodeReconciler |
При удалении Node удаляет связанный NodeConfig |
Согласование Node и NodeConfig, см. иллюстрацию ниже.

Контур NodeConfigItem → NodeConfig
| Актор | Действие |
|---|---|
| Администратор | Создаёт или обновляет NodeConfigItem |
NodeConfigItemReconciler |
Находит все NodeConfig, подходящие по nodeconfigselector |
NodeConfigItemReconciler |
Добавляет имя NCI в spec.nodeconfigitems выбранных NodeConfig |
NodeConfigItemReconciler |
Обновляет status.selectednodeconfigs, status.updatednodeconfigs, status.applied, status.ready |
NodeConfigItemReconciler |
При удалении убирает имя NCI из соответствующих NodeConfig и снимает finalizer |
Согласование NodeConfigItem и выбранных NodeConfig, см. иллюстрацию ниже.

Контур применения и перезагрузки
| Шаг | Актор | Действие |
|---|---|---|
| 1 | Демон | Применяет конфигурацию и при необходимости выставляет ncistate=updatepending |
| 2 | Демон | Устанавливает rebootrequired=true |
| 3 | Оператор | Оценивает политику дрейна по меткам узла и spec.donotdrain |
| 4 | Оператор | Планирует перезагрузку внутри applygroup; одновременно в группе допускается один узел |
| 5 | Оператор | Выполняет cordon и drain, после чего выставляет rebootallowed=true |
| 6 | Демон | Выполняет перезагрузку или повторное применение без физической перезагрузки |
| 7 | Демон | После возврата узла выставляет ncistate=applied |
| 8 | Оператор | Снимает reboot-флаги, выполняет uncordon и возвращает ready=true |
Согласование NodeConfig в контуре применения и перезагрузки, см. иллюстрацию ниже.

Согласование NodeConfig: дрейн:
Согласование NodeConfig: очередь перезагрузок:
Согласование NodeConfig: условия:
Политика дрейна
| Условие | Поведение |
|---|---|
На Node есть метка node.shturval.tech/apply-as-is |
Узел не дренируется, перезагрузка разрешается сразу |
На Node есть метка node.shturval.tech/disable-drain |
Дрейн не выполняется, немедленная перезагрузка не разрешается |
В NodeConfig.spec.donotdrain=true |
Узел не дренируется, перезагрузка разрешается сразу |
| Особых условий нет | Выполняются cordon и drain, затем выдаётся разрешение на перезагрузку |
Финалайзеры
| Ресурс | Финалайзер | Назначение |
|---|---|---|
NodeConfig |
node.shturval.tech/finalizer |
Очистка owner reference и корректное завершение удаления |
NodeConfigItem |
node.shturval.tech/finalizer |
Удаление ссылки на NCI из связанных NodeConfig |
Демон std
Порядок запуска
| Шаг | Действие |
|---|---|
| 1 | Настраивает обработку сигналов |
| 2 | Запускает commworker с периодом 60 секунд |
| 3 | Начинает отслеживать /etc/std/nci.json через fsnotify |
| 4 | При отсутствии /etc/std/nci.json переходит в цикл ожидания с опросом каждые 10 секунд |
| 5 | Если nci.json уже есть, но kubeconfig отсутствует, выполняет NodePrepare() |
| 6 | Запускает основной worker с периодом 60 секунд |
| 7 | Ждёт появления /etc/kubernetes/kubelet.conf |
| 8 | Проверяет доступ к API кластера |
| 9 | Запускает NodeReader и NodeWriter |
Цикл применения конфигурации
| Шаг | Действие |
|---|---|
| 1 | При наличии kubeconfig синхронизирует NodeConfig и кеш NCI из кластера |
| 2 | Считает checksum локального /etc/std/nci.json |
| 3 | Сверяет checksum с аннотацией node.shturval.tech/initchecksum |
| 4 | Объединяет локальный init NCI и кешированные NCI в /etc/std/merged.json |
| 5 | Применяет итоговую конфигурацию |
| 6 | При результате NotRequired помечает NCI как Applied и ставит ConfigApplied=True |
| 7 | При результате Reboot или DrainOnly помечает NCI как UpdatePending, выставляет rebootrequired=true и ждёт rebootallowed=true |
Перезагрузка и повторное применение
| Сценарий | Поведение |
|---|---|
FullReboot |
Демон выполняет системную перезагрузку после разрешения от оператора |
DrainOnly |
После разрешения от оператора повторно применяет конфигурацию без физической перезагрузки |
6. Параметры оператора и демона
Оператор shturval-node-config
Флаги процесса
| Параметр | По умолчанию | Назначение |
|---|---|---|
--metrics-bind-address |
0 |
Адрес endpoint метрик; 0 отключает метрики |
--health-probe-bind-address |
:8081 |
Адрес health probe |
--leader-elect |
false |
Включение leader election |
--metrics-secure |
true |
Публикация метрик по HTTPS |
--enable-http2 |
false |
Включение HTTP/2 |
--debug |
false |
Режим отладочного логирования |
Переменные окружения
| Переменная | Обязательность | Значение по умолчанию | Назначение |
|---|---|---|---|
namespace |
Обязательна | — | Namespace оператора для формирования имени ServiceAccount в webhook |
serviceAccountName |
Обязательна | — | Имя ServiceAccount оператора |
disable-drain-label-key |
Необязательна | node.shturval.tech/disable-drain |
Ключ метки отключения дрейна |
apply-as-is-label-key |
Необязательна | node.shturval.tech/apply-as-is |
Ключ метки немедленного reboot без дрейна |
Демон std
Глобальные флаги CLI
| Параметр | По умолчанию | Назначение |
|---|---|---|
--kubeconfig |
/etc/kubernetes/kubelet.conf |
Альтернативный путь к kubeconfig; в рабочей эксплуатации используется системный kubeconfig узла |
-v |
0 |
Уровень подробности логирования |
--logtostderr |
false |
Вывод логов в stderr |
--stderrthreshold |
2 |
Минимальный уровень логов для stderr |
Основные команды
| Команда | Назначение |
|---|---|
std daemon |
Запуск основного цикла демона |
std node init -f /etc/std/init.yaml |
Присоединение узла к кластеру |
std node prepare |
Локальное применение init NCI без подключения к кластеру |
std node preinit |
Подготовка init-файлов |
std node reset |
Сброс узла |
std node status |
Просмотр статуса применения конфигурации |
std node info |
Просмотр информации об узле |
std version |
Просмотр версии бинарника |
Эксплуатационные ограничения
| Ограничение | Следствие для администратора |
|---|---|
Запуск std требует root-доступа |
Демон должен выполняться от root или через systemd unit |
Файл /etc/kubernetes/kubelet.conf фиксирован как основной kubeconfig |
Изменение этого пути не относится к штатной эксплуатации и требует выпуска новой версии |
При отсутствии /etc/std/nci.json демон только ожидает файл |
Перед вводом узла в работу нужно подготовить локальный init NCI |
| Повтор синхронизации очереди выполняется каждые 60 секунд | Между изменением конфигурации и повторной попыткой может быть технологическая задержка |
7. Справочник CRD/API
Группа API контура: node.shturval.tech, версия v1beta2.
NodeConfig
NodeConfig создаётся автоматически для каждого Node и не предназначен для ручного создания.
Характеристики ресурса
| Свойство | Значение |
|---|---|
| Short name | nc |
| Scope | Cluster |
| Назначение | Представляет конфигурацию и статус применения для конкретного узла |
spec
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
applygroup |
string |
Да | Группа координации перезагрузок: workers или controlplane |
donotdrain |
bool |
Нет | Запрещает дрейн перед перезагрузкой |
nodeconfigitems |
[]string |
Нет | Список имён NodeConfigItem, которые должны быть применены к узлу |
status
| Поле | Тип | Описание |
|---|---|---|
ncistate |
[]NodeConfigItemReference |
Состояние применения каждого NCI: updatepending, scheduled, applied, orphaned |
rebootrequired |
bool |
Демон сообщил о необходимости перезагрузки |
rebootscheduled |
bool |
Оператор поставил узел в очередь на перезагрузку |
rebootallowed |
bool |
Оператор разрешил перезагрузку |
updateinitnode |
bool |
Узел выбран первым для Kubernetes upgrade |
ready |
bool |
Все NCI применены, перезагрузка не требуется |
lastdrainstarted |
metav1.Time |
Время начала последнего дрейна |
conditions |
[]metav1.Condition |
Условия применения и перезагрузки |
Conditions
| Condition | Значение True |
Значение False |
|---|---|---|
NodeDrained |
Дрейн завершён, не требуется или превысил таймаут | Дрейн ещё идёт или завершился ошибкой |
RebootScheduled |
Перезагрузка запланирована | Слоты заняты или возник конфликт планирования |
ConfigApplied |
Конфигурация применена | Идёт применение, произошла ошибка, обнаружено расхождение checksum, ошибка слияния или ожидание разрешения на перезагрузку |
Пример
apiVersion: node.shturval.tech/v1beta2
kind: NodeConfig
metadata:
name: node-1
labels:
kubernetes.io/os: linux
node.shturval.tech/applygroup: workers
spec:
applygroup: workers
donotdrain: false
nodeconfigitems:
- packages-basic-install
- kubelet-basic
NodeConfigItem
NodeConfigItem создаётся администратором и задаёт переиспользуемый шаблон конфигурации для группы узлов, выбранных по меткам.
Характеристики ресурса
| Свойство | Значение |
|---|---|
| Short name | nci |
| Scope | Cluster |
| Назначение | Шаблон конфигурации, который применяется к набору NodeConfig по селектору |
spec
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
nodeconfigselector |
map[string]string |
Да | Селектор выбора NodeConfig |
priority |
uint |
Нет | Приоритет слияния конфигураций |
kubeversion |
string |
Нет | Версия Kubernetes для upgrade по схеме init-node first |
repositories |
Repos |
Нет | Репозитории пакетов ОС |
packages |
Packages |
Нет | Пакеты ОС |
files |
Files |
Нет | Файлы и директории |
ntp |
*NTP |
Нет | NTP-серверы и часовой пояс |
certificates |
Certificates |
Нет | CA/TLS сертификаты ОС |
runtimecfg |
*ContainerRuntimeConfig |
Нет | Конфигурация containerd |
kernelarguments |
KernelArguments |
Нет | Параметры ядра |
kernelmodules |
KernelModules |
Нет | Модули ядра |
sysctl |
*Sysctl |
Нет | Параметры sysctl |
systemdunits |
SystemdUnits |
Нет | Управление systemd unit |
users |
Users |
Нет | Пользователи ОС |
swap |
*Swap |
Нет | Управление swap |
iptables |
*Iptables |
Нет | Настройки iptables |
selinux |
*Selinux |
Нет | Режим SELinux |
kubecerts |
*KubeCerts |
Нет | Ротация сертификатов Kubernetes |
kubelet |
*Kubelet |
Нет | Параметры kubelet |
kubeapi |
*KubeAPI |
Нет | Параметры kube-apiserver |
status
| Поле | Тип | Описание |
|---|---|---|
selectednodeconfigs |
[]string |
Список NodeConfig, подходящих по селектору |
updatednodeconfigs |
[]string |
Список NodeConfig, на которых NCI уже применён |
ready |
bool |
Все выбранные NodeConfig обновлены и список не пуст |
applied |
string |
Строка формата UpdatedNodes/SelectedNodes |
Примеры
Минимальный пример установки пакетов:
apiVersion: node.shturval.tech/v1beta2
kind: NodeConfigItem
metadata:
name: packages-basic-install
spec:
nodeconfigselector:
node-role.kubernetes.io/worker: ""
packages:
- name: chrony
state: present
- name: curl
state: present
Пример настройки kubelet:
apiVersion: node.shturval.tech/v1beta2
kind: NodeConfigItem
metadata:
name: kubelet-basic
spec:
nodeconfigselector:
node-role.kubernetes.io/worker: ""
kubelet:
cpuManagerPolicy: none
memoryManagerPolicy: None
maxPods: 110
hairpinMode: promiscuous-bridge
Данные, которые демон пишет в NodeConfig
Аннотации
| Аннотация | Назначение |
|---|---|
node.shturval.tech/initchecksum |
Контроль расхождения между локальным init NCI и состоянием в кластере |
Состояния применения
| Значение | Смысл |
|---|---|
Working |
Конфигурация применяется |
Done |
Конфигурация успешно применена |
Unreconcilable |
Конфигурация не может быть приведена к требуемому состоянию |
Degraded |
Зафиксирована эксплуатационная ошибка вне самой конфигурации |