Monitoramento de cluster da nuvem nativa
Introdução
kube-prometheus-stack usa o Prometheus-operator e o Prometheus para fornecer monitoramento de cluster do Kubernetes de ponta a ponta fácil de usar.
Este complemento permite que os dados de monitoramento sejam interconectados com Análise inteligente de contêineres (CIA) para que você possa ver os dados de monitoramento e configurar alarmes no console da CIA.
Comunidade de código aberto: https://github.com/prometheus/prometheus
Restrições
- Por padrão, o componente kube-state-metrics do complemento não coleta rótulos e anotações de recursos do Kubernetes. Para coletar esses rótulos e anotações, habilite manualmente a função de coleta nos parâmetros de inicialização e verifique se as métricas correspondentes são adicionadas à lista branca de coleta de ServiceMonitor denominada kube-state-metrics. Para mais detalhes, consulte Coletar todos os rótulos e anotações de um pod.
Permissões
O componente node-exporter do complemento kube-prometheus-stack precisa ler os dados de informações do Docker do diretório /var/run/docker.sock no host para monitorar o espaço em disco do Docker.
A seguinte permissão é necessária para executar node-exporter:
- cap_dac_override: lê os dados de informações do Docker.
Instalar o complemento
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster. Escolha Add-ons no painel de navegação, localize Cloud Native Cluster Monitoring à direita e clique em Install.
- Na página Install Add-on, configure as especificações.
- Containers: instância do componente criada pelo complemento. Para mais detalhes, consulte Componentes. Você pode selecionar ou personalizar uma especificação conforme necessário.
- Configure os parâmetros relacionados.
- Connect to Third Party: para relatar dados do Prometheus a um sistema de monitoramento de terceiros, insira o endereço e o token do sistema de monitoramento de terceiros e determine se deve ignorar a autenticação de certificado.
- Prometheus HA: os componentes Prometheus-server, Prometheus-operator, thanos-query, custom-metrics-apiserver e alertmanager são implementados no modo de várias instâncias no cluster.
- Install Grafana: use Grafana para visualizar dados de monitoramento. Grafana cria um volume de armazenamento de 5 GiB por padrão. Desinstalar o complemento não excluirá esse volume. O nome de usuário e a senha padrão para o primeiro logon são admin. Você será solicitado a alterar a senha imediatamente após o logon.
- Collection Period: período de coleta de dados de monitoramento.
- Data Retention: período de retenção dos dados de monitoramento.
- Storage: selecione o tipo e o tamanho do disco para armazenar dados de monitoramento. Desinstalar o complemento não excluirá esse volume.
Uma PVC disponível chamado pvc-prometheus-server existe no namespace monitoring e será usado como fonte de armazenamento.
- Clique em Install.
Depois que o complemento for instalado, talvez seja necessário executar as seguintes operações:
- Para usar esse complemento para fornecer métricas de recursos do sistema (como uso de CPU e memória) para o dimensionamento automático da carga de trabalho, ative a Metric API. Para mais detalhes, consulte Fornecer métricas de recursos por meio de Metrics API. Após a configuração, use o Prometheus para coletar métricas de recursos do sistema sem instalar repetidamente o complemento metrics-server.
- Para usar métricas personalizadas para criar uma política de AS, execute operações em Agregar métricas personalizadas ao servidor de API do Kubernetes. Para mais detalhes, consulte Monitoramento de métricas personalizadas usando o Prometheus.
- Se você também instalou o grafana ao instalar o complemento, poderá visualizar o painel. Para mais detalhes, consulte Acessar ao Grafana.
Componentes
Todos os recursos do Kubernetes criados durante a instalação do complemento kube-prometheus-stack são criados no namespace denominado monitoring.
Componente |
Descrição |
Tipo de recurso |
---|---|---|
prometheusOperator (nome da carga de trabalho: prometheus-operator) |
Implementa e gerencia o Prometheus Server baseado em CustomResourceDefinitions (CRDs) e monitora e processa os eventos relacionados a esses CRDs. É o centro de controle de todo o sistema. |
Implementação |
prometheus (nome da carga de trabalho: prometheus-server) |
Um cluster de Prometheus Server implementado pelo operador com base nos CRDs de Prometheus que podem ser considerados StatefulSets. |
StatefulSet |
alertmanager (nome da carga de trabalho: alertmanager-alertmanager) |
Central de alarme do complemento. Ele recebe alarmes enviados pelo Prometheus e gerencia informações de alarme por meio da deduplicação, do agrupamento e da distribuição. |
StatefulSet |
thanosSidecar |
Disponível apenas no modo HA. É executado com o prometheus-server no mesmo pod para implementar o armazenamento persistente de dados métricos do Prometheus. |
Contêiner |
thanosQuery |
Disponível apenas no modo HA. Entrada para a consulta PromQL quando o Prometheus estiver em cenários de HA. Ele pode excluir métricas duplicadas de Store ou Prometheus. |
Implementação |
adapter (nome da carga de trabalho: custom-metrics-apiserver) |
Agrega métricas personalizadas ao servidor da API do Kubernetes nativo. |
Implementação |
kubeStateMetrics (nome da carga de trabalho: kube-state-metrics) |
Converte os dados de métrica do Prometheus em um formato que pode ser identificado pelas APIs do Kubernetes. Por padrão, o componente kube-state-metrics não coleta todos os rótulos e anotações dos recursos do Kubernetes. Para coletar todos os rótulos e anotações, consulte Coletar todos os rótulos e anotações de um pod.
NOTA:
Se os componentes forem executados em vários pods, apenas um pod fornecerá métricas. |
Implementação |
nodeExporter (nome da carga de trabalho: node-exporter) |
Implementado em cada nó para coletar dados de monitoramento de nó. |
DaemonSet |
grafana (nome da carga de trabalho: grafana) |
Visualiza dados de monitoramento. Grafana cria um volume de armazenamento de 5 GiB por padrão. Desinstalar o complemento não excluirá esse volume. |
Implementação |
clusterProblemDetector (nome da carga de trabalho: cluster-problem-detector) |
Monitora exceções de cluster. |
Implementação |
Fornecer métricas de recursos por meio de Metrics API
Métricas de recursos de contêineres e nós, como uso de CPU e memória, podem ser obtidas por meio da Metrics API do Kubernetes. As métricas de recursos podem ser acessadas diretamente, por exemplo, usando o comando kubectl top ou usadas pelas políticas HPA ou CustomedHPA para dimensionamento automático.
O complemento pode fornecer a Metrics API ao Kubernetes que está desativada por padrão. Para ativar a API, crie o seguinte objeto de APIService:
apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: labels: app: custom-metrics-apiserver release: cceaddon-prometheus name: v1beta1.metrics.k8s.io spec: group: metrics.k8s.io groupPriorityMinimum: 100 insecureSkipTLSVerify: true service: name: custom-metrics-apiserver namespace: monitoring port: 443 version: v1beta1 versionPriority: 100
Você pode salvar o objeto como um arquivo, nomeá-lo como metrics-apiservice.yaml e executar o seguinte comando:
kubectl create -f metrics-apiservice.yaml
Execute o comando de monitoramento kubectl top pod -n monitoring. Se as seguintes informações forem exibidas, a Metrics API poderá ser acessada:
# kubectl top pod -n monitoring NAME CPU(cores) MEMORY(bytes) ...... custom-metrics-apiserver-d4f556ff9-l2j2m 38m 44Mi ......

