O diagnóstico da causa raiz dos problemas do Google Kubernetes Engine (GKE) geralmente exige a inspeção detalhada do estado ativo, da configuração e dos eventos dos recursos do Kubernetes. Para ir além dos sintomas superficiais, você precisa de ferramentas para consultar e interagir diretamente com o plano de controle do cluster.
Use esta página para aprender comandos kubectl essenciais para investigar o estado ativo do cluster. Ao aprender esses comandos, você pode coletar informações detalhadas diretamente do plano de controle do Kubernetes, ajudando a entender por que um problema está ocorrendo.
Essas informações são importantes para administradores e operadores de plataforma que precisam realizar verificações detalhadas de integridade do cluster, gerenciar recursos e resolver problemas de infraestrutura em um nível granular. Elas também são essenciais para desenvolvedores de aplicativos para depurar o comportamento do aplicativo, inspecionar registros e eventos de pods e verificar o estado exato das implantações no ambiente do Kubernetes. Para mais informações sobre as funções comuns e as tarefas de exemplo que referenciamos no Google Cloud conteúdo, consulte Funções e tarefas comuns do usuário do GKE.
Antes de começar
Antes de começar, realize as seguintes tarefas:
- Instale kubectl.
Configure a ferramenta de linha de comando
kubectlpara se comunicar com o cluster:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONSubstitua:
CLUSTER_NAME: o nome do cluster.LOCATION: o local do Compute Engine do plano de controle do cluster. Forneça uma região para clusters regionais ou uma zona para clusters zonais.
Analise suas permissões. Para saber se você tem as permissões necessárias para executar
kubectlcomandos, use okubectl auth can-icomando. Por exemplo, para saber se você tem permissão para executarkubectl get nodes, execute o comandokubectl auth can-i get nodes.Se você tiver as permissões necessárias, o comando retornará
yes. Caso contrário, o comando retornaráno.Se você não tiver permissão para executar um comando
kubectl, uma mensagem de erro semelhante à seguinte será exibida:Error from server (Forbidden): pods "POD_NAME" is forbidden: User "USERNAME@DOMAIN.com" cannot list resource "pods" in API group "" in the namespace "default"Se você não tiver as permissões necessárias, peça ao administrador do cluster para atribuir as funções necessárias.
Acesse uma visão geral do que está em execução
O comando kubectl get ajuda a ter uma visão geral do que está acontecendo no cluster. Use os comandos a seguir para conferir o status de dois dos componentes mais importantes do cluster, nós e pods:
Para verificar se os nós estão íntegros, confira detalhes sobre todos os nós e os status deles:
kubectl get nodesO resultado será assim:
NAME STATUS ROLES AGE VERSION gke-cs-cluster-default-pool-8b8a777f-224a Ready <none> 4d23h v1.32.3-gke.1785003 gke-cs-cluster-default-pool-8b8a777f-egb2 Ready <none> 4d22h v1.32.3-gke.1785003 gke-cs-cluster-default-pool-8b8a777f-p5bn Ready <none> 4d22h v1.32.3-gke.1785003Qualquer status diferente de
Readyexige mais investigação.Para verificar se os pods estão íntegros, confira detalhes sobre todos os pods e os status deles:
kubectl get pods --all-namespacesO resultado será assim:
NAMESPACE NAME READY STATUS RESTARTS AGE kube-system netd-6nbsq 3/3 Running 0 4d23h kube-system netd-g7tpl 3/3 Running 0 4d23hQualquer status diferente de
Runningexige mais investigação. Confira alguns status comuns que podem aparecer:Running: um estado íntegro e em execução.Pending: o pod está aguardando para ser programado em um nó.CrashLoopBackOff: os contêineres no pod estão falhando repetidamente em um loop porque o app é iniciado, sai com um erro e é reiniciado pelo Kubernetes.ImagePullBackOff: o pod não pode extrair a imagem do contêiner.
Os comandos anteriores são apenas dois exemplos de como usar o comando kubectl
get. Você também pode usar o comando para saber mais sobre muitos tipos de recursos do Kubernetes. Para uma lista completa dos recursos que podem ser explorados, consulte
kubectl get
na documentação do Kubernetes.
Saiba mais sobre recursos específicos
Depois de identificar um problema, você precisa receber mais detalhes. Um exemplo de problema pode ser um pod que não tem um status de Running. Para mais detalhes, use o comando kubectl describe.
Por exemplo, para descrever um pod específico, execute o seguinte comando:
kubectl describe pod POD_NAME -n NAMESPACE_NAME
Substitua:
POD_NAME: o nome do pod que está com problemas.NAMESPACE_NAME: o namespace em que o pod está. Se você não tiver certeza do namespace, revise a colunaNamespacena saída do comandokubectl get pods.
A saída do comando kubectl describe inclui informações detalhadas sobre o recurso. Confira algumas das seções mais úteis para revisar ao resolver problemas de um pod:
Status: o status atual do pod.Conditions: a integridade e a prontidão gerais do pod.Restart Count: quantas vezes os contêineres no pod foram reiniciados. Números altos podem ser motivo de preocupação.Events: um registro de coisas importantes que aconteceram com esse pod, como ser programado para um nó, extrair a imagem do contêiner e se ocorreu algum erro. A seçãoEventsgeralmente é onde você pode encontrar as pistas diretas sobre por que um pod está falhando.
Assim como o comando kubectl get, você pode usar o comando kubectl describe para saber mais sobre vários tipos de recursos. Para uma lista completa dos recursos
que podem ser explorados, consulte
kubectl describe
na documentação do Kubernetes.
A seguir
Leia Realizar análises históricas com o Cloud Logging (a próxima página desta série).
Confira esses conceitos aplicados no cenário de solução de problemas de exemplo.
Para receber conselhos sobre como resolver problemas específicos, consulte os guias de solução de problemas do GKE.
Se você não encontrar uma solução para o problema na documentação, consulte Receber suporte para mais ajuda, incluindo conselhos sobre os seguintes tópicos:
- Abrir um caso de suporte entrando em contato com o Cloud Customer Care.
- Receber suporte da comunidade fazendo
perguntas no StackOverflow
e usando a
google-kubernetes-enginetag para pesquisar problemas semelhantes. Você também pode participar do#kubernetes-enginecanal do Slack para receber mais suporte da comunidade. - Abrir problemas ou solicitações de recursos usando o Issue Tracker público.