Доступно в редакциях: Open/CE, Core, BE, SE, SE+, Ultimate/EE, Certified Core/CSE Lite (1.73), Certified Pro/CSE Pro (1.73)
Входит в расширения: Биллинг
Стадия жизненного цикла модуля: Общедоступная версия
У модуля есть требования для установки
Модуль monitoring-kubernetes обеспечивает прозрачный и своевременный контроль состояния всех узлов кластера и ключевых инфраструктурных компонентов.
Возможности модуля:
- предоставляет возможность планировать ресурсы инфраструктуры (Capacity planning);
- отслеживает версию container runtime (docker, containerd) на каждом узле и проверяет её на соответствие разрешенным версиям;
- контролирует работоспособность самой подсистемы мониторинга кластера (Dead man’s switch);
- снимает метрики о доступности файловых дескрипторов, сокетов, свободного места и inode на каждом узле;
- следит за корректной работой ключевых компонентов мониторинга: kube-state-metrics, node-exporter, kube-dns;
- проверяет состояние всех узлов (
NotReady,drain,cordon) и своевременно сигнализирует о неполадках; - следит за синхронизацией времени и уведомляет об отклонениях;
- выявляет случаи продолжительного превышения CPU steal (когда узел не получает нужного времени процессора);
- контролирует состояние таблицы Conntrack на узлах;
- показывает поды с некорректными статусами — например, если kubelet не справился со своей работой;
- позволяет экспортировать метрики во внешние системы мониторинга для единой точки контроля.
Мониторинг порогов eviction kubelet
Модуль следит за тем, насколько файловые системы каждого узла близки к порогам eviction kubelet. Deployment kubelet-eviction-thresholds-exporter в пространстве имён d8-monitoring раз в минуту опрашивает каждый kubelet через API-сервер Kubernetes (nodes/proxy):
/configz— действующие настройкиevictionHardиevictionSoftkubelet. Они кэшируются на 5 минут; если обновить их не удалось, кэшированные значения используются до часа./stats/summary— статистика файловых системnodefsиimagefs(ёмкость, свободное место, inode).
Это те же данные, по которым kubelet сам принимает решение об eviction, поэтому экспортер не зависит от container runtime, разметки дисков и доступа к файловой системе узла и работает на любой ОС узла, включая Talos Linux.
Метрики
У всех метрик есть лейбл node.
| Метрика | Лейблы | Описание |
|---|---|---|
kubelet_eviction_resource_available_percent |
filesystem (nodefs, imagefs), resource (bytes, inodes) |
Доступная доля ресурса в процентах от его ёмкости. |
kubelet_eviction_threshold_percent |
filesystem, resource, type (hard, soft) |
Порог eviction в процентах от ёмкости ресурса. Пороги, заданные в абсолютных единицах (например, nodefs.available: "10Gi"), пересчитываются в проценты по ёмкости этой файловой системы. Если у kubelet нет порога для сигнала, серия отсутствует. |
kubelet_eviction_node_collect_success |
— | 1, если данные узла собраны в последнем цикле, иначе 0. При 0 остальные метрики узла отсутствуют. |
kubelet_eviction_node_config_refresh_success |
— | 1, если пороги взяты из недавно полученной конфигурации kubelet, 0, если используется кэшированная конфигурация, потому что обновить её не удалось. |
Метрики imagefs для узла отсутствуют, если kubelet не сообщает об отдельной файловой системе образов в /stats/summary.
Алерты KubeletNodeFSBytesUsage, KubeletNodeFSInodesUsage, KubeletImageFSBytesUsage и KubeletImageFSInodesUsage сравнивают kubelet_eviction_resource_available_percent с kubelet_eviction_threshold_percent и срабатывают, когда доступная доля приближается к мягкому порогу, приближается к жёсткому, опускается ниже него и достигает нуля.
Требования
Экспортер читает конфигурацию kubelet из эндпоинта /configz, который kubelet отдаёт только при включённом enableDebuggingHandlers (значение по умолчанию; от этой же настройки зависят kubectl logs и kubectl exec). Если на узле она выключена, по этому узлу экспортируется только kubelet_eviction_node_collect_success 0.
Миграция с предыдущих версий
Предыдущие версии модуля экспортировали пороги eviction из sidecar-контейнера node-exporter под другими именами, с лейблом mountpoint и без доступной доли:
| Удалённая метрика | Замена |
|---|---|
kubelet_eviction_nodefs_bytes{type="hard"|"soft"} |
kubelet_eviction_threshold_percent{filesystem="nodefs",resource="bytes",type="hard"|"soft"} |
kubelet_eviction_nodefs_inodes{type="hard"|"soft"} |
kubelet_eviction_threshold_percent{filesystem="nodefs",resource="inodes",type="hard"|"soft"} |
kubelet_eviction_imagefs_bytes{type="hard"|"soft"} |
kubelet_eviction_threshold_percent{filesystem="imagefs",resource="bytes",type="hard"|"soft"} |
kubelet_eviction_imagefs_inodes{type="hard"|"soft"} |
kubelet_eviction_threshold_percent{filesystem="imagefs",resource="inodes",type="hard"|"soft"} |
Лейбла mountpoint больше нет: экспортер сообщает о том, что kubelet считает nodefs и imagefs, а не о точке монтирования. Запросы, которые объединяли старые метрики с node_filesystem_avail_bytes или node_filesystem_files_free по mountpoint, могут использовать kubelet_eviction_resource_available_percent напрямую. Например, доступная доля nodefs в сравнении с жёстким порогом:
kubelet_eviction_resource_available_percent{filesystem="nodefs", resource="bytes"}
<
on (node, filesystem, resource)
kubelet_eviction_threshold_percent{filesystem="nodefs", resource="bytes", type="hard"}