Metrics-server#

Metrics-server – легковесный компонент DropApp, предназначенный для сбора и агрегации метрик использования ресурсов (CPU и памяти) на уровне pod и узлов кластера.

Основные задачи и возможности
  • Сбор метрик в реальном времени: агрегирует данные о потреблении CPU и памяти с kubelet на каждом узле кластера.

  • Интеграция с Kubernetes API: предоставляет доступ к метрикам через API-группу metrics.k8s.io, обеспечивая работу команд kubectl top pods и kubectl top nodes.

  • Поддержка автоматического масштабирования: служит основным источником данных для Horizontal Pod Autoscaler (HPA), позволяя динамически изменять количество pod в зависимости от нагрузки.

  • Мониторинг ресурсов: предоставляет базовые показатели потребления ресурсов узлами и контейнерами для оперативной оценки состояния инфраструктуры.

  • Простота развертывания: устанавливается как стандартное дополнение (add-on) Kubernetes и поддерживает горизонтальное масштабирование для работы в крупных кластерах.

Примечание

Metrics-server устанавливается по умолчанию в составе компонента «Monitoring».

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

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

image – параметры контейнерного образа#

Параметр

Описание

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

image.repository

Репозиторий контейнерного образа Metrics-server

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

image.tag

Тег образа контейнера

"v0.9.0"

image.pullPolicy

Политика загрузки образа.
Возможные значения: Always, IfNotPresent, Never

IfNotPresent

imagePullSecrets – Secret для загрузки образов#

Параметр

Описание

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

imagePullSecrets

Список Secret для загрузки образа контейнера из приватных реестров.
Пример конфигурации:

- name: registrySecretName

[]

nameOverride – переопределение имени чарта#

Параметр

Описание

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

nameOverride

Переопределение базового имени ресурсов чарта для генерации имен

""

fullnameOverride – полное переопределение имени чарта#

Параметр

Описание

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

fullnameOverride

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

""

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

Параметр

Описание

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

serviceAccount.create

Создание ServiceAccount

true

serviceAccount.annotations

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

{}

serviceAccount.name

Имя ServiceAccount. При пустом значении и create=true имя генерируется автоматически

""

serviceAccount.secrets

Список секретов, монтируемых этим ServiceAccount

[]

rbac – настройки RBAC (управление доступом на основе ролей)#

Параметр

Описание

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

rbac.create

Активация автоматического создания ресурсов RBAC

true

rbac.pspEnabled

Включение PodSecurityPolicy (не поддерживается в Kubernetes 1.25+)

false

apiService – настройки APIService для metrics.k8s.io#

Параметр

Описание

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

apiService.create

Включение автоматического создания объекта APIService для v1beta1.metrics.k8s.io

true

apiService.annotations

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

{}

apiService.insecureSkipTLSVerify

Активация проверки TLS-сертификата при обращении к APIService

true

apiService.caBundle

PEM-кодированный CA Bundle для валидации TLS

""

commonLabels – общие метки для всех ресурсов#

Параметр

Описание

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

commonLabels

Общие метки для всех создаваемых ресурсов

{}

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

Параметр

Описание

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

podLabels

Метки, добавляемые ко всем создаваемым pod

{}

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

Параметр

Описание

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

podAnnotations

Аннотации, добавляемые ко всем создаваемым pod

{}

podSecurityContext – параметры контекста безопасности pod#

Параметр

Описание

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

podSecurityContext

Параметры контекста безопасности pod

{}

securityContext – параметры контекста безопасности контейнера#

Параметр

Описание

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

securityContext.allowPrivilegeEscalation

Активация разрешения на эскалацию привилегий в контейнере

false

securityContext.readOnlyRootFilesystem

Монтирование корневой файловой системы в режиме «только для чтения»

true

securityContext.runAsNonRoot

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

true

securityContext.runAsUser

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

10001

securityContext.runAsGroup

ID группы для запуска контейнера

10001

securityContext.seccompProfile.type

Тип профиля Seccomp

RuntimeDefault

securityContext.capabilities.drop

Список возможностей (capabilities), отзываемых у контейнера

- ALL

priorityClassName – имя класса приоритета pod#

Параметр

Описание

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

priorityClassName

Имя PriorityClass для pod

system-cluster-critical

containerPort – порт контейнера#

Параметр

Описание

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

containerPort

Порт контейнера Metrics-server

10250

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

Параметр

Описание

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

hostNetwork.enabled

