Olá pessoal! Hoje, continuamos a compartilhar material traduzido especificamente para os alunos do curso da 
Plataforma de Infraestrutura baseado em Kubernetes . Boa leitura.

1. Introdução

Há já algum tempo que experimentei criar painéis da Grafana para administrar o Kubernetes. Como proprietário e administrador de vários clusters do Kubernetes, eu queria obter uma representação visual de algumas das métricas. Primeiro, preciso dos painéis normais da Grafana para os componentes Kubernetes Control Plane e Node: 
kube-api, kube-scheduler, kube-controller-manager, assim como kubelet e kube-proxy . Em segundo lugar, gostaria de postar os painéis resultantes no GitHub para que outros possam deixar sugestões e relatórios de erros (problemas), enviar solicitações de alterações (solicitações de recebimento), atualizar painéis (git pull) e me ajudar a trabalhar neles.
Publicar painéis Grafana
Os painéis Grafana agora são publicados principalmente em 
grafana.com/dashboards . Para obter o painel desejado, você precisa encontrá-lo na página, copiar o identificador e importá-lo para a instância local do Grafana. Embora a importação de painéis seja relativamente simples, a experiência mostra que a maioria dos usuários acha inconveniente trabalhar com eles. Existem várias razões para isso.
Primeiro, as pessoas usam seletores de tags diferentes para indicar metas de monitoramento no Prometheus. Em segundo lugar, nas novas versões dos exportadores do Prometheus e nos aplicativos para acessar métricas, os nomes das métricas são alterados e excluídos constantemente. Em terceiro lugar, é extremamente difícil encontrar painéis de alta qualidade - você nunca sabe o que obterá após a importação. Depois de selecionar o painel, você deve vasculhar todos os gráficos e editar as métricas, juntamente com os seletores das etiquetas - e isso é uma grande quantidade de trabalho manual.
Projeto Monitorando Mixins
Eu encontrei um projeto muito legal chamado 
Monitoring Mixins. De fato, esse é um tipo de ecossistema projetado para superar todos os problemas do painel dolorido. A idéia veio de Frederic Branczyk, e foi ele quem escreveu o 
documento de design original , que eu recomendo fortemente que você leia. Além disso, ele pensou em um mecanismo real para atualizar painéis e extraí-los de vários repositórios do GitHub. Esse mecanismo é muito parecido com o de 
go get , e eu realmente gostei. 
Aqui você pode ler uma breve descrição do 
gerenciador de pacotes 
jsonnet-bundler usando esse mecanismo. Muito obrigado a 
Frederick pelos desenvolvimentos úteis!
Pacote Kubernetes Grafana Mixin
Se você ler este lugar, poderá fazer uma pausa e apreciar as belas fotos.
Servidor API
 Painel do servidor da API Kubernetes
Painel do servidor da API KubernetesGerente de controlador
 Painel do Kubernetes Controller Manager
Painel do Kubernetes Controller ManagerPlanejador
 Painel do Agendador do Kubernetes
Painel do Agendador do KubernetesKublet (agente do nó)
 Painel Kubernetes Cublet
Painel Kubernetes Cublet Painel Kubernetes Cublet
Painel Kubernetes CubletProxy Kube
 Painel Proxy do Kube
Painel Proxy do KubeUsando o Kubernetes Grafana Mixin
Primeiro você precisa instalar o 
jsonnet e o 
jsonnet-bundler .
Jsonnet
Se você estiver usando o macOS, poderá usar o 
brew install jsonnet . Caso contrário, é melhor compilar você mesmo esse componente.
 git clone https: 
Empacotador Jsonnet
 go get -u github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb 
Painéis de importação
Crie um novo diretório para o projeto e digite-o com o 
cd .
Instale o 
mixin :
 jb init jb install https: 
Agora crie um novo arquivo 
config.libsonnet .
 local kubedashboards = import 'kubernetes-grafana-mixin/mixin.libsonnet'; kubedashboards { _config+:: { kubeletSelector: 'job="kubernetes-nodes2"', kubeSchedulerSelector: 'job="kube-scheduler2"', kubeControllerManagerSelector: 'job="kube-controller-manager2"', kubeApiserverSelector: 'job="kube-apiserver2"', kubeProxySelector: 'job="kube-proxy2"', }, } 
Depois disso, o painel de informações é importado e os seletores de trabalhos são substituídos.
Corrija os seletores de tags do Prometheus para se adequar ao seu ambiente.
Agora crie o diretório de 
dashboards . Por fim, execute o 
jsonnet para compilar o 
config.libsonnet :
 jsonnet -J vendor -m dashboards -e '(import "config.libsonnet").grafanaDashboards' 
Você verá a seguinte lista:
 dashboards/kube-apiserver.json dashboards/kube-controller-manager.json dashboards/kube-proxy.json dashboards/kube-scheduler.json dashboards/kubelet.json 
Resultado
Exiba o conteúdo do catálogo do painel.
 ls -l dashboards 
 -rw-r--r-- 1 povilasv povilasv 35746 Apr 26 08:29 kube-apiserver.json -rw-r--r-- 1 povilasv povilasv 34790 Apr 26 08:29 kube-controller-manager.json -rw-r--r-- 1 povilasv povilasv 62845 Apr 26 08:29 kubelet.json -rw-r--r-- 1 povilasv povilasv 27673 Apr 26 08:29 kube-proxy.json -rw-r--r-- 1 povilasv povilasv 25650 Apr 26 08:29 kube-scheduler.json 
Adicionando painéis ao Grafana
Eu já disse que recomendo colocar painéis nos arquivos de configuração. Você pode aprender mais sobre como isso é feito 
na documentação do Grafana .
Por outro lado, nada impede que você abra 
a interface Grafana e adicione painéis nela.
Atualizar painéis
Com o tempo, os painéis serão alterados. Para atualizá-los, o seguinte comando é suficiente:
 jb update 
Isso é tudo por hoje.
Espero que você goste dos meus painéis. Em um artigo separado, falarei sobre como os criei e por que os fiz dessa maneira, portanto, assine as atualizações. Os assinantes veem meu trabalho primeiro, mesmo antes da publicação.
Também estou extremamente interessado nos seus comentários. Se você usou meus painéis, avalie o quanto eles foram úteis para você ou compartilhe se eles o ajudaram em uma situação de trabalho real. Apenas deixe um comentário! 
A propósito, se você quiser me agradecer por meus esforços, pode olhar para minha lista de desejos aberta e me comprar, por exemplo, um bom livro. 
Eu realmente aprecio projetos de código aberto de qualidade. O pacote kubernetes-grafana-mixin está disponível sob uma licença de licenciamento Apache 2 . Se você gostou do projeto, confira no Github!