Investigar o estado de um cluster com o kubectl


Para diagnosticar a causa raiz dos problemas do Google Kubernetes Engine (GKE), muitas vezes é necessário inspecionar o estado ativo, a configuração e os eventos dos recursos do Kubernetes em detalhes. 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 essenciais do kubectl 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 da plataforma que precisam realizar verificações detalhadas da integridade do cluster, gerenciar recursos e resolver problemas de infraestrutura em um nível granular. Também é essencial para desenvolvedores de aplicativos depurarem o comportamento do aplicativo, inspecionarem registros e eventos do pod e verificarem o estado exato das implantações no ambiente do Kubernetes. Para mais informações sobre os papéis comuns e as tarefas de exemplo referenciados no conteúdo do Google Cloud , consulte Funções e tarefas de usuário comuns do GKE.

Antes de começar

Antes de começar, faça o seguinte:

  • 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.
  • Revise suas permissões. Para saber se você tem as permissões necessárias para executar comandos kubectl, use o comando kubectl auth can-i. Por exemplo, para ver 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 vai retornar yes. Caso contrário, ele vai retornar no.

    Se você não tiver permissão para executar um comando kubectl, talvez veja uma mensagem de erro semelhante a esta:

    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 os papéis necessários a você.

Ter 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 os detalhes sobre todos os nós e os respectivos status:

    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 outro status que não seja Ready exige mais investigação.

  2. Para verificar se os pods estão íntegros, veja 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 outro status que não seja Running exige mais investigação. Confira alguns status comuns que você pode encontrar:

    • Running: um estado de execução íntegro.
    • Pending: o pod está aguardando para ser programado em um nó.
    • CrashLoopBackOff: os contêineres no pod falham repetidamente em um loop porque o app inicia, 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 vários tipos de recursos do Kubernetes. Para uma lista completa dos recursos que você pode explorar, consulte kubectl get na documentação do Kubernetes.

Saiba mais sobre recursos específicos

Depois de identificar um problema, você precisa saber mais detalhes. Um exemplo de problema pode ser um pod que não tem o status 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 com problemas.
  • NAMESPACE_NAME: o namespace em que o pod está. Se você não tiver certeza de qual é o 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 seu recurso. Confira algumas das seções mais úteis para revisar ao solucionar problemas de um pod:

  • Status: o status atual do pod.
  • Conditions: a integridade e a prontidão geral 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 eventos importantes que aconteceram com esse pod, como a programação em um nó, o pull da imagem do contêiner e se ocorreram erros. A seção Events geralmente é onde você encontra as pistas diretas de por que um pod está falhando.

Assim como o comando kubectl get, é possível usar o comando kubectl describe para saber mais sobre vários tipos de recursos. Para uma lista completa dos recursos que você pode explorar, consulte kubectl describe na documentação do Kubernetes.

A seguir