Para desinstalar o complemento, execute o seguinte comando kubectl e exclua o objeto de APIService. Caso contrário, o complemento metrics-server não pode ser instalado devido a recursos residuais do APIService.
kubectl delete APIService v1beta1.metrics.k8s.io
Agregar métricas personalizadas ao servidor de API do Kubernetes
Por padrão, o kube-prometheus-stack da nova versão não agrega métricas personalizadas ao servidor de API do Kubernetes, e as regras de agregação de métricas não são mais configuradas no item de configuração user-adapter-config (ou adapter-config em versões anteriores). Para habilitar o dimensionamento HPA com base em métricas personalizadas, configure manualmente as regras de agregação de métricas. Para obter detalhes, consulte Detecção de métricas e configuração de apresentação. Se você atualizar o complemento, as configurações originais serão herdadas.

Para usar o prometheus para monitorar métricas personalizadas, o aplicativo precisa fornecer uma API de monitoramento de métricas. Para mais detalhes, consulte Coleta de dados de monitoramento de Prometheus.
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster. No painel de navegação, escolha ConfigMaps and Secrets.
- Alterne para o namespace monitoring, localize o ConfigMap user-adapter-config (adapter-config em versões anteriores) na guia ConfigMaps e clique em Update.
Figura 1 Atualizar um ConfigMap
- Em Data, clique em Edit para o arquivo config.yaml para adicionar uma regra de coleta de métrica personalizada no campo rules. Clique em OK.
Você pode adicionar várias regras de coleta adicionando várias configurações no campo rules. Para obter detalhes, consulte Detecção de métricas e configuração de apresentação.
Exemplo de regra de métrica personalizada:rules: # The rule matches the accumulated cAdvisor metric in seconds. - seriesQuery: '{__name__=~"^container_.*",container!="POD",namespace!="",pod!=""}' resources: # Specify pod and namespace resources. overrides: namespace: resource: namespace pod: resource: pod name: # Delete the container_ prefix and _seconds_total suffix, and use the content captured in .* as the metric name. matches: "^container_(.*)_seconds_total$" # Query metrics. .Series and .LabelMatchers are available in the Go language. Use separators << and >> to avoid conflicts with the Prometheus query language. metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>,container!="POD"}[2m])) by (<<.GroupBy>>)'
No exemplo anterior, apenas as métricas básicas do pod são coletadas. Para coletar métricas personalizadas, consulte o guia oficial para adicionar ou modificar regras.
Figura 2 Modificar dados do ConfigMap - Reimplemente a carga de trabalho custom-metrics-apiserver no namespace monitoring.
Figura 3 Reimplementação de custom-metrics-apiserver
Acessar ao Grafana
Se o Grafana for instalado durante a instalação do complemento, você poderá acessar o nó através do Serviço chamado grafana, que é um Serviço NodePort. Se o nó for acessado a partir de uma rede externa, você poderá vincular um EIP ao nó e acessar o nó através da porta do nó.
Como mostrado na figura a seguir, o endereço de acesso é http://{{Node EIP}}:30913.

