Kubernetes Metrics Server является кластерным агрегатором данных об использовании ресурсов.
Его работа заключается в сборе метрик из сводного API, предоставляемого Kubelet на каждом узле.
Метрики использования ресурсов, такие как загрузка ЦП контейнера и память, полезны при устранении проблем, связанных со странным использованием ресурсов. Все эти метрики доступны в Kubernetes через Metrics API.
Metrics API имеет количество ресурсов, используемых в данный момент данным узлом или модулем.
Поскольку он не хранит значения метрик, для этой цели используется сервер метрик.
Файлы yamls предоставляются для установки в исходном коде проекта Metrics Server.
Загрузите исходный код проекта с Github:
git clone https://github.com/kubernetes-sigs/metrics-server.git
Перейдите в папку проекта:
cd metrics-server
Установка флагов
Metrics Server поддерживает все стандартные флаги сервера Kubernetes API, а также стандартные флаги логов Kubernetes.
Наиболее часто используемые из них:
--logtostderr
: логи стандартных ошибок вместо файлов в контейнере.--v=<X>
:установить уровень логов. Как правило, рекомендуется запускать журнал уровня 1 или 2, если вы не сталкиваетесь с ошибками. На уровне журнала 10 будут сообщаться большие объемы диагностической информации, включая тела запросов и ответов API, а также необработанные результаты метрик из Kubelet.--secure-port=<port>
:установить безопасный порт. Если вы не работаете от имени пользователя root, вам нужно установить для него значение, отличное от значения по умолчанию (порт 443).--tls-cert-file
,--tls-private-key-file
: обслуживающий сертификат и файлы ключей. Если не указан, будут созданы самоподписанные сертификаты. Не использйуте самоподписанные сертификаты в продакшене--kubelet-certificate-authority
:путь к сертификату CA, который будет использоваться для проверки обслуживающих сертификатов Kubelet.
--metric-resolution=<duration>
:Интервал, в течении которого метрики извлекаются из Kubelets (по умолчанию 60 с).--kubelet-insecure-tls
: пропустить проверку сертификатов Kubelet CA.--kubelet-port
:Порт, используемый для подключения к Kubelet (по умолчанию используется защищенный порт Kubelet – 10250).--kubelet-preferred-address-types
: Порядок учета типов адресов ноды Kubelet при подключении к Kubelet.
Укажем порядок типов адресов наших нод
Я изменю файл манифеста развертывания, чтобы добавить порядок, в котором следует учитывать различные типы адресов узлов Kubelet при подключении к Kubelet.
vim deploy/1.8+/metrics-server-deployment.yaml
............... containers: - name: metrics-server image: k8s.gcr.io/metrics-server-amd64:v0.3.6 args: - --cert-dir=/tmp - --secure-port=4443 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
Отключение небезопасной проверки сертификатов CA
............... containers: - name: metrics-server image: k8s.gcr.io/metrics-server-amd64:v0.3.6 args: - --cert-dir=/tmp - --secure-port=4443 - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
Развертывание Metrics Server в Kubernetes
После того, как вы произвели необходимую настройку, разверните сервер метрик в вашем кластере Kubernetes, выполнив следующую команду из каталога верхнего уровня этого репозитория:
$ kubectl apply -f deploy/1.8+/ clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created serviceaccount/metrics-server created deployment.apps/metrics-server created service/metrics-server created clusterrole.rbac.authorization.k8s.io/system:metrics-server created clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
$ kubectl get deployments metrics-server -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 1/1 1 1 72m
$ kubectl get pods -A | grep metrics-server
kube-system metrics-server-7bd949b8b6-mpmk9 1/1 Running 0 33m
$ kubectl get svc metrics-server -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
metrics-server ClusterIP 10.96.72.29 <none> 443/TCP 74m
Тестирование сервера Metrics
Позволяет отобразить использование ресурсов узлов – CPU / Memory / Storage:
$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8smaster01.computingforgeeks.com 196m 4% 1053Mi 14%
k8sworker01.computingforgeeks.com 107m 2% 2080Mi 27%
k8sworker02.computingforgeeks.com 107m 2% 2080Mi 27%
k8sworker03.computingforgeeks.com 107m 2% 2080Mi 27%
Мы можем сделать то же самое для подов – Показывать метрики для всех подов в пространстве имен default:
$ kubectl top pods
NAMESPACE NAME CPU(cores) MEMORY(bytes)
kube-system calico-kube-controllers-5c45f5bd9f-dk8jp 1m 11Mi
kube-system calico-node-4h67w 32m 27Mi
kube-system calico-node-99vkm 35m 27Mi
kube-system calico-node-qdqb8 21m 27Mi
kube-system calico-node-sd9r8 21m 43Mi
kube-system coredns-6955765f44-d4g99 2m 12Mi
kube-system coredns-6955765f44-hqc4q 2m 11Mi
kube-system kube-proxy-h87zf 1m 12Mi
kube-system kube-proxy-lcnvx 1m 14Mi
kube-system kube-proxy-x6tfx 1m 16Mi
kube-system kube-proxy-xplz4 1m 16Mi
kube-system metrics-server-7bd949b8b6-mpmk9
Для проверки дополнительных параметров команды:
kubectl top pod --help
kubectl top node --help