Investigar o estado de um cluster com o kubectl

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 kubectl para se comunicar com o cluster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=LOCATION
    

    Substitua:

    • 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 kubectl comandos, use o kubectl auth can-i comando. Por exemplo, para saber se você tem permissão para executar kubectl get nodes, execute o comando kubectl 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:

  1. Para verificar se os nós estão íntegros, confira detalhes sobre todos os nós e os status deles:

    kubectl get nodes
    

    O 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.1785003
    

    Qualquer status diferente de Ready exige mais investigação.

  2. Para verificar se os pods estão íntegros, confira detalhes sobre todos os pods e os status deles:

    kubectl get pods --all-namespaces
    

    O 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          4d23h
    

    Qualquer status diferente de Running exige 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 coluna Namespace na saída do comando kubectl 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ção Events geralmente é 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