Kube-state-metrics#

Kube-state-metrics - это инструмент, предназначенный для сбора и предоставления метрик о состоянии объектов в кластере Kubernetes. Это легковесный агент, который слушает API-сервер Kubernetes и генерирует метрики на основе текущего состояния ресурсов.

Основные задачи и возможности
  • Сбор метрик о состоянии объектов Kubernetes:

    KSM собирает данные о состоянии таких объектов, как Pod, Deployment, Service, узлы и другие элементы инфраструктуры кластера.

  • Генерация метрик в формате, совместимом с Prometheus:

    Метрики доступны через HTTP-эндпоинт и могут быть легко собраны Prometheus или другими системами мониторинга.

  • Интеграция с Kubernetes API:

    Kube-state-metrics взаимодействует напрямую с API-сервером Kubernetes, отслеживая изменения в состоянии кластера и предоставляя актуальную информацию.

  • Поддержка мониторинга и автоматизации:

    Полученные метрики могут использоваться для построения панелей, анализа состояния кластера, выявления проблем и автоматического реагирования.

  • Простота развертывания и использования:

    Kube-state-metrics легко устанавливается в кластер как стандартный Kubernetes-компонент и не требует сложной настройки.

Примечание

Kube-state-metrics устанавливается по умолчанию с компонентом Monitoring, автоматически расширен для сбора метрик с CRD DropApp, таких как Component и Tool.

Конфигурация values#

Значения можно переопределить через редактирование инструмента с именем kube-state-metrics и указанием нужных values в spec.values. Общее описание конфигурации values для инструментов описано в разделе «Конфигурации инструментов дополнительных компонентов».

prometheusScrape - включение автоматического обнаружения Prometheus#

Параметр

Описание

Значение по умолчанию

prometheusScrape

Включает автоматическое обнаружение сервиса Prometheus для сбора метрик

true

image - настройки образа контейнера#

Параметр

Описание

Значение по умолчанию

image.repository

Репозиторий Docker-образа Kube-state-metrics с поддержкой шаблонов

'{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-kube-state-metrics/kube-state-metrics'

image.tag

Версия образа Kube-state-metrics

"v2.15.0"

image.sha

SHA-хеш образа для обеспечения целостности

""

image.pullPolicy

Политика загрузки образа (Always, IfNotPresent, Never)

IfNotPresent

image.imagePullSecrets

Список секретов для доступа к приватному реестру образов

[]

autosharding - автоматическое шардирование данных#

Параметр

Описание

Значение по умолчанию

autosharding.enabled

Включает автоматическое шардирование Kube-state-metrics для масштабирования

false

autosharding.replicas

Количество реплик для шардирования (работает только с enabled: true)

1

replicas - количество реплик pod#

Параметр

Описание

Значение по умолчанию

replicas

Количество реплик развертывания Kube-state-metrics

1

revisionHistoryLimit - лимит истории ревизий#

Параметр

Описание

Значение по умолчанию

revisionHistoryLimit

Количество старых ReplicaSet для сохранения истории развертывания

10

extraArgs - дополнительные аргументы командной строки#

Параметр

Описание

Значение по умолчанию

extraArgs

Список дополнительных аргументов для Kube-state-metrics (например, --enable-gzip-encoding)

[]

automountServiceAccountToken - автоматическое монтирование токена сервисного аккаунта#

Параметр

Описание

Значение по умолчанию

automountServiceAccountToken

Автоматически монтировать токен сервисного аккаунта в pod

true

service - настройки сервиса Kubernetes#

Параметр

Описание

Значение по умолчанию

service.port

Порт сервиса для доступа к метрикам

8080

service.type

Тип сервиса Kubernetes (ClusterIP, NodePort, LoadBalancer)

ClusterIP

service.ipDualStack.enabled

Включить поддержку dual-stack IP (IPv4 и IPv6)

false

service.ipDualStack.ipFamilies

Список IP-семейств для dual-stack

["IPv6", "IPv4"]

service.ipDualStack.ipFamilyPolicy

Политика назначения IP-семейств

"PreferDualStack"

service.nodePort

Порт на узле для типа NodePort

0

service.loadBalancerIP

Статический IP для LoadBalancer

""

service.loadBalancerSourceRanges

Список разрешенных CIDR для доступа к LoadBalancer

[]

service.clusterIP

Статический ClusterIP или None для headless-сервиса

""

service.annotations

Аннотации для сервиса

{}

customLabels - пользовательские метки для всех ресурсов#

Параметр

Описание

Значение по умолчанию

customLabels