Активация использования сети хоста. Необходимо при альтернативной overlay-сетевой настройке, когда API-сервер не может связаться с Metrics-server

false

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

Параметр

Описание

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

replicas

Количество реплик pod

1

revisionHistoryLimit – количество сохраняемых ресурсов для отката#

Параметр

Описание

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

revisionHistoryLimit

Количество предыдущих версий ресурса, сохраняемых для отката

~

updateStrategy – стратегия обновления ресурсов#

Параметр

Описание

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

updateStrategy

Стратегия обновления ресурса.
Пример конфигурации:

type: RollingUpdate
rollingUpdate:
  maxSurge: 0
  maxUnavailable: 1

{}

podDisruptionBudget – ограничение одновременной недоступности pod#

Параметр

Описание

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

podDisruptionBudget.enabled

Включение PodDisruptionBudget

false

podDisruptionBudget.minAvailable

Минимальное количество доступных pod

~

podDisruptionBudget.maxUnavailable

Максимальное количество недоступных pod

~

podDisruptionBudget.unhealthyPodEvictionPolicy

Политика вытеснения (eviction) для неработоспособных pod в PodDisruptionBudget

~

defaultArgs – стандартные аргументы запуска#

Параметр

Описание

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

defaultArgs

Стандартные аргументы командной строки для Metrics-server

- --cert-dir=/tmp
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls

args – аргументы запуска контейнера#

Параметр

Описание

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

args

Аргументы, переопределяющие стандартные аргументы запуска контейнера

[]

livenessProbe – параметры проверки работоспособности#

Параметр

Описание

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

livenessProbe.httpGet.path

HTTP-путь для проверки работоспособности

/livez

livenessProbe.httpGet.port

Порт для проверки работоспособности

https

livenessProbe.httpGet.scheme

Схема подключения для проверки работоспособности

HTTPS

livenessProbe.initialDelaySeconds

Задержка в секундах перед первой проверкой работоспособности

0

livenessProbe.periodSeconds

Интервал в секундах между проверками работоспособности

10

livenessProbe.failureThreshold

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

3

readinessProbe – параметры проверки готовности#

Параметр

Описание

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

readinessProbe.httpGet.path

HTTP-путь для проверки готовности

/readyz

readinessProbe.httpGet.port

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

https

readinessProbe.httpGet.scheme

Схема подключения для проверки готовности

HTTPS

readinessProbe.initialDelaySeconds

Задержка в секундах перед первой проверкой готовности

20

readinessProbe.periodSeconds

Интервал в секундах между проверками готовности

10

readinessProbe.failureThreshold

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

3

service – настройки Service#

Параметр

Описание

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

service.type

Тип Service.
Возможные значения: ClusterIP, NodePort, LoadBalancer

ClusterIP

service.port

Порт Service

443

service.annotations

Аннотации, добавляемые ко всем создаваемым ресурсам

{}

service.labels

Метки, добавляемые ко всем создаваемым ресурсам.
Пример конфигурации:

kubernetes.io/cluster-service: "true"
kubernetes.io/name: "Metrics-server"

{}

addonResizer – настройки sidecar-контейнера addon-resizer#

Параметр

Описание

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

addonResizer.enabled

Активация sidecar-контейнера addon-resizer для автоматического масштабирования ресурсов

false

addonResizer.image.repository

Репозиторий образа addon-resizer

registry.k8s.io/autoscaling/addon-resizer

addonResizer.image.tag

Тег образа контейнера

1.8.23

addonResizer.securityContext.allowPrivilegeEscalation

Активация разрешения на эскалацию привилегий в контейнере

false

addonResizer.securityContext.readOnlyRootFilesystem

Монтирование корневой файловой системы в режиме «только для чтения»

true

addonResizer.securityContext.runAsNonRoot

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

true

addonResizer.securityContext.runAsUser

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

1000

addonResizer.securityContext.seccompProfile.type

Тип профиля Seccomp

RuntimeDefault

addonResizer.securityContext.capabilities.drop

Список возможностей (capabilities), отзываемых у контейнера

- ALL

addonResizer.resources.requests.cpu

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

40m

addonResizer.resources.requests.memory

Запрашиваемые ресурсы памяти для контейнера

25Mi

addonResizer.resources.limits.cpu

Ограничение ресурсов CPU для контейнера

40m

addonResizer.resources.limits.memory

Ограничение ресурсов памяти для контейнера

25Mi

addonResizer.nanny.cpu

Базовое значение CPU для алгоритма масштабирования addon-resizer

