Модуль upmeter проверяет доступность Deckhouse Kubernetes Platform (DKP) и состояние компонентов кластера в реальном времени. Результаты проверок отображаются на дашбордах.
Подробнее с настройками модуля и примерами его использования можно ознакомиться в соответствующем разделе документации.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля upmeter на уровне 2 модели C4 и его взаимодействия с другими компонентами DKP изображены на следующей диаграмме:
Номерами на схеме отмечен порядок прохождения запроса пользователя к компонентам status и webui.
На шагах 1, 2 и 3 реализуется обработка запроса Ingress NGINX Controller с обязательной аутентификацией пользователя в единой системе аутентификации платформы, реализуемой модулем user-authn. Подробнее с описанием архитектуры модуля user-authn можно ознакомиться в соответствующем разделе документации.
Компоненты модуля
Модуль состоит из следующих компонентов:
-
Upmeter (StatefulSet) — контроллер, выполняющий следующие операции:
- отслеживает кастомный ресурс Downtime и рассчитывает доступность компонентов DKP на основе интервалов простоя в этом ресурсе;
- хранит метрики доступности компонентов DKP в локальной базе SQLite;
- принимает и обрабатывает данные проверок компонентов DKP;
- обрабатывает API-запросы на получение информации о доступности платформы;
- отслеживает кастомный ресурс UpmeterRemoteWrite и отправляет результаты проб на эндпоинт, указанный в этом ресурсе, по протоколу Prometheus Remote Write.
Состоит из следующих контейнеров:
- migrator — init-контейнер, применяющий миграцию базы данных SQLite компонента;
- upmeter — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к API upmeter.
-
Upmeter-agent (DaemonSet) — компонент, работающий на master-узлах кластера и выполняющий на регулярной основе следующие группы проверок:
- control-plane — проверка доступности Kubernetes API, а также проверки работы контроллеров control plane кластера;
- deckhouse — проверка состояния кластера DKP, а также проверка работоспособности deckhouse-контроллера модуля
deckhouse; - extensions — проверки, что у всех расширений есть хотя бы один под в состоянии
Ready; - load-balancing — проверки доступности сервисов, обеспечивающих сетевую балансировку;
- monitoring-and-autoscaling — проверки того, что подсистема Observability исправно работает и собирает метрики с системных компонентов;
- nginx — проверки того, что у всех Ingress-контроллеров есть хотя бы один под в состоянии
Ready; - nodegroups — проверка количества
desiredузлов в каждой NodeGroup; - synthetic — проверка сетевого взаимодействия между узлами кластера через HTTP-запросы к компоненту smoke-mini-[a-e].
В группу проверок control-plane входят следующие пробы:
- apiserver — upmeter-agent проверяет доступность Kubernetes API;
- basic-functionality — upmeter-agent проверяет базовую работу Kubernetes API через жизненный цикл ConfigMap;
- namespace — upmeter-agent создаёт неймспейс
upmeter-probe-namespaceи после проверки удаляет его; - scheduler — upmeter-agent создаёт под с именем
upmeter-probe-scheduler, проверяет, что он назначен на какой-либо узел кластера, и удаляет его; - controller-manager — upmeter-agent создаёт StatefulSet с именем
upmeter-probe-controller-managerи с заведомо несуществующим контейнером в спецификации создаваемого пода, проверяет, что нужный под создался и находится в ожидаемом состоянии, после чего удаляет StatefulSet; - cert-manager — upmeter-agent создаёт ресурс Certificate (самоподписанный) с именем
upmeter-probe-cert-manager, проверяет, что cert-manager сформировал соответствующий ресурс Secret, после чего выполняет удаление созданных ресурсов Certificate и Secret.
Для проверки работоспособности deckhouse-контроллера выполняется следующая последовательность действий:
- upmeter-agent создаёт или обновляет кастомный ресурс UpmeterHookProbe;
- deckhouse-контроллер следит за этим ресурсом и выполняет хук для обновления ресурса;
- upmeter-agent также следит за ресурсом UpmeterHookProbe и при изменении проверяет их корректность.
Проверки или группы проверок могут быть отключены в параметре
.spec.settings.disabledProbesмодуля.Собранные результаты проб upmeter-agent отправляет через HTTP-запрос
POST /downtimeв upmeter.Состоит из следующих контейнеров:
- chown-volume-data — init-контейнер, устанавливающий необходимые права доступа на каталог
/var/lib/upmeter/agentна узле кластера; - migrator — init-контейнер, применяющий миграцию базы данных SQLite компонента;
- agent — основной контейнер.
-
Smoke-mini-[a-e] (StatefulSet) — компонент для синтетических проверок связности. Он состоит из одного контейнера smoke-mini. При получении запроса от upmeter-agent экземпляры smoke-mini-[a-e] выполняют запросы друг к другу и к DNS-сервису кластера, после чего возвращают результаты проверок.
При установке модуля
upmeter, deckhouse-контроллер модуляdeckhouseрегистрирует хук, который распределяет экземпляры StatefulSet по разным узлам кластера (при такой возможности) и после этого каждую минуту перераспределяет по одной реплике StatefulSet на другой узел. -
Status (Deployment) — компонент, состоящий из одного контейнера status и реализующий веб-страницу с текущим статусом доступности всех компонентов DKP.
-
Webui (Deployment) — компонент, состоящий из одного контейнера webui и реализующий дашборд для просмотра истории доступности каждого компонента DKP.
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
-
Kube-apiserver:
- управление кастомными ресурсами UpmeterRemoteWrite и UpmeterHookProbe;
- обработка кастомных ресурсов Downtime;
- авторизация запросов к upmeter;
- создание, проверка и удаление стандартных ресурсов Pod, StatefulSet, Namespace, Secret и кастомных ресурсов Certificate.
-
Внешние системы хранения метрик — отправка результатов проверок по протоколу Prometheus Remote Write.
С модулем взаимодействуют следующие внешние компоненты:
-
Prometheus-main — использование правила мониторинга и метрик, связанных с модулем upmeter.
-
Сontroller nginx — пересылка внешних запросов пользователя к веб-интерфейсу модуля.