Пользовательские метки, добавляемые ко всем ресурсам

{}

selectorOverride - переопределение селектора#

Параметр

Описание

Значение по умолчанию

selectorOverride

Переопределение селектора меток для развертывания

{}

releaseLabel - добавление метки релиза#

Параметр

Описание

Значение по умолчанию

releaseLabel

Добавить метку release для совместимости с kube-prometheus-stack

false

hostNetwork - использование сети хоста#

Параметр

Описание

Значение по умолчанию

hostNetwork

Использовать сеть хоста вместо pod сети

false

rbac - настройки ролевого доступа#

Параметр

Описание

Значение по умолчанию

rbac.create

Создавать RBAC ресурсы (Role, ClusterRole, RoleBinding)

true

rbac.useClusterRole

Использовать ClusterRole вместо Role (доступ ко всему кластеру)

true

rbac.extraRules

Дополнительные правила RBAC для пользовательских ресурсов

[]

kubeRBACProxy - настройки kube-rbac-proxy для HTTPS доступа#

Параметр

Описание

Значение по умолчанию

kubeRBACProxy.enabled

Включить kube-rbac-proxy для защищенного доступа к метрикам

false

kubeRBACProxy.image.repository

Репозиторий образа kube-rbac-proxy

'{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-kube-rbac-proxy/kube-rbac-proxy'

kubeRBACProxy.image.tag

Версия образа kube-rbac-proxy

v0.18.2

kubeRBACProxy.image.sha

SHA-хеш образа kube-rbac-proxy

""

kubeRBACProxy.image.pullPolicy

Политика загрузки образа kube-rbac-proxy

IfNotPresent

kubeRBACProxy.extraArgs

Дополнительные аргументы для kube-rbac-proxy

[]

kubeRBACProxy.containerSecurityContext.readOnlyRootFilesystem

Файловая система только для чтения

true

kubeRBACProxy.containerSecurityContext.allowPrivilegeEscalation

Разрешить повышение привилегий

false

kubeRBACProxy.containerSecurityContext.capabilities.drop

Список отзываемых capabilities

["ALL"]

kubeRBACProxy.resources.limits.cpu

Лимит CPU для kube-rbac-proxy

100m

kubeRBACProxy.resources.limits.memory

Лимит памяти для kube-rbac-proxy

128Mi

kubeRBACProxy.resources.requests.cpu

Запрос CPU для kube-rbac-proxy

10m

kubeRBACProxy.resources.requests.memory

Запрос памяти для kube-rbac-proxy

64Mi

kubeRBACProxy.volumeMounts

Монтирование дополнительных томов в kube-rbac-proxy

[]

serviceAccount - настройки сервисного аккаунта#

Параметр

Описание

Значение по умолчанию

serviceAccount.create

Создавать ServiceAccount для kube-state-metrics

true

serviceAccount.name

Имя ServiceAccount (генерируется автоматически, если пусто)

""

serviceAccount.imagePullSecrets

Секреты для доступа к реестру образов

[]

serviceAccount.annotations

Аннотации для ServiceAccount (например, для AWS IAM roles)

{}

serviceAccount.automountServiceAccountToken

Автоматически монтировать токен ServiceAccount

true

env - переменные окружения#

Параметр

Описание

Значение по умолчанию

env

Дополнительные переменные окружения для контейнера

{}

prometheus - настройки мониторинга Prometheus#

Параметр

Описание

Значение по умолчанию

prometheus.monitor.enabled

Создавать ServiceMonitor для Prometheus Operator

false

prometheus.monitor.annotations

Аннотации для ServiceMonitor

{}

prometheus.monitor.additionalLabels

Дополнительные метки для ServiceMonitor

{}

prometheus.monitor.namespace

Namespace для размещения ServiceMonitor

""

prometheus.monitor.namespaceSelector

Селектор namespace для ServiceMonitor

[]

prometheus.monitor.jobLabel

Метка job для идентификации в Prometheus

""

prometheus.monitor.targetLabels

Метки целей для передачи в Prometheus

[]

prometheus.monitor.podTargetLabels

Метки pod для передачи в Prometheus

[]

prometheus.monitor.sampleLimit

Максимальное количество образцов данных, собираемых за один запрос при сканировании метрик

0

prometheus.monitor.targetLimit

Лимит количества целей

0

prometheus.monitor.labelLimit

Лимит количества меток на образец

0

prometheus.monitor.labelNameLengthLimit

Лимит длины имени метки

0

prometheus.monitor.labelValueLengthLimit

Лимит длины значения метки

0

prometheus.monitor.selectorOverride

