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 non è abilitato.
Il cluster avanzato non è abilitato quando enableAdvancedClusters
è impostato su false
nel
file di configurazione del cluster di amministrazione
e nel file di configurazione del cluster utente. Se
il cluster avanzato è abilitato, consulta
Creare snapshot quando il cluster avanzato è abilitato.
Lo strumento gkectl
ha due comandi per la risoluzione dei problemi relativi ai cluster:
gkectl diagnose snapshot
e gkectl diagnose cluster
. I comandi funzionano sia con i cluster di amministrazione sia con quelli utente.
Per ulteriori informazioni su come utilizzare il comando gkectl diagnose cluster
per
diagnosticare i problemi del cluster, vedi
Diagnosticare i problemi del cluster.
gkectl diagnose snapshot
Questo comando comprime lo stato, le configurazioni e i log di un cluster in un file tar. Quando esegui gkectl diagnose snapshot
, il comando esegue automaticamente
gkectl diagnose cluster
nell'ambito del processo e i file di output vengono
inseriti in una nuova cartella dello snapshot chiamata /diagnose-report
.
Snapshot predefinito
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, macchina, nodi, servizi, endpoint, ConfigMap, ReplicaSet, CronJob, pod e proprietari di questi pod, inclusi deployment, DaemonSet e StatefulSet.
Stato del control plane.
Dettagli su ogni configurazione del nodo, inclusi indirizzi IP, regole iptables, punti di montaggio, file system, connessioni di rete e processi in esecuzione.
Log dei container dal nodo del control plane del cluster di amministrazione, quando il server API Kubernetes non è disponibile.
Informazioni su vSphere, inclusi gli oggetti VM e i relativi eventi in base al pool di risorse. Raccoglie anche informazioni sugli oggetti Datacenter, Cluster, Network e Datastore associati alle VM.
Informazioni sul bilanciatore del carico F5 BIG-IP, tra cui server virtuale, indirizzo virtuale, pool, nodo e monitor.
Log del comando
gkectl diagnose snapshot
.Log dei job preflight.
Log dei container negli spazi dei nomi in base agli scenari.
Informazioni sulla scadenza del certificato Kubernetes del cluster di amministrazione nel file snapshot
/nodes/<admin_master_node_name>/sudo_kubeadm_certs_check-expiration
.Un file di indice HTML per tutti i file nello snapshot.
(Facoltativo) Il file di configurazione del cluster di amministrazione utilizzato per installare ed eseguire l'upgrade del cluster con il flag
--config
.
Le credenziali, incluse quelle per vSphere e F5, vengono rimosse prima della creazione del file tar.
Snapshot leggero
In Google Distributed Cloud versione 1.29 e successive, è disponibile una versione leggera di
gkectl diagnose snapshot
sia per i cluster di amministrazione sia per i cluster utente.
Lo snapshot leggero velocizza la procedura di snapshot perché acquisisce
meno informazioni sul cluster. Quando aggiungi --scenario=lite
al comando, nello snapshot vengono incluse solo le seguenti informazioni:
Stato delle risorse Kubernetes negli spazi dei nomi kube-system e gke-system: cluster, macchina, nodi, servizi, endpoint, ConfigMaps, ReplicaSets, CronJobs, pod e proprietari di questi pod, inclusi deployment, DaemonSets e StatefulSets
Log del comando
gkectl diagnose snapshot
Acquisizione dello stato del cluster
Se i comandi gkectl diagnose cluster
rilevano errori, devi acquisire lo stato del cluster e fornire le informazioni all'assistenza clienti Google Cloud. Puoi acquisire
queste informazioni utilizzando il comando gkectl diagnose snapshot
.
gkectl diagnose snapshot
ha un flag facoltativo per --config
. Oltre a raccogliere informazioni sul cluster, questo flag raccoglie il file di configurazione utilizzato per creare o eseguire l'upgrade del cluster.
Acquisire lo stato del cluster di amministrazione
Per acquisire lo stato di un cluster di amministrazione, esegui questo comando:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config
Il parametro --config
è facoltativo:
Se si verifica un problema con un indirizzo IP virtuale (VIP) nel cluster di destinazione,
utilizza il flag --config
per fornire il file di configurazione del cluster di amministrazione e
ottenere ulteriori informazioni per il debug.
Nella versione 1.29 e successive, puoi includere --scenario=lite
se non hai bisogno di tutte le informazioni nello snapshot predefinito.
L'output include un elenco di file e il nome di un file tar, come mostrato nel seguente esempio:
Taking snapshot of admin cluster "[ADMIN_CLUSTER_NAME]"...
Using default snapshot configuration...
Setting up "[ADMIN_CLUSTER_NAME]" ssh key file...DONE
Taking snapshots...
commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system
...
nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [TAR_FILE_NAME].tar.gz.
Per estrarre il file tar in una directory, esegui questo 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 tar.
Per esaminare l'elenco dei file prodotti dallo snapshot, esegui questi 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 acquisisci 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 Utilizzo di SSH per la connessione 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
Acquisizione dello stato del cluster utente
Per acquisire lo stato di un cluster utente, esegui questo comando:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
Il seguente output di esempio include un elenco di file e il nome di un file tar:
Taking snapshot of user cluster "[USER_CLUSTER_NAME]"...
Using default snapshot configuration...
Setting up "[USER_CLUSTER_NAME]" ssh key file...DONE
commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user
...
commands/kubectl_get_pods_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
commands/kubectl_get_deployments_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system
...
nodes/[USER_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[USER_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.
Scenari di snapshot
Gli scenari di snapshot ti consentono di controllare le informazioni incluse in uno snapshot. Per specificare uno scenario, utilizza il flag --scenario
. L'elenco seguente
mostra i valori possibili:
system
(impostazione predefinita): 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.lite
(1.29 e versioni successive): raccogli lo snapshot solo con le risorse Kubernetes e i loggkectl
. Tutti gli altri log, come i log dei container e i log del kernel del nodo, sono esclusi.
Gli scenari di snapshot disponibili variano a seconda della versione di Google Distributed Cloud.
Versioni precedenti alla 1.13:
system
,system-with-logs
,all
eall-with-logs
.Versioni 1.13 - 1.28:
system
eall
. Lo scenariosystem
è lo stesso del vecchio scenariosystem-with-logs
. Lo scenarioall
è lo stesso del vecchio scenarioall-with-logs
.Versioni 1.29 e successive:
system
,all
elite
.
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
Per creare uno snapshot di un cluster utente utilizzando lo scenario lite
:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=lite
Utilizzare --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 logkubectl
ejournalctl
. - I flag di comando come
--log-since
non sono consentiti nella configurazione dello snapshot personalizzato.
Eseguire una prova per uno snapshot
Puoi utilizzare il flag --dry-run
per mostrare le azioni da intraprendere e la
configurazione dello snapshot.
Per eseguire una prova generale sul cluster di amministrazione, inserisci questo comando:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=ADMIN_CLUSTER_NAME \ --dry-run
Per eseguire una prova generale su un cluster utente, inserisci questo 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 snapshot
Puoi generare una configurazione di snapshot per uno scenario specifico 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:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
- kubectl get clusters -o wide
- kubectl get machines -o wide
- kubectl get clusters -o yaml
- kubectl get machines -o yaml
- kubectl describe clusters
- kubectl describe machines
namespaces:
- default
- commands:
- kubectl version
- kubectl cluster-info
- kubectl get nodes -o wide
- kubectl get nodes -o yaml
- kubectl describe nodes
namespaces: []
- commands:
- kubectl get pods -o wide
- kubectl get deployments -o wide
- kubectl get daemonsets -o wide
- kubectl get statefulsets -o wide
- kubectl get replicasets -o wide
- kubectl get services -o wide
- kubectl get jobs -o wide
- kubectl get cronjobs -o wide
- kubectl get endpoints -o wide
- kubectl get configmaps -o wide
- kubectl get pods -o yaml
- kubectl get deployments -o yaml
- kubectl get daemonsets -o yaml
- kubectl get statefulsets -o yaml
- kubectl get replicasets -o yaml
- kubectl get services -o yaml
- kubectl get jobs -o yaml
- kubectl get cronjobs -o yaml
- kubectl get endpoints -o yaml
- kubectl get configmaps -o yaml
- kubectl describe pods
- kubectl describe deployments
- kubectl describe daemonsets
- kubectl describe statefulsets
- kubectl describe replicasets
- kubectl describe services
- kubectl describe jobs
- kubectl describe cronjobs
- kubectl describe endpoints
- kubectl describe configmaps
namespaces:
- kube-system
- gke-system
- gke-connect.*
prometheusRequests: []
nodeCommands:
- nodes: []
commands:
- uptime
- df --all --inodes
- ip addr
- sudo iptables-save --counters
- mount
- ip route list table all
- top -bn1
- sudo docker ps -a
- ps -edF
- ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
- sudo conntrack --count
nodeFiles:
- nodes: []
files:
- /proc/sys/fs/file-nr
- /proc/sys/net/nf_conntrack_max
seesawCommands: []
seesawFiles: []
nodeCollectors:
- nodes: []
f5:
enabled: true
vCenter:
enabled: true
Nell'output vengono visualizzate le seguenti informazioni:
numOfParallelThreads
: Numero di thread paralleli utilizzati per creare 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" è 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 sugli spazi dei nomi corrispondenti. Per i comandikubectl logs
, tutti i pod e i container negli spazi dei nomi corrispondenti vengono aggiunti automaticamente. Le espressioni regolari sono supportate per specificare gli spazi dei nomi. Se non specifichi uno spazio dei nomi, viene utilizzato lo spazio dei nomidefault
.nodeCommands
: elenco di comandi da eseguire sui nodi corrispondenti. I risultati vengono salvati. Quando i nodi non vengono 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. Quando i nodi non vengono specificati, vengono presi in considerazione tutti i nodi del cluster di destinazione.seesawCommands
: elenco di comandi da eseguire per raccogliere informazioni sul bilanciatore del carico Seesaw. I risultati vengono salvati se il cluster utilizza il bilanciatore del carico Seesaw.seesawFiles
: elenco dei file da raccogliere per il bilanciatore del carico Seesaw.nodeCollectors
: un raccoglitore in esecuzione per i nodi Cilium per raccogliere informazioni eBPF.f5
: un flag per attivare la raccolta di informazioni relative al bilanciatore del carico F5 BIG-IP.vCenter
: un flag per attivare la raccolta di informazioni relative a vCenter.prometheusRequests
: elenco delle richieste Prometheus. I risultati vengono salvati.
Caricare snapshot in un bucket Cloud Storage
Per semplificare la tenuta dei registri, l'analisi e l'archiviazione, puoi caricare tutti gli snapshot di un cluster specifico in un bucket Cloud Storage. Ciò è particolarmente utile se hai bisogno dell'assistenza clienti Google Cloud.
Prima di caricare gli snapshot in un bucket Cloud Storage, esamina e completa i seguenti requisiti iniziali:
Abilita
storage.googleapis.com
nel progetto host del parco progetti. Anche se puoi utilizzare un progetto diverso, ti consigliamo il progetto host del parco risorse.gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com
Concedi il ruolo
roles/storage.admin
all'account di servizio nel progetto padre e trasmetti il file JSON della chiave dell'account di servizio utilizzando il parametro--service-account-key-file
. Puoi utilizzare qualsiasi service account, ma è consigliabile l'account di servizio di registrazione della connessione. Per ulteriori informazioni, consulta Service account.gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT" \ --role "roles/storage.admin"
Sostituisci
CONNECT_REGISTER_SERVICE_ACCOUNT
con il account di servizio di registrazione di Connect.
Una volta soddisfatti questi requisiti, puoi caricare lo snapshot nel bucket Cloud Storage:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name CLUSTER_NAME \ --upload \ --share-with GOOGLE_SUPPORT_SERVICE_ACCOUNT
Il flag --share-with
può accettare un elenco di nomi di account di servizio. Sostituisci
GOOGLE_SUPPORT_SERVICE_ACCOUNT
con il
account di servizio dell'assistenza clienti Google Cloud fornito dall'assistenza clienti Google Cloud, insieme a qualsiasi
altro service account fornito dall'assistenza clienti Google Cloud.
Quando utilizzi il flag --upload
, il comando cerca nel progetto un bucket di archiviazione il cui nome inizia con "anthos-snapshot-
". Se esiste un bucket di questo tipo, il comando carica lo snapshot in quel bucket. Se il comando
non trova un bucket con un nome corrispondente, ne crea uno nuovo con il nome
anthos-snapshot-UUID
,
dove UUID
è
un identificatore univoco universale di 32 cifre.
Quando utilizzi il flag --share-with
, non devi
condividere manualmente l'accesso al bucket con l'assistenza clienti Google Cloud.
Il seguente output di esempio viene visualizzato quando carichi uno snapshot in un bucket Cloud Storage:
Using "system" snapshot configuration...
Taking snapshot of user cluster <var>CLUSTER_NAME</var>...
Setting up <var>CLUSTER_NAME</var> ssh key...DONE
Using the gke-connect register service account key...
Setting up Google Cloud Storage bucket for uploading the snapshot...DONE
Taking snapshots in 10 thread(s)...
...
Snapshot succeeded.
Snapshots saved in "<var>SNAPSHOT_FILE_PATH</var>".
Uploading snapshot to Google Cloud Storage...... DONE
Uploaded the snapshot successfully to gs://anthos-snapshot-a4b17874-7979-4b6a-a76d-e49446290282/<var>xSNAPSHOT_FILE_NAME</var>.
Shared successfully with service accounts:
<var>GOOGLE_SUPPORT_SERVICE_ACCOUNT</var>
Passaggi successivi
Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.
Puoi anche consultare la sezione Richiedere assistenza per ulteriori informazioni sulle risorse di assistenza, tra cui:
- Requisiti per l'apertura di una richiesta di assistenza.
- Strumenti per aiutarti a risolvere i problemi, come log e metriche.
- Componenti supportati, versioni e funzionalità di Google Distributed Cloud per VMware (solo software).