Поиск по сайту:

Как контролировать использование ресурсов 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 МБ памяти, хотя это может варьироваться в зависимости от рабочих нагрузок, выполняемых в вашей конкретной среде.