Переопределение селектора ServiceMonitor

{}

prometheus.monitor.http.interval

Интервал сбора HTTP-метрик

""

prometheus.monitor.http.scrapeTimeout

Время ожидания сбора HTTP-метрик

""

prometheus.monitor.http.proxyUrl

URL-прокси для HTTP-метрик

""

prometheus.monitor.http.enableHttp2

Включить HTTP/2 для ServiceMonitor

false

prometheus.monitor.http.honorLabels

Сохранять оригинальные метки

false

prometheus.monitor.http.metricRelabelings

Правила переименования метрик

[]

prometheus.monitor.http.relabelings

Правила переименования целей

[]

prometheus.monitor.http.scheme

Схема протокола (http/https)

""

prometheus.monitor.http.bearerTokenFile

Файл с bearer token для аутентификации

""

prometheus.monitor.http.bearerTokenSecret

Secret с bearer token

{}

prometheus.monitor.http.tlsConfig

Настройки TLS

{}

prometheus.monitor.metrics.interval

Интервал сбора самомониторинга

""

prometheus.monitor.metrics.scrapeTimeout

Время ожидания сбора самомониторинга

""

prometheus.monitor.metrics.proxyUrl

URL-прокси для самомониторинга

""

prometheus.monitor.metrics.enableHttp2

Включить HTTP/2 для самомониторинга

false

prometheus.monitor.metrics.honorLabels

Сохранять оригинальные метки самомониторинга

false

prometheus.monitor.metrics.metricRelabelings

Правила переименования метрик самомониторинга

[]

prometheus.monitor.metrics.relabelings

Правила переименования целей самомониторинга

[]

prometheus.monitor.metrics.scheme

Схема протокола самомониторинга

""

prometheus.monitor.metrics.bearerTokenFile

Файл с bearer token для самомониторинга

""

prometheus.monitor.metrics.bearerTokenSecret

Secret с bearer token для самомониторинга

{}

prometheus.monitor.metrics.tlsConfig

Настройки TLS для самомониторинга

{}

scrapeconfig - настройки ScrapeConfig для Prometheus#

Параметр

Описание

Значение по умолчанию

scrapeconfig.enabled

Создавать ScrapeConfig вместо ServiceMonitor

false

scrapeconfig.annotations

Аннотации для ScrapeConfig

{}

scrapeconfig.additionalLabels

Дополнительные метки для ScrapeConfig

{}

scrapeconfig.jobName

Имя job в ScrapeConfig

kube-state-metrics

scrapeconfig.sampleLimit

Максимальное количество образцов данных, собираемых за один запрос при сканировании метрик

0

scrapeconfig.targetLimit

Лимит количества целей

0

scrapeconfig.labelLimit

Лимит количества меток на образец

0

scrapeconfig.labelNameLengthLimit

Лимит длины имени метки

0

scrapeconfig.labelValueLengthLimit

Лимит длины значения метки

0

scrapeconfig.staticConfigLabels

Статические метки для конфигурации

{}

scrapeconfig.scrapeInterval

Интервал сбора метрик

""

scrapeconfig.scrapeTimeout

Время ожидания сбора метрик

""

scrapeconfig.proxyUrl

URL-прокси

""

scrapeconfig.enableHttp2

Включить HTTP/2

false

scrapeconfig.honorLabels

Сохранять оригинальные метки

true

scrapeconfig.metricRelabelings

Правила переименования метрик

[]

scrapeconfig.relabelings

Правила переименования целей

[]

scrapeconfig.scheme

Схема протокола

""

scrapeconfig.tlsConfig

Настройки TLS

{}

podSecurityPolicy - политики безопасности pod#

Параметр

Описание

Значение по умолчанию

podSecurityPolicy.enabled

Создавать PodSecurityPolicy (устарело в Kubernetes v1.25+)

false

podSecurityPolicy.annotations

Аннотации для PodSecurityPolicy

{}

additionalVolumes - дополнительные тома#

Параметр

Описание

Значение по умолчанию

additionalVolumes

Список дополнительных томов для развертывания

[]

networkPolicy - сетевые политики#

Параметр

Описание

Значение по умолчанию

networkPolicy.enabled

Создавать NetworkPolicy для ограничения сетевого доступа

false

networkPolicy.flavor

Тип NetworkPolicy (kubernetes для стандартного, cilium для Cilium)

kubernetes

securityContext - контекст безопасности pod#

Параметр

Описание

Значение по умолчанию

securityContext.enabled

Включить контекст безопасности для pod

true

securityContext.runAsGroup