Coletar todos os rótulos e anotações de um pod
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster. No painel de navegação, escolha Workloads.
- Alterne para o namespace monitoring, localize a carga de trabalho kube-state-metrics na página de guia Deployments e clique em Upgrade na coluna Operation.
- Na área Lifecycle das configurações de contêiner, edite o comando de inicialização.
Figura 5 Editar o comando de inicializaçãoAdicione as seguintes informações ao final do parâmetro de inicialização kube-state-metrics original:
--metric-labels-allowlist=pods=[*],nodes=[node,failure-domain.beta.kubernetes.io/zone,topology.kubernetes.io/zone]
Para coletar anotações, adicione parâmetros nos parâmetros de inicialização da mesma maneira.--metric-annotations-allowlist=pods=[*],nodes=[node,failure-domain.beta.kubernetes.io/zone,topology.kubernetes.io/zone]
Ao editar o comando de inicialização, não modifique outros parâmetros de inicialização originais. Caso contrário, o componente pode ser anormal.
- kube-state-metrics começa a coletar os rótulos/anotações de pods e nós e verifica se kube_pod_labels/kube_pod_annotations está na tarefa de coleta de CloudScope.
kubectl get servicemonitor kube-state-metrics -nmonitoring -oyaml | kube_pod_labels
Para obter mais parâmetros de inicialização do kube-state-metrics, consulte kube-state-metrics/cli-arguments.