Creare snapshot diagnostici quando il cluster avanzato è abilitato

Questo documento mostra come utilizzare il comando gkectl diagnose per creare snapshot diagnostici per la risoluzione dei problemi nei cluster creati utilizzando Google Distributed Cloud (solo software) per VMware quando il cluster avanzato è abilitato. Il cluster avanzato è attivato quando enableAdvancedClusters è impostato su true nel file di configurazione del cluster di amministrazione e nel file di configurazione del cluster utente. Se il cluster avanzato non è abilitato, consulta Creare snapshot di diagnostica quando il cluster avanzato non è abilitato.

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.

gkectl diagnose snapshot

Questo comando comprime lo stato, le configurazioni e i log di un cluster in un file tar. La configurazione predefinita del comando gkectl diagnose snapshot acquisisce le seguenti informazioni sul cluster:

  • Versione di Kubernetes.

  • Stato delle risorse Kubernetes negli spazi dei nomi kube-system e gke-system: cluster, macchine, nodi, servizi, endpoint, ConfigMap, ReplicaSet, CronJob, pod e i relativi proprietari, inclusi deployment, DaemonSet e StatefulSet.

  • Stato del piano di controllo.

  • Dettagli sulla configurazione di ciascun nodo, inclusi indirizzi IP, regole iptables, punti di montaggio, file system, connessioni di rete e processi in esecuzione.

  • Log dei container dal nodo del piano di controllo del cluster amministrativo, quando il server API Kubernetes non è disponibile.

  • Log del comando gkectl diagnose snapshot.

  • Log dei job di preflight.

  • Log dei container negli spazi dei nomi in base agli scenari.

Le credenziali, incluse quelle per vSphere e F5, vengono rimosse prima della creazione del file tar.

Acquisisci lo stato del cluster di amministrazione

Per acquisire lo stato di un cluster di amministrazione, esegui il seguente comando:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Sostituisci ADMIN_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di amministrazione.

L'output include un elenco di file e il nome di un file tar, come mostrato nell'esempio di output riportato di seguito:

Using "system" snapshot configuration...
Creating ssh signer for "[ADMIN_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
    gkectlLogs/gkectl-xxx.log
...
    kubectlCommands/[NAMESPACE]/kubectl_get_pods
    kubectlCommands/[NAMESPACE]/kubectl_get_deployments
    kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
    nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
    nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.

Per estrarre il file tar in una directory, esegui il seguente comando:

tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME

Sostituisci quanto segue:

  • TAR_FILE_NAME: il nome del file tar.

  • EXTRACTION_DIRECTORY_NAME: la directory in cui vuoi estrarre l'archivio del file tar.

Per esaminare l'elenco dei file prodotti dallo snapshot, esegui i seguenti comandi:

cd EXTRACTION_DIRECTORY_NAME/EXTRACTED_SNAPSHOT_DIRECTORY
ls kubectlCommands
ls nodes/NODE_NAME/commands
ls nodes/NODE_NAME/files

Sostituisci NODE_NAME con il nome del nodo per cui vuoi visualizzare i file.

Per visualizzare i dettagli di una determinata operazione, apri uno dei file.

Specifica la chiave SSH per il cluster di amministrazione

Quando ottieni uno snapshot del cluster di amministrazione, gkectl trova automaticamente la chiave SSH privata per il cluster di amministrazione. Puoi anche specificare la chiave in modo esplicito utilizzando il parametro --admin-ssh-key-path.

Segui le istruzioni per utilizzare SSH per connetterti a un nodo del cluster per scaricare le chiavi SSH.

Nel comando gkectl diagnose snapshot, imposta --admin-ssh-key-path sul percorso della chiave decodificata:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --admin-ssh-key-path=PATH_TO_DECODED_KEY

Acquisisci lo stato del cluster utente

Per acquisire lo stato di un cluster utente, esegui il seguente comando:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME

L'esempio di output seguente include un elenco di file e il nome di un file tar:

Using "system" snapshot configuration...
Creating ssh signer for "[USER_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
    gkectlLogs/gkectl-xxx.log
...
    kubectlCommands/[NAMESPACE]/kubectl_get_pods
    kubectlCommands/[NAMESPACE]/kubectl_get_deployments
    kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
    nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/commands/journalctl_-u_kubelet
    nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/files/var/log/startup.logn
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.

Scenari di snapshot

Gli scenari di istantanea ti consentono di controllare le informazioni incluse in un'istantanea. Per specificare uno scenario, utilizza il flag --scenario. L'elenco seguente mostra i valori possibili:

  • system (valore predefinito): raccogli lo snapshot con i log negli spazi dei nomi di sistema supportati.

  • all: raccogli lo snapshot con i log in tutti gli spazi dei nomi, inclusi quelli definiti dall'utente.

