Como monitorar o uso de recursos do Kubernetes com o Metrics Server e o Kubectl Top

0
40


Monitorar o uso de recursos de seu cluster Kubernetes é essencial para que você possa acompanhar o desempenho e entender se suas cargas de trabalho estão sendo executadas com eficiência. a kubectl top O comando transmite métricas diretamente de seu cluster, permitindo que você acesse o básico em seu terminal.

DML Y DDL comando basicos
DML Y DDL comando basicos

Esse comando normalmente não funciona imediatamente em um novo ambiente Kubernetes. Depende do plug-in do Metrics Server que está instalado em seu cluster. Esse componente coleta métricas de seus nós e pods e fornece uma API para recuperar os dados.

Neste artigo, mostraremos como instalar o Metrics Server e acessar suas medições usando kubectl top. Você poderá ver o consumo de CPU e memória de cada um de seus nós e pods.

Adicionando o servidor de métricas ao Kubernetes

As distribuições do Kubernetes normalmente não vêm com o Metrics Server integrado. Você pode verificar facilmente se seu cluster já é compatível tentando executar kubectl top:

$ kubectl top node
error: Metrics API not available

A mensagem de erro confirma que a API do Metrics Server não está presente no cluster.

O Metrics Server é mantido na comunidade Kubernetes Special Interest Group (SIG). Ele pode ser adicionado ao seu cluster usando seu manifesto YAML simples ou o gráfico Helm do projeto.

Usaremos o arquivo manifesto para este tutorial. Execute o seguinte comando Kubectl para instalar o Metrics Server:

$ 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

O Metrics Server agora começará a coletar e expor dados de consumo de recursos do Kubernetes. Se a instalação falhar com um erro, você deve verificar se o cluster atende aos requisitos do projeto. O Metrics Server tem dependências específicas que podem não ser suportadas em alguns ambientes.

Muitas distribuições do Kubernetes oferecem suporte ao Metrics Server usando seu próprio sistema de plug-ins. Você pode usar este comando para adicionar facilmente o Metrics Server a um cluster Minikube, por exemplo:

$ minikube addons enable metrics-server
Using image k8s.gcr.io/metrics-server/metrics-server:v0.4.2
The 'metrics-server' addon is enabled

Recuperando métricas com Kubectl Top

Com o Metrics Server instalado, agora você pode executar kubectl top acessar as informações que coleta.

Use o node subcomando para obter a utilização de recursos atual de cada um dos nós em seu cluster:

$ kubectl top node
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
minikube   249m         3%     847Mi           2%

a pod O subcomando fornece métricas individuais para cada um dos seus pods:

$ kubectl top pod
NAME    CPU(cores)   MEMORY(bytes)   
nginx   120m         8Mi

Isso exibirá Pods no default namespace Adicione o --namespace verifique se você está interessado em Pods em um namespace específico:

$ kubectl top pod --namespace demo-app
NAME    CPU(cores)   MEMORY(bytes)   
nginx   0m           2Mi

a --all-namespaces sinalizador também é compatível para listar todos os pods em seu cluster.

As métricas podem levar alguns minutos para ficarem disponíveis após a criação de novos pods. Há um atraso no pipeline do servidor de métricas, portanto, não se torna um problema de desempenho em si.

a kubectl top O comando não sobrecarrega você com dezenas de métricas. Ele se concentra em cobrir os conceitos básicos de CPU e uso de memória. Esse início básico pode ser adequado para cenários em que você simplesmente precisa de dados rapidamente, como identificar o pod que causou um aumento na utilização geral.

Uma fonte de confusão pode ser a 100m valores informados no CPU(cores) campo. O comando exibe o uso da CPU em milicores. uma medida de 1000m sempre significa 100% de consumo de um único núcleo de CPU. 500m indica 50% de consumo de um núcleo, enquanto 2000m significa que dois núcleos estão sendo ocupados.

Alterando a ordem de classificação dos objetos

a kubectl top O comando pode, opcionalmente, classificar a lista de objetos emitidos por CPU ou consumo de memória. Isso facilita a descoberta rápida de quais nós ou pods estão pressionando mais os recursos do cluster.

Adicione o --sort-by bandeira com ninguém cpu qualquer memory como seu valor para acionar esse comportamento:

$ 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%

Filtre a lista de objetos

Como outros comandos do Kubectl, o --selector flag permite filtrar a lista de objetos para elementos com tags específicas:

$ 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%

Neste exemplo, apenas os pods que têm a application: demo-app a tag será incluída na saída. =, ==S != são suportados como operadores. Várias restrições podem ser aplicadas juntando-as como uma string separada por vírgulas, como application=demo-app,version!=1. Os objetos só serão exibidos se corresponderem a todos os filtros de tags em sua consulta.

Obtenha a utilização de um recurso específico

a top node S top pod subcomandos podem receber o nome de um nó ou pod específico para pesquisar. As métricas atuais associadas a esse item serão exibidas isoladamente.

Forneça o nome do objeto como um argumento simples para o comando, logo após node qualquer pod:

$ kubectl top node minikube
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
minikube   245m         3%     714Mi           2%

Resumo

a kubectl top O comando exibe métricas de consumo de recursos essenciais para nós e pods em seu cluster Kubernetes. Você pode usá-lo para verificar rapidamente o uso de CPU e memória associado a cada uma de suas cargas de trabalho. Essas informações podem ser úteis para diagnosticar problemas de desempenho e identificar quando é hora de adicionar outro aplicativo Node.

Antes de usar o comando, você deve instalar o Kubernetes Metrics Server em seu cluster. Isso fornece a API que expõe dados de utilização de recursos. A ativação do Metrics Server gera uma sobrecarga de desempenho, mas isso geralmente é insignificante na maioria das implementações. Normalmente requer 1 milhão de núcleos de CPU e 2 MiB de memória por nó monitorado, embora isso possa variar dependendo das cargas de trabalho executadas em seu ambiente específico.