Доступно в редакциях:  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 и evictionSoft kubelet. Они кэшируются на 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"}