☸️ Как развернуть Metrics Server в кластере Kubernetes

by itisgood

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

Если вы используете самоподписанные сертификаты, вы можете использовать флаг -kubelet-insecure-tls, чтобы пропустить проверку сертификатов Kubelet 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

 

You may also like

Leave a Comment