Как контролировать использование ресурсов Kubernetes с помощью Metrics Server и Kubectl

Мониторинг использования ресурсов вашего кластера Kubernetes необходим, чтобы вы могли отслеживать производительность и понимать, насколько эффективно работают ваши рабочие нагрузки. Команда kubectl top
передает метрики непосредственно из вашего кластера, предоставляя вам доступ к основным функциям в вашем терминале.
Эта команда обычно не работает сразу в новой среде Kubernetes. Это зависит от надстройки Metrics Server, установленной в вашем кластере. Этот компонент собирает метрики с ваших узлов и модулей и предоставляет API для извлечения данных.
В этой статье мы покажем, как установить Metrics Server и получить доступ к его измерениям с помощью kubectl top
. Вы сможете просматривать потребление ЦП и памяти каждым из ваших узлов и модулей.
Добавление сервера метрик в Kubernetes
Дистрибутивы Kubernetes обычно не поставляются со встроенным сервером метрик. Вы можете легко проверить, есть ли поддержка в вашем кластере, попробовав запустить kubectl top
:
$ kubectl top node
error: Metrics API not available
Сообщение об ошибке подтверждает, что API сервера метрик отсутствует в кластере.
Metrics Server поддерживается сообществом Kubernetes Special Interest Group (SIG). Его можно добавить в ваш кластер, используя простой манифест YAML или диаграмму Helm проекта.
Мы будем использовать файл манифеста для этого руководства. Выполните следующую команду Kubectl, чтобы установить сервер метрик:
$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
Сервер метрик теперь начнет собирать и предоставлять данные о потреблении ресурсов Kubernetes. Если установка завершается с ошибкой, вам следует проверить, соответствует ли ваш кластер требованиям проекта. Metrics Server имеет определенные зависимости, которые могут не поддерживаться в некоторых средах.
Многие дистрибутивы Kubernetes объединяют поддержку Metrics Server с помощью собственной системы дополнений. Вы можете использовать эту команду, чтобы легко добавить Metrics Server в кластер Minikube, например:
$ minikube addons enable metrics-server
Using image k8s.gcr.io/metrics-server/metrics-server:v0.4.2
The 'metrics-server' addon is enabled
Получение показателей с помощью Kubectl Top
Установив Metrics Server, вы можете запустить kubectl top
, чтобы получить доступ к собираемой им информации.
Используйте подкоманду node
, чтобы получить текущее использование ресурсов каждого из узлов в вашем кластере:
$ kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
minikube 249m 3% 847Mi 2%
Подкоманда pod
предоставляет индивидуальные показатели для каждого из ваших модулей:
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
nginx 120m 8Mi
Это отобразит модули в пространстве имен default
. Добавьте флаг --namespace
, если вас интересуют поды в определенном пространстве имен:
$ kubectl top pod --namespace demo-app
NAME CPU(cores) MEMORY(bytes)
nginx 0m 2Mi
Флаг --all-namespaces
также поддерживается для перечисления всех подов в вашем кластере.
Доступ к метрикам может занять несколько минут после создания новых модулей. В конвейере сервера метрик есть задержка, поэтому сама по себе она не становится проблемой производительности.
Команда kubectl top
не перегружает вас десятками метрик. Он фокусируется на освещении основных вопросов использования ЦП и памяти. Этого базового запуска может быть достаточно для сценариев, когда вам просто нужны данные быстро, например, для определения пода, вызвавшего всплеск общего использования.
Одним из источников путаницы могут быть значения 100m
, указанные в поле CPU(cores)
. Команда отображает загрузку ЦП в милликорах. Измерение 1000 м
всегда означает 100% потребление одного ядра ЦП. 500m
указывает на 50% потребление одного ядра, а 2000m
означает, что два ядра заняты.
Изменение порядка сортировки объектов
Команда kubectl top
может дополнительно сортировать список созданных объектов по потреблению ЦП или памяти. Это упрощает быстрое обнаружение узлов или модулей, оказывающих наибольшую нагрузку на ресурсы кластера.
Добавьте флаг --sort-by
со значением cpu
или memory
, чтобы активировать это поведение:
$ kubectl top pod --sort-by=memory
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
nginx-1 249m 3% 1790Mi 5%
nginx-2 150m 1% 847Mi 2%
Фильтрация списка объектов
Как и другие команды Kubectl, флаг --selector
позволяет фильтровать список объектов по элементам с определенными метками:
$ kubectl top pod --selector application=demo-app
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
nginx-1 249m 3% 1790Mi 5%
nginx-2 150m 1% 847Mi 2%
В этом примере в вывод будут включены только модули с меткой application: demo-app
. =
, ==
и !=
поддерживаются как операторы. Можно применить несколько ограничений, объединив их вместе в виде строки, разделенной запятыми, например application=demo-app,version!=1
. Объекты будут отображаться только в том случае, если они соответствуют всем фильтрам меток в вашем запросе.
Получение использования определенного ресурса
В подкоманды top node
и top pod
можно передать имя определенного узла или модуля для извлечения. Текущие показатели, связанные с этим элементом, будут отображаться отдельно.
Укажите имя объекта в качестве простого аргумента команды сразу после node
или pod
:
$ kubectl top node minikube
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
minikube 245m 3% 714Mi 2%
Краткое содержание
Команда kubectl top
отображает важные показатели потребления ресурсов для узлов и модулей в вашем кластере Kubernetes. Вы можете использовать его для быстрой проверки использования ЦП и памяти, связанных с каждой из ваших рабочих нагрузок. Эта информация может быть полезна для диагностики проблем с производительностью и определения того, когда пора добавить еще один узел.
Прежде чем использовать эту команду, вам необходимо установить Kubernetes Metrics Server в своем кластере. Это предоставляет API, который предоставляет данные об использовании ресурсов. Включение Metrics Server влечет за собой снижение производительности, но в большинстве случаев этим можно пренебречь. Обычно для каждого контролируемого узла требуется 1 млн ядер ЦП и 2 МБ памяти, хотя это может варьироваться в зависимости от рабочих нагрузок, выполняемых в вашей конкретной среде.