Per creare uno snapshot del cluster di amministrazione, non è necessario specificare uno scenario:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG

Per creare uno snapshot di un cluster utente utilizzando lo scenario system:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=system

Per creare uno snapshot di un cluster utente utilizzando lo scenario all:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=all

Usa --log-since per limitare uno snapshot

Puoi utilizzare il flag --log-since per limitare la raccolta dei log a un periodo di tempo recente. Ad esempio, puoi raccogliere solo i log degli ultimi due giorni o delle ultime tre ore. Per impostazione predefinita, diagnose snapshot raccoglie tutti i log.

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=CLUSTER_NAME \
    --scenario=system \
    --log-since=DURATION

Sostituisci <var>DURATION</var> con un valore di tempo come 120m o 48h.

Si applicano le seguenti considerazioni:

  • Il flag --log-since è supportato solo per i log kubectl e journalctl.
  • I flag di comando come --log-since non sono consentiti nella configurazione dell'istantanea personalizzata.

Eseguire una prova di uno snapshot

Puoi utilizzare il flag --dry-run per mostrare le azioni da intraprendere e la configurazione dell'istantanea.

Per eseguire una simulazione sul cluster di amministrazione, inserisci il seguente comando:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=ADMIN_CLUSTER_NAME \
    --dry-run

Per eseguire una simulazione su un cluster di utenti, inserisci il seguente comando:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --dry-run

Utilizzare una configurazione snapshot

Se questi due scenari (--scenario system o all) non soddisfano le tue esigenze, puoi creare uno snapshot personalizzato passando un file di configurazione dello snapshot utilizzando il flag --snapshot-config:

gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

Genera una configurazione di snapshot

Puoi generare una configurazione di snapshot per un determinato scenario passando i flag --scenario e --dry-run. Ad esempio, per visualizzare la configurazione dello snapshot per lo scenario predefinito (system) di un cluster utente, inserisci il seguente comando:

gkectl diagnose snapshot \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster-name=USER_CLUSTER_NAME \
    --scenario=system
    --dry-run

L'output è simile al seguente esempio:

The snapshot configuration is:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
  - kubectl version
  - kubectl cluster-info
  - kubectl top node
  - kubectl top pod -A --containers
  namespaces: []
- commands:
  - kubectl get -o wide --ignore-not-found
  - kubectl get -o yaml --ignore-not-found
  - kubectl describe
  namespaces:
  - kube-system
...
  expandResources: true
- commands:
  - kubectl logs
  namespaces:
  - kube-system
...
kindNodeCommands: []
nodeCommands:
- nodes: []
  commands:
  - uptime
  - df --all --inodes
  - ip addr
  - ip neigh
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1 || true
  - docker info || true
...
- nodes: []
  commands:
  - dmesg
  - systemctl status -l kubelet
  - journalctl --utc -u kubelet
  - journalctl --utc -u kubelet-monitor.service
...
nodeFiles:
- nodes: []
  files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
...
- nodes: []
  files:
  - /var/log/apiserver/audit-proxy-buffer/* || true

Nell'output vengono visualizzate le seguenti informazioni:

  • numOfParallelThreads: numero di thread paralleli utilizzati per acquisire gli snapshot.

  • excludeWords: elenco di parole da escludere dallo snapshot (senza distinzione tra maiuscole e minuscole). Le righe contenenti queste parole vengono rimosse dai risultati dello snapshot. "password" viene sempre escluso, indipendentemente dal fatto che tu lo specifichi o meno.

  • kubectlCommands: elenco dei comandi kubectl da eseguire. I risultati vengono salvati. I comandi vengono eseguiti negli spazi dei nomi corrispondenti. Per i comandi kubectl logs, tutti i pod e i container negli spazi dei nomi corrispondenti vengono aggiunti automaticamente. Le espressioni regolari sono supportate per la specifica degli spazi dei nomi. Se non specifichi uno spazio dei nomi, viene presupposto lo spazio dei nomi default.

  • nodeCommands: elenco dei comandi da eseguire sui nodi corrispondenti. I risultati vengono salvati. Se i nodi non sono specificati, vengono presi in considerazione tutti i nodi del cluster di destinazione.

  • nodeFiles: elenco dei file da raccogliere dai nodi corrispondenti. I file vengono salvati. Se i nodi non sono specificati, vengono presi in considerazione tutti i nodi del cluster di destinazione.

Passaggi successivi

Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.