ID группы для запуска процессов в pod

65534

securityContext.runAsUser

ID пользователя для запуска процессов в pod

65534

securityContext.fsGroup

ID группы для владения томами

65534

securityContext.runAsNonRoot

Запускать процессы от непривилегированного пользователя

true

securityContext.seccompProfile.type

Тип seccomp профиля для контейнера

RuntimeDefault

containerSecurityContext - контекст безопасности контейнера#

Параметр

Описание

Значение по умолчанию

containerSecurityContext.readOnlyRootFilesystem

Корневая файловая система только для чтения

true

containerSecurityContext.allowPrivilegeEscalation

Разрешить повышение привилегий

false

containerSecurityContext.capabilities.drop

Список отзываемых Linux capabilities

["ALL"]

nodeSelector - селектор узлов для размещения#

Параметр

Описание

Значение по умолчанию

nodeSelector

Селектор узлов для размещения pod

{}

affinity - правила сродства pod#

Параметр

Описание

Значение по умолчанию

affinity

Правила аффинности для размещения pod на узлах

{}

tolerations - допуски для размещения на узлах#

Параметр

Описание

Значение по умолчанию

tolerations

Список допусков для размещения pod на узлах с taint

[]

topologySpreadConstraints - ограничения распределения по топологии#

Параметр

Описание

Значение по умолчанию

topologySpreadConstraints

Ограничения для равномерного распределения pod по зонам/узлам

[]

annotations - аннотации для deployment#

Параметр

Описание

Значение по умолчанию

annotations

Аннотации для deployment/statefulset

{}

podAnnotations - аннотации для pod#

Параметр

Описание

Значение по умолчанию

podAnnotations

Аннотации для pod

{}

podLabels - метки для pod#

Параметр

Описание

Значение по умолчанию

podLabels

Дополнительные метки для pod

{}

podDisruptionBudget - бюджет нарушения работы pod#

Параметр

Описание

Значение по умолчанию

podDisruptionBudget

Настройки PodDisruptionBudget для контроля количества недоступных pod

{}

metricAllowlist - белый список метрик#

Параметр

Описание

Значение по умолчанию

metricAllowlist

Список разрешенных метрик (имена или регулярные выражения)

[]

metricDenylist - черный список метрик#

Параметр

Описание

Значение по умолчанию

metricDenylist

Список запрещенных метрик (взаимоисключающий с allowlist)

[]

metricLabelsAllowlist - белый список меток метрик#

Параметр

Описание

Значение по умолчанию

metricLabelsAllowlist

Список Kubernetes меток для включения в метрики (например, namespaces=[team,env])

[]

metricAnnotationsAllowList - белый список аннотаций метрик#

Параметр

Описание

Значение по умолчанию

metricAnnotationsAllowList

Список Kubernetes аннотаций для включения в метрики

[]

collectors - активные коллекторы ресурсов#

Параметр

Описание

Значение по умолчанию

collectors

Список включенных коллекторов Kubernetes ресурсов

[certificatesigningrequests, configmaps, cronjobs, daemonsets, deployments, endpoints, horizontalpodautoscalers, ingresses, jobs, leases, limitranges, mutatingwebhookconfigurations, namespaces, networkpolicies, nodes, persistentvolumeclaims, persistentvolumes, poddisruptionbudgets, pods, replicasets, replicationcontrollers, resourcequotas, secrets, services, statefulsets, storageclasses, validatingwebhookconfigurations, volumeattachments]

kubeconfig - настройки kubeconfig файла#

Параметр

Описание

Значение по умолчанию

kubeconfig.enabled

Включить использование kubeconfig-файла вместо in-cluster конфигурации

false

kubeconfig.secret

Настройки Secret с base64-закодированным kubeconfig-файлом

{}

customResourceState - метрики пользовательских ресурсов#

Параметр

Описание

Значение по умолчанию

customResourceState.enabled

Включить сбор метрик для пользовательских ресурсов (CRD)

false

customResourceState.config

Конфигурация для сбора метрик пользовательских ресурсов

{}

releaseNamespace - ограничение namespace#

Параметр

Описание

Значение по умолчанию

releaseNamespace

Собирать метрики только из namespace релиза

false

namespaces - список разрешенных namespace#

Параметр

Описание

Значение по умолчанию

namespaces

Список namespace через запятую для сбора метрик (по умолчанию все)

""

namespacesDenylist - черный список namespace#

Параметр

Описание

Значение по умолчанию

namespacesDenylist

Список исключенных namespace через запятую

""

namespaceOverride - переопределение namespace развертывания#

Параметр

Описание

Значение по умолчанию

namespaceOverride

Переопределить namespace для развертывания Kube-state-metrics

""

resources - ресурсы контейнера#

Параметр

Описание

Значение по умолчанию

resources

Запросы и лимиты ресурсов (CPU, память) для контейнера

{}

kubeTargetVersionOverride - переопределение версии Kubernetes#

Параметр

Описание

Значение по умолчанию

kubeTargetVersionOverride

Принудительное указание версии Kubernetes для apiGroups в PodSecurityPolicy

""

selfMonitor - самомониторинг Kube-state-metrics#

Параметр

Описание

Значение по умолчанию

selfMonitor.enabled

Включить самомониторинг Kube-state-metrics (собственные метрики)

false

verticalPodAutoscaler - вертикальное автомасштабирование#

Параметр

Описание

Значение по умолчанию

verticalPodAutoscaler.enabled

Включить Vertical Pod Autoscaler для Kube-state-metrics

false

verticalPodAutoscaler.controlledResources

Список контролируемых ресурсов (CPU, память)

[]

verticalPodAutoscaler.maxAllowed

Максимально разрешенные ресурсы

{}

verticalPodAutoscaler.minAllowed

Минимально разрешенные ресурсы

{}

volumeMounts - монтирование томов в контейнер#

Параметр

Описание

Значение по умолчанию

volumeMounts

Список дополнительных точек монтирования томов в контейнер

[]

volumes - дополнительные тома#

Параметр

Описание

Значение по умолчанию

volumes

Список дополнительных томов для pod

[]

extraManifests - дополнительные Kubernetes манифесты#

Параметр

Описание

Значение по умолчанию

extraManifests

Список дополнительных объектов Kubernetes для развертывания

[]

containers - дополнительные контейнеры#

Параметр

Описание

Значение по умолчанию

containers

Список дополнительных sidecar контейнеров в pod

[]

initContainers - init-контейнеры#

Параметр

Описание

Значение по умолчанию

initContainers

Список init-контейнеров для выполнения перед основным контейнером

[]

dnsPolicy - политика DNS#

Параметр

Описание

Значение по умолчанию

dnsPolicy

Политика DNS для pod (ClusterFirst, Default, None)

ClusterFirst

dnsConfig - конфигурация DNS#

Параметр

Описание

Значение по умолчанию

dnsConfig

Дополнительные настройки DNS для pod

{}

startupProbe - проверка запуска#

Параметр

Описание

Значение по умолчанию

startupProbe.enabled

Включить startup probe для проверки готовности при запуске

false

startupProbe.failureThreshold

Количество неудачных попыток до признания неудачного запуска

3

startupProbe.httpGet.httpHeaders

HTTP-заголовки для startup probe

[]

startupProbe.httpGet.scheme

Схема протокола для startup probe

http

startupProbe.initialDelaySeconds

Задержка перед первой проверкой startup probe

0

startupProbe.periodSeconds

Интервал между проверками startup probe

10

startupProbe.successThreshold

Количество успешных проверок для признания успешного запуска

1

startupProbe.timeoutSeconds

Время ожидания выполнения startup probe

5

livenessProbe - проверка жизнеспособности#

Параметр

Описание

Значение по умолчанию

livenessProbe.failureThreshold

Количество неудачных попыток до перезапуска контейнера

3

livenessProbe.httpGet.httpHeaders

HTTP-заголовки для liveness probe

[]

livenessProbe.httpGet.scheme

Схема протокола для liveness probe

http

livenessProbe.initialDelaySeconds

Задержка перед первой проверкой liveness probe

5

livenessProbe.periodSeconds

Интервал между проверками liveness probe

10

livenessProbe.successThreshold

Количество успешных проверок для признания живого контейнера

1

livenessProbe.timeoutSeconds

Время ожидания выполнения liveness probe

5

readinessProbe - проверка готовности#

Параметр

Описание

Значение по умолчанию

readinessProbe.failureThreshold

Количество неудачных попыток до исключения из сервиса

3

readinessProbe.httpGet.httpHeaders

HTTP-заголовки для readiness probe

[]

readinessProbe.httpGet.scheme

Схема протокола для readiness probe

http

readinessProbe.initialDelaySeconds

Задержка перед первой проверкой readiness probe

5

readinessProbe.periodSeconds

Интервал между проверками readiness probe

10

readinessProbe.successThreshold

Количество успешных проверок для признания готового контейнера

1

readinessProbe.timeoutSeconds

Время ожидания выполнения readiness probe

5