Об этом проекте

kube-state-metrics (KSM) — это сервис, который прослушивает API-сервер Kubernetes и генерирует метрики о состоянии объектов кластера, таких как deployments, nodes и pods. Вместо мониторинга работоспособности отдельных компонентов Kubernetes он сообщает об объектах внутри кластера. Метрики публикуются в виде простого текста на HTTP-эндпоинте /metrics (порт по умолчанию 8080) и предназначены для Prometheus или совместимых сборщиков; эндпоинт отражает текущее состояние кластера, поэтому удалённые объекты исчезают из него. Философия дизайна: KSM генерирует метрики из объектов Kubernetes API без изменений, поэтому его возможности имеют тот же уровень стабильности, что и лежащие в основе объекты API. Он публикует необработанные, неизменённые данные, а не применяет эвристики в стиле kubectl, оставляя интерпретацию пользователям. Метрики на основе alpha API исключены из гарантий стабильности. Ключевые возможности, описанные в README: - Документация по метрикам в каталоге docs, а также метрики состояния пользовательских ресурсов (функциональность заморожена в пользу resource-state-metrics). - Обработка меток: имена меток Kubernetes преобразуются в совместимые с Prometheus имена (например, app.kubernetes.io/name становится label_app_kubernetes_io_name), с автоматическими суффиксами _conflictN при коллизиях преобразования. - Списки разрешений/запретов поддерживают регулярные выражения ECMAScript, включая lookaround, с ограничением вычисления в одну минуту. - Собственные метрики на отдельном хосте/порту телеметрии (по умолчанию 8081), включая счётчики успехов и ошибок list/watch, гистограммы длительности HTTP-запросов, информацию о сборке, порядковый номер шарда/общее число шардов, а также хеш файла конфигурации и статус перезагрузки. - Рекомендации по масштабированию: ориентировочно 250MiB памяти и 0.1 ядра как общее правило; низкие лимиты CPU могут вызывать накопление очереди и повышенное потребление памяти. Приведены показатели задержки из теста масштабирования на 100 узлах (Perc50 ~260ms, Perc90 ~475ms, Perc99 ~907ms). - Горизонтальное шардирование через --shard и --total-shards, используя md5 от UID объекта по модулю общего числа шардов; автоматическое шардирование в StatefulSet с помощью --pod и --pod-namespace (экспериментально); шардирование на основе deployment с явными индексами шардов; и шардирование daemonset для метрик pod через --node, с --track-unscheduled-pods для неназначенных pod. - Фильтрация ресурсов на /metrics с помощью параметров запроса resources и exclude_resources, при этом exclude имеет приоритет. - Эндпоинты работоспособности: /healthz и /livez на основном порту, /readyz на порту телеметрии. Установка и использование: установка через go get k8s.io/kube-state-metrics/v2, сборка контейнера с помощью make container и развёртывание с помощью kubectl apply -f examples/standard. Стек kube-prometheus уже включает KSM как компонент. Пользователям GKE может потребоваться привязка cluster-admin из-за строгих разрешений роли. В README также сравнивается KSM с metrics-server: metrics-server предоставляет агрегированные метрики ресурсов от Kubelet через Metrics API, тогда как KSM генерирует новые метрики из состояния объектов и хранит снимок в памяти. Ни один из них сам по себе не экспортирует метрики в сторонние назначения.