Esaminare lo stato di un cluster con kubectl


La diagnosi della causa principale dei problemi di Google Kubernetes Engine (GKE) spesso richiede l'ispezione dettagliata dello stato live, della configurazione e degli eventi delle risorse Kubernetes. Per andare oltre i sintomi superficiali, hai bisogno di strumenti per interrogare e interagire direttamente con il control plane del cluster.

Utilizza questa pagina per scoprire i comandi kubectl essenziali per esaminare lo stato live del tuo cluster. L'apprendimento di questi comandi ti consente di raccogliere informazioni dettagliate direttamente dal control plane di Kubernetes, aiutandoti a capire perché si verifica un problema.

Queste informazioni sono importanti per gli amministratori e gli operatori della piattaforma che devono eseguire controlli di integrità approfonditi del cluster, gestire le risorse e risolvere i problemi dell'infrastruttura a un livello granulare. È essenziale anche per gli sviluppatori di applicazioni per il debug del comportamento delle applicazioni, l'ispezione dei log e degli eventi dei pod e la verifica dello stato esatto dei deployment nell'ambiente Kubernetes. Per saperne di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti di Google Cloud , consulta Ruoli e attività comuni degli utenti GKE.

Prima di iniziare

Prima di iniziare, esegui le seguenti operazioni:

  • Installa kubectl.
  • Configura lo strumento a riga di comando kubectl per comunicare con il cluster:

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

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del tuo cluster.
    • LOCATION: la posizione di Compute Engine del control plane del cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.
  • Rivedi le tue autorizzazioni. Per verificare se disponi delle autorizzazioni necessarie per eseguire i comandi kubectl, utilizza il comando kubectl auth can-i. Ad esempio, per verificare se hai l'autorizzazione per eseguire kubectl get nodes, esegui il comando kubectl auth can-i get nodes.

    Se disponi delle autorizzazioni richieste, il comando restituisce yes; in caso contrario, il comando restituisce no.

    Se non disponi dell'autorizzazione per eseguire un comando kubectl, potresti visualizzare un messaggio di errore simile al seguente:

    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 non disponi delle autorizzazioni richieste, chiedi all'amministratore del cluster di assegnarti i ruoli necessari.

Visualizzare una panoramica di ciò che è in esecuzione

Il comando kubectl get ti aiuta a visualizzare una panoramica di ciò che sta accadendo nel tuo cluster. Utilizza i seguenti comandi per visualizzare lo stato di due dei componenti del cluster più importanti, ovvero nodi e pod:

  1. Per verificare l'integrità dei nodi, visualizza i dettagli di tutti i nodi e i relativi stati:

    kubectl get nodes
    

    L'output è simile al seguente:

    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
    

    Qualsiasi stato diverso da Ready richiede ulteriori indagini.

  2. Per verificare l'integrità dei pod, visualizza i dettagli di tutti i pod e i relativi stati:

    kubectl get pods --all-namespaces
    

    L'output è simile al seguente:

    NAMESPACE   NAME       READY   STATUS      RESTARTS   AGE
    kube-system netd-6nbsq 3/3     Running     0          4d23h
    kube-system netd-g7tpl 3/3     Running     0          4d23h
    

    Qualsiasi stato diverso da Running richiede ulteriori indagini. Di seguito sono riportati alcuni stati comuni che potresti visualizzare:

    • Running: uno stato di esecuzione integro.
    • Pending: il pod è in attesa di essere pianificato su un nodo.
    • CrashLoopBackOff: i container nel pod vanno in arresto anomalo ripetutamente in un ciclo perché l'app si avvia, esce con un errore e viene riavviata da Kubernetes.
    • ImagePullBackOff: il pod non può eseguire il pull dell'immagine container.

I comandi precedenti sono solo due esempi di come puoi utilizzare il comando kubectl get. Puoi anche utilizzare il comando per saperne di più su molti tipi di risorse Kubernetes. Per un elenco completo delle risorse che puoi esplorare, consulta kubectl get nella documentazione di Kubernetes.

Scopri di più su risorse specifiche

Dopo aver identificato un problema, devi ottenere maggiori dettagli. Un esempio di problema potrebbe essere un Pod che non ha lo stato Running. Per ulteriori dettagli, utilizza il comando kubectl describe.

Ad esempio, per descrivere un pod specifico, esegui questo comando:

kubectl describe pod POD_NAME -n NAMESPACE_NAME

Sostituisci quanto segue:

  • POD_NAME: il nome del pod che presenta problemi.
  • NAMESPACE_NAME: lo spazio dei nomi in cui si trova il pod. Se non sai qual è lo spazio dei nomi, esamina la colonna Namespace dell'output del comando kubectl get pods.

L'output del comando kubectl describe include informazioni dettagliate sulla tua risorsa. Di seguito sono riportate alcune delle sezioni più utili da esaminare quando risolvi i problemi di un Pod:

  • Status: lo stato attuale del pod.
  • Conditions: lo stato generale e la preparazione del pod.
  • Restart Count: il numero di volte in cui i container nel pod sono stati riavviati. Numeri elevati possono essere motivo di preoccupazione.
  • Events: un log degli eventi importanti che si sono verificati per questo pod, come la pianificazione su un nodo, il pull dell'immagine del container e l'eventuale presenza di errori. La sezione Events è spesso il luogo in cui puoi trovare gli indizi diretti sul motivo per cui un pod non funziona.

Come il comando kubectl get, puoi utilizzare il comando kubectl describe per scoprire di più su più tipi di risorse. Per un elenco completo delle risorse che puoi esplorare, consulta kubectl describe nella documentazione di Kubernetes.

Passaggi successivi