0m

addonResizer.nanny.extraCpu

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

1m

addonResizer.nanny.memory

Базовое значение памяти для алгоритма масштабирования addon-resizer

0Mi

addonResizer.nanny.extraMemory

Дополнительная память, выделяемая на единицу роста кластера

2Mi

addonResizer.nanny.minClusterSize

Минимальный размер кластера для активации алгоритма масштабирования nanny

100

addonResizer.nanny.pollPeriod

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

300000

addonResizer.nanny.threshold

Порог изменения размера кластера для инициации пересчета ресурсов

5

metrics – параметры публикации метрик#

Параметр

Описание

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

metrics.enabled

Включение экспорта метрик Metrics-server

false

serviceMonitor – параметры ServiceMonitor#

Параметр

Описание

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

serviceMonitor.enabled

Активация создания ServiceMonitor для Prometheus Operator

true

serviceMonitor.additionalLabels

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

{}

serviceMonitor.interval

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

1m

serviceMonitor.scrapeTimeout

Тайм-аут сбора метрик

10s

serviceMonitor.metricRelabelings

Правила фильтрации и преобразования меток, применяемые к собранным метрикам

[]

serviceMonitor.relabelings

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

[]

resources – запросы и ограничения ресурсов контейнера#

Параметр

Описание

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

resources.requests.cpu

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

100m

resources.requests.memory

Запрашиваемые ресурсы памяти для контейнера

200Mi

resources.limits.cpu

Ограничение ресурсов CPU для контейнера

200m

resources.limits.memory

Ограничение ресурсов памяти для контейнера

300Mi

extraVolumeMounts – дополнительные точки монтирования томов#

Параметр

Описание

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

extraVolumeMounts

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

[]

extraVolumes – дополнительные тома (Volume)#

Параметр

Описание

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

extraVolumes

Дополнительные тома (Volume) для pod

[]

nodeSelector – селектор узлов для планирования pod#

Параметр

Описание

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

nodeSelector

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

{}

tolerations – параметры Toleration для pod#

Параметр

Описание

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

tolerations

Toleration для размещения pod на узлах с ограничениями (taints)

[]

affinity – правила привязки (affinity и anti-affinity) pod к узлам#

Параметр

Описание

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

affinity

Настройки правила привязки (affinity и anti-affinity) pod к узлам

{}

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

Параметр

Описание

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

topologySpreadConstraints

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

[]

dnsConfig – пользовательская конфигурация DNS для pod#

Параметр

Описание

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

dnsConfig

Пользовательская конфигурация DNS для pod

{}

deploymentAnnotations – аннотации для Deployment#

Параметр

Описание

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

deploymentAnnotations

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

{}

schedulerName – имя планировщика#

Параметр

Описание

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

schedulerName

Имя планировщика (scheduler) для pod

""

tmpVolume – временный том#

Параметр

Описание

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

tmpVolume.emptyDir

Настройки EmptyDir для временного тома

{}

tls – настройки TLS#

Параметр

Описание

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

tls.type

Метод управления TLS-сертификатами.
Возможные значения: metrics-server, helm, cert-manager, existingSecret

metrics-server

tls.clusterDomain

DNS-домен кластера для формирования Subject Alternative Names (SAN) сертификата

cluster.local

tls.certManager.addInjectorAnnotations

Автоматическое добавление аннотации cert-manager.io/inject-ca-from в APIService

true

tls.certManager.existingIssuer.enabled

Использование существующего Issuer Cert-manager вместо создания нового

false

tls.certManager.existingIssuer.kind

Тип существующего Issuer Cert-manager.
Возможные значения: Issuer или ClusterIssuer

Issuer

tls.certManager.existingIssuer.name

Имя существующего Issuer Cert-manager

my-issuer

tls.certManager.duration

Запрашиваемый срок действия сертификата

""

tls.certManager.renewBefore

Период до истечения срока действия сертификата для автоматического обновления

""

tls.certManager.annotations

Дополнительные аннотации для Certificate

{}

tls.certManager.labels

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

{}

tls.helm.lookup

Использование Helm lookup для повторного использования Secret, созданного при предыдущей установке Helm

true

tls.helm.certDurationDays

Срок действия сертификата, генерируемого Helm (в днях)

365

tls.existingSecret.name

Имя существующего Secret с TLS-данными

""

tls.existingSecret.lookup

Использование Helm lookup для автоматического заполнения apiService.caBundle из существующего Secret

true