AIOps – Análises Inteligentes no Kubernetes com K8sGPT
Olá pessoal!
Hoje no blog da 4Linux, vou demonstrar para vocês essa ferramenta incrível que o K8sGPT.
Bora lá!!!
Introdução
Resolver problemas em ambientes Kubernetes nem sempre é uma tarefa simples. Mensagens de erro obscuras, logs extensos e dezenas de componentes interagindo tornam o troubleshooting uma atividade que consome tempo — e paciência.
É aí que entra o k8sgpt, uma ferramenta que usa inteligência artificial (LLMs) para interpretar eventos do cluster, identificar possíveis causas e sugerir ações corretivas com linguagem clara.
Por que usar o k8sgpt?
Se você já perdeu tempo tentando entender mensagens como:
Back-off restarting failed container
Ou teve que investigar um CrashLoopBackOff vasculhando logs manualmente, o k8sgpt pode te ajudar.
Ele funciona como uma “camada cognitiva” entre você e seu cluster. Ele analisa os recursos em falha (Pods, Deployments, Nodes etc.), interpreta os erros e te entrega um resumo compreensível com sugestões de ação.
Além disso, o k8sgpt pode rodar como CLI ou como operador dentro do cluster, integrando-se com Prometheus, Grafana e Alertmanager.
Instalação rápida
Aqui vamos usar a versão CLI, ideal para testes locais ou integração com CI/CD.
curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.4.17/k8sgpt_386.deb
sudo dpkg -i k8sgpt_386.deb
No link tem métodos de instalação para outros S.O.
- Configure um provider (vamos usar o ollama, mas há suporte para OpenAI, Azure, Google etc.) Eu tenho o Ollama rodando localmente com um modelo como llama3.
k8sgpt auth add --provider ollama --model llama3
- Valide a instalação
k8sgpt --help
Caso você não tenha um cluster K8s configurado para testar, use o KIND
LLM AI Backends
O K8sGPT usa o provedor de IA generativa e LLM escolhido quando você deseja explicar os resultados da análise usando o sinalizador –explain, por exemplo, k8sgpt analyse –explain. Você pode usar o sinalizador –backend para especificar um provedor configurado (o padrão é openai).
Default:
> openai
Active:
Unused:
> openai
> localai
> ollama
> azureopenai
> cohere
> amazonbedrock
> amazonsagemaker
> google
> huggingface
> noopai
> googlevertexai
> watsonxai
> customrest
> ibmwatsonxai
Exemplo prático: analisando um cluster com erro
Execute a análise:
k8sgpt analyze --explain --language=portuguese --verbose
Debug: Checking kubernetes client initialization.
Debug: Kubernetes client initialized, server=https://127.0.0.1:39925.
Debug: Checking cache configuration.
Debug: Cache configuration loaded, type=file.
Debug: Analysis configuration loaded, filters=[], language=portuguese, namespace=none, labelSelector=none, explain=true, maxConcurrency=10, withDoc=false, withStats=false.
Debug: Checking AI configuration.
Debug: Using default AI provider ollama.
Debug: AI configuration loaded, provider=ollama, baseUrl=http://192.168.1.100:11434, model=llama3.1.
Debug: Checking AI client initialization.
Debug: AI client initialized.
Debug: Checking analysis configuration.
Debug: Analysis initialized.
Debug: No filters selected and no active filters found, run all core analyzers.
Debug: StatefulSetAnalyzer launched.
Debug: ServiceAnalyzer launched.
Debug: MutatingWebhookAnalyzer launched.
Debug: ValidatingWebhookAnalyzer launched.
Debug: IngressAnalyzer launched.
Debug: ConfigMapAnalyzer launched.
Debug: NodeAnalyzer launched.
Debug: ReplicaSetAnalyzer launched.
Debug: PvcAnalyzer launched.
Debug: DeploymentAnalyzer launched.
Debug: MutatingWebhookAnalyzer completed without errors.
Debug: CronJobAnalyzer launched.
Debug: PvcAnalyzer completed without errors.
Debug: PodAnalyzer launched.
Debug: NodeAnalyzer completed without errors.
Debug: DeploymentAnalyzer completed without errors.
Debug: ReplicaSetAnalyzer completed without errors.
Debug: CronJobAnalyzer completed without errors.
Debug: ConfigMapAnalyzer completed without errors.
Debug: IngressAnalyzer completed without errors.
Debug: PodAnalyzer completed without errors.
Debug: StatefulSetAnalyzer completed without errors.
Debug: ServiceAnalyzer completed without errors.
Debug: ValidatingWebhookAnalyzer completed without errors.
Debug: All core analyzers completed.
Debug: Generating AI analysis.
Analyzing Service 100% |███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| (25/25, 18 it/min)
Debug: Checking AI results.
Debug: Checking output.
AI Provider: ollama
0: ConfigMap default/kube-root-ca.crt()
- Error: ConfigMap kube-root-ca.crt is not used by any pods in the namespace
Error: ConfigMap kube-root-ca.crt não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o nome da ConfigMap é correto.
2. Certifique-se de que a ConfigMap foi criada corretamente e está em uso.
3. Verifique as especificações do deployment/pod para garantir que estão usando a ConfigMap correta.
4. Caso necessário, atualize as especificações do deployment/pod para usar a ConfigMap correta.
1: ConfigMap ingress-nginx/ingress-nginx-controller()
- Error: ConfigMap ingress-nginx-controller is not used by any pods in the namespace
- Error: ConfigMap ingress-nginx-controller is empty
Here's the simplified error message and solution:
Error: ConfigMap ingress-nginx-controller não está sendo usada por nenhum pod no namespace e a ConfigMap ingress-nginx-controller está vazia.
Solution:
1. Verifique se o recurso ingress-nginx-controller foi criado corretamente.
2. Certifique-se de que o namespace está correto.
3. Se necessário, adicione a referência ao ConfigMap nos pods que precisam dela.
4. Reinicie os pods para aplicar as alterações.
2: ConfigMap ingress-nginx/kube-root-ca.crt()
- Error: ConfigMap kube-root-ca.crt is not used by any pods in the namespace
Error: ConfigMap kube-root-ca.crt não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o nome da ConfigMap é correto.
2. Certifique-se de que a ConfigMap foi criada corretamente e está em uso.
3. Verifique as especificações do deployment/pod para garantir que estão usando a ConfigMap correta.
4. Caso necessário, atualize as especificações do deployment/pod para usar a ConfigMap correta.
3: ConfigMap kube-node-lease/kube-root-ca.crt()
- Error: ConfigMap kube-root-ca.crt is not used by any pods in the namespace
Error: ConfigMap kube-root-ca.crt não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o nome da ConfigMap é correto.
2. Certifique-se de que a ConfigMap foi criada corretamente e está em uso.
3. Verifique as especificações do deployment/pod para garantir que estão usando a ConfigMap correta.
4. Caso necessário, atualize as especificações do deployment/pod para usar a ConfigMap correta.
4: ConfigMap kube-public/cluster-info()
- Error: ConfigMap cluster-info is not used by any pods in the namespace
Here's the simplified Kubernetes error message and its solution:
**Error:** ConfigMap cluster-info não está sendo utilizada por nenhum pod no namespace.
**Solution:**
1. Verifique se o nome do namespace é correto e se o ConfigMap foi criado corretamente.
2. Execute `kubectl get pods -n <namespace>` para verificar se há algum pod rodando nesse namespace.
3. Se não houver pods, crie um pod que utilize o ConfigMap cluster-info como fonte de configuração.
4. Caso contrário, verifique as configurações do pod e certifique-se de que ele está utilizando a ConfigMap correta.
Essas etapas devem ajudar a resolver o problema!
5: ConfigMap kube-public/kube-root-ca.crt()
- Error: ConfigMap kube-root-ca.crt is not used by any pods in the namespace
Error: ConfigMap kube-root-ca.crt não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o nome da ConfigMap é correto.
2. Certifique-se de que a ConfigMap foi criada corretamente e está em uso.
3. Verifique as especificações do deployment/pod para garantir que estão usando a ConfigMap correta.
4. Caso necessário, atualize as especificações do deployment/pod para usar a ConfigMap correta.
6: ConfigMap kube-system/extension-apiserver-authentication()
- Error: ConfigMap extension-apiserver-authentication is not used by any pods in the namespace
Here's the simplified Kubernetes error message and its solution:
**Error:** ConfigMap extension-apiserver-authentication não está sendo usada por nenhum pod no namespace.
**Solution:**
1. Verifique se o ConfigMap foi criado corretamente.
2. Certifique-se de que o nome do ConfigMap seja correto e esteja sendo usado corretamente nos pods.
3. Se necessário, recrie os pods para que eles usem a ConfigMap.
Lembre-se de verificar as configurações do seu cluster e dos seus pods para resolver o problema!
7: ConfigMap kube-system/kube-root-ca.crt()
- Error: ConfigMap kube-root-ca.crt is not used by any pods in the namespace
Error: ConfigMap kube-root-ca.crt não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o nome da ConfigMap é correto.
2. Certifique-se de que a ConfigMap foi criada corretamente e está em uso.
3. Verifique as especificações do deployment/pod para garantir que estão usando a ConfigMap correta.
4. Caso necessário, atualize as especificações do deployment/pod para usar a ConfigMap correta.
8: ConfigMap kube-system/kubeadm-config()
- Error: ConfigMap kubeadm-config is not used by any pods in the namespace
Error: ConfigMap kubeadm-config não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o ConfigMap foi criado corretamente.
2. Certifique-se de que algum pod esteja usando a ConfigMap, verificando o arquivo `deployment.yaml` ou `pod.spec.containers.env`.
3. Se necessário, atualize as configurações do pod para usar a ConfigMap.
4. Execute `kubectl apply -f deployment.yaml` para aplicar as alterações.
9: ConfigMap kube-system/kubelet-config()
- Error: ConfigMap kubelet-config is not used by any pods in the namespace
Here's the simplified error message and solution:
Error: ConfigMap kubelet-config não está sendo usada por nenhum pod no namespace.
Solution: Verifique se o ConfigMap está configurado corretamente e se os pods estão usando a versão correta. Você pode verificar com `kubectl get cm -l app=kubelet-config` e `kubectl describe pod <pod_name>`.
10: ConfigMap local-path-storage/kube-root-ca.crt()
- Error: ConfigMap kube-root-ca.crt is not used by any pods in the namespace
Error: ConfigMap kube-root-ca.crt não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o nome da ConfigMap é correto.
2. Certifique-se de que a ConfigMap foi criada corretamente e está em uso.
3. Verifique as especificações do deployment/pod para garantir que estão usando a ConfigMap correta.
4. Caso necessário, atualize as especificações do deployment/pod para usar a ConfigMap correta.
11: ConfigMap metallb-system/kube-root-ca.crt()
- Error: ConfigMap kube-root-ca.crt is not used by any pods in the namespace
Error: ConfigMap kube-root-ca.crt não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o nome da ConfigMap é correto.
2. Certifique-se de que a ConfigMap foi criada corretamente e está em uso.
3. Verifique as especificações do deployment/pod para garantir que estão usando a ConfigMap correta.
4. Caso necessário, atualize as especificações do deployment/pod para usar a ConfigMap correta.
12: ConfigMap nfs-provisioner/kube-root-ca.crt()
- Error: ConfigMap kube-root-ca.crt is not used by any pods in the namespace
Error: ConfigMap kube-root-ca.crt não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o nome da ConfigMap é correto.
2. Certifique-se de que a ConfigMap foi criada corretamente e está em uso.
3. Verifique as especificações do deployment/pod para garantir que estão usando a ConfigMap correta.
4. Caso necessário, atualize as especificações do deployment/pod para usar a ConfigMap correta.
13: ConfigMap test-nfs/kube-root-ca.crt()
- Error: ConfigMap kube-root-ca.crt is not used by any pods in the namespace
Error: ConfigMap kube-root-ca.crt não está sendo usada por nenhum pod no namespace.
Solution:
1. Verifique se o nome da ConfigMap é correto.
2. Certifique-se de que a ConfigMap foi criada corretamente e está em uso.
3. Verifique as especificações do deployment/pod para garantir que estão usando a ConfigMap correta.
4. Caso necessário, atualize as especificações do deployment/pod para usar a ConfigMap correta.
14: Ingress default/broken-ingress()
- Error: Ingress default/broken-ingress does not specify an Ingress class.
- Error: Ingress uses the service default/nonexistent-service which does not exist.
Error: O erro ocorreu devido ao Ingress não especificar uma classe Ingress. O Ingress usou o serviço default/não existente que não existe.
Solution:
1. Verifique se o Ingress foi configurado corretamente, incluindo a classe Ingress.
2. Certifique-se de que o serviço default/não existente não esteja sendo usado como serviço de origem do Ingress.
3. Se o problema persistir, tente recriar o Ingress ou consultar a documentação da plataforma Kubernetes para obter mais informações sobre como configurar um Ingress corretamente.
15: Ingress default/example-ingress()
- Error: Ingress default/example-ingress does not specify an Ingress class.
- Error: Ingress uses the service default/example-service which does not exist.
Error: O Ingress default/example-ingress não especificou uma classe Ingress. O Ingress usou o serviço default/example-service, que não existe.
Solution:
1. Verify that the service "default/example-service" exists and is properly configured.
2. Create an Ingress class and assign it to the Ingress resource.
3. Update the Ingress resource with the new class.
4. Apply the changes and verify that the Ingress is working correctly.
16: Pod default/liveness-deployment-dfbc6f464-597sq(Deployment/liveness-deployment)
- Error: the last termination reason is Completed container=app-container pod=liveness-deployment-dfbc6f464-597sq
Error: O container "app-container" do pod "liveness-deployment-dfbc6f464-597sq" terminou com o código de status 0, indicando que a execução foi concluída com sucesso.
Solution:
1. Verifique se o container está configurado corretamente no deployment.
2. Certifique-se de que o container esteja rodando e não tenha sido reiniciado.
3. Se necessário, execute um "kubectl describe pod liveness-deployment-dfbc6f464-597sq" para obter mais informações sobre o pod.
17: Pod default/liveness-deployment-dfbc6f464-zd2hv(Deployment/liveness-deployment)
- Error: the last termination reason is Completed container=app-container pod=liveness-deployment-dfbc6f464-zd2hv
Error: O último motivo de término do container foi Completed, mas o sistema não conseguiu iniciar novamente.
Solution:
1. Verifique se a imagem do container está correta e atualizada.
2. Certifique-se de que o container app-container esteja configurado corretamente no deployment liveness-deployment-dfbc6f464-zd2hv.
3. Execute o comando `kubectl rollout restart deployment liveness-deployment` para reiniciar o deployment e tentar iniciar novamente o container.
18: Pod nfs-provisioner/nfs-provisioner-nfs-subdir-external-provisioner-fc4c4b46d-68t8s(Deployment/nfs-provisioner-nfs-subdir-external-provisioner)
- Error: the termination reason is Unknown exitCode=255 container=nfs-subdir-external-provisioner pod=nfs-provisioner-nfs-subdir-external-provisioner-fc4c4b46d-68t8s
Error: O container nfs-subdir-external-provisioner não está funcionando corretamente e foi interrompido com código de saída desconhecido (255).
Solution:
1. Verifique se o container está rodando corretamente no cluster Kubernetes.
2. Execute o comando `kubectl describe pod <nome-do-pod>` para obter mais informações sobre o erro.
3. Verifique a configuração do provisionador NFS e certifique-se de que os recursos necessários estejam disponíveis.
4. Se necessário, execute um `kubectl delete pod <nome-do-pod>` e reinicie o container.
19: Pod default/broken-pod()
- Error: 0/3 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }, 2 node(s) didn't match Pod's node affinity/selector. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling..
Error: ---> Kubernetes está lamentando que apenas 0/3 nós estão disponíveis para hospedar o Pod, devido a problemas de taints e preempção.
Solution:
1. Verifique se o cluster tem suficientes nós disponíveis e não estiverem sendo bloqueados por política de segurança ou outro problema técnico.
2. Revisite a configuração do Pod para verificar se há algum erro na definição da affinity/selector de nó.
3. Remove o taint da node com o erro e tente novamente hospedar o Pod nesse nó.
4. Se o problema persistir, adicione mais nós ao cluster para aumentar a capacidade de hospedagem.
20: Pod default/configmap-pod()
- Error: Unable to attach or mount volumes: unmounted volumes=[config], unattached volumes=[kube-api-access-htwdc config]: timed out waiting for the condition
Error: Não foi possível atar ou montar volumes: volumes não montados=[config], volumes não conectados=[kube-api-access-htwdc config]: aguardando por condição com timeout.
Solution:
1. Verifique se o volume "config" está configurado corretamente no pod.
2. Certifique-se de que o namespace do pod tenha acesso ao cluster Kubernetes.
3. Execute o comando `kubectl delete pod <nome-do-pod>` e reinicie o pod para resolver problemas de montagem de volumes.
21: Pod default/image-error-pod()
- Error: Back-off pulling image "inexistente/imagem:404"
Error: Erro ao carregar imagem "inexistente/imagem:404".
Solution:
1. Verify the image name and tag in your configuration file or command. Make sure it exists and is spelled correctly.
2. Check the Kubernetes cluster's DNS resolution for the image name. Ensure that the image is properly registered in the cluster.
3. If the issue persists, try using the `--tolerate-unavailable` flag with `kubectl pull` to ignore any unavailable images.
4. If the error persists after trying step 3, check the Kubernetes logs for more detailed information on the error.
22: StatefulSet default/statefulset-example()
- Error: StatefulSet uses the service default/statefulset-service which does not exist.
- Error: create Claim data-statefulset-example-0 for Pod statefulset-example-0 in StatefulSet statefulset-example failed error: PersistentVolumeClaim "data-statefulset-example-0" is invalid: spec.resources[storage]: Invalid value: "0": must be greater than zero
Error: The PersistentVolumeClaim "data-statefulset-example-0" is invalid because it specifies a storage request of 0, which must be greater than zero.
Solution:
1. Edit the StatefulSet configuration file to increase the storage request for the Claim. For example, you can set `storage: 512m` or any other value greater than 0.
2. Apply the changes to the StatefulSet by running `kubectl apply -f statefulset-example.yaml`.
3. Wait for the changes to take effect and verify that the PersistentVolumeClaim is valid.
23: Service default/broken-service()
- Error: Service has no endpoints, expected label app=wrong-label
Error: O serviço não tem pontos de extremidade configurados. Esperava-se o rótulo "app=wrong-label".
Solution:
1. Verifique se o serviço está correctly definido no manifesto do Kubernetes.
2. Adicione o rótulo "app" com o valor correto para o serviço. Por exemplo, "app: my-service".
3. Atualize o manifest do Kubernetes para refletir as alterações.
24: Service default/nginx-service()
- Error: Service has no endpoints, expected label app=nginx
Error: Serviço não tem endpoints, esperado label app=nginx.
Solution:
1. Verifique se o serviço está configurado corretamente.
2. Certifique-se de que o pod associado ao serviço está em execução e pronto.
3. Verifique se o label "app=nginx" está presente no pod ou deployment.
4. Se necessário, atualize a configuração do serviço para refletir as alterações nos labels dos pods.
Observe o output do K8sGPT acima, o debug mostra que a análise está funcionando corretamente. O cluster Kubernetes foi escaneado e gerou insights úteis. Aqui está um resumo técnico com sugestões práticas para você corrigir os principais problemas.
O K8sGPT tem um debug bem detalhado, segue um breve resumo:
- Cliente Kubernetes: Conectado com sucesso (https://127.0.0.1:39925) – meu KIND.
- AI Provider: ollama com modelo llama3.1 (http://192.168.1.100:11434) – meu ambiente do Ollama configurado em outra máquina.
- Modo de Análise: Todos os analisadores core foram executados (StatefulSet, Deployment, Pod, Ingress, etc.)
Um exemplo é uma sequência de problemas como kube-root-ca.crt em múltiplos namespaces. Vocês podemo observar problemas com outros objetos, como configmap, Deployment, Services, etc. Isso ajuda muito a nós conseguimos identificar quais possíveis problemas nosso cluster tem através de uma linguagem natural.
Na doc oficial, podemos usar filtros por namespace, objetos, multimos contexto e outras coisas mais.
Legal né pessoal?
Conclusão
Ferramentas como o k8sgpt representam uma nova era para a observabilidade em Kubernetes. Elas não apenas analisam, mas interpretam os dados do cluster de forma inteligente, economizando tempo e evitando erros comuns. Isso trás para nós uma nova forma de pensar e agir com apoio do AIOps
Se você é SRE, DevOps ou trabalha em produção com Kubernetes, vale a pena testar.
Compartilhem em suas redes sociais.
Até a próxima.
Referências
https://github.com/k8sgpt-ai/k8sgpt?tab=readme-ov-file#cli-installation
About author
Você pode gostar também
Descubra as vantagens do Linux e como migrar facilmente para ele
O Linux é um sistema operacional que tem ganhado popularidade entre usuários comuns, principalmente por ser gratuito e de código aberto. Mas o que exatamente o Linux pode oferecer para
Melhore a segurança do seu ambiente Kubernetes com práticas eficazes
A ampla utilização do Kubernetes (K8S) em ambientes produtivos traz uma alerta, de como esses ambientes estão sendo usados em relação as configurações e boas práticas de segurança da informação.
Gerenciamento de Acessos no Redis com Controle de Usuários e Permissões por Chaves
O Redis é amplamente utilizado para caching, filas e armazenamento de dados em memória de alta performance. Em muitos cenários, é comum que múltiplas aplicações ou usuários compartilhem o mesmo








