Questo documento mostra come utilizzare il comando gkectl diagnose
per creare
snapshot diagnostici per risolvere i problemi nei cluster creati utilizzando
Google Distributed Cloud (solo software) per VMware. Lo strumento gkectl
include 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 i cluster utente.
Per ulteriori informazioni su come utilizzare il comando gkectl diagnose cluster
per
diagnosticare i problemi dei cluster,
Diagnostica i problemi del cluster.
gkectl diagnose snapshot
Questo comando comprime lo stato, le configurazioni e i log di un cluster in un
.tar. Quando esegui gkectl diagnose snapshot
, il comando
esegue gkectl diagnose cluster
come parte del processo e i file di output vengono
inserito in una nuova cartella dell'istantanea denominata /diagnose-report
.
Snapshot predefinito
La configurazione predefinita del comando gkectl diagnose snapshot
acquisisce
le seguenti informazioni sul cluster:
la versione di Kubernetes.
Stato delle risorse Kubernetes negli spazi dei nomi kube-system e gke-system: cluster, macchina, nodi, servizi, endpoint, ConfigMap, ReplicaSet i CronJob, i pod e i relativi proprietari, tra cui gli oggetti Deployment, DaemonSet e StatefulSet.
Stato del piano di controllo.
Dettagli sulla configurazione di ogni nodo, tra cui indirizzi IP, regole iptables e punti di montaggio, file system, connessioni di rete e processi in esecuzione.
Log dei container dal nodo del piano di controllo del cluster di amministrazione, quando Kubernetes Il server API non è disponibile.
Informazioni vSphere, inclusi oggetti VM e relativi eventi basati sulla risorsa Piscina. Raccoglie anche informazioni su data center, cluster, rete e Oggetti Datastore associati alle VM.
Informazioni sul bilanciatore del carico BIG-IP di F5, tra cui server virtuale, server indirizzo, pool, nodo e monitoraggio.
Log dal comando
gkectl diagnose snapshot
.Log dei job preflight.
Log dei container negli spazi dei nomi basati sugli scenari.
Informazioni sulla scadenza del certificato Kubernetes del cluster di amministrazione in file snapshot
/nodes/<admin_master_node_name>/sudo_kubeadm_certs_check-expiration
.Un file indice HTML per tutti i file nell'istantanea.
Facoltativamente, il file di configurazione del cluster di amministrazione utilizzato per installare ed eseguire l'upgrade del cluster con il flag
--config
.
Le credenziali, anche per vSphere e F5, vengono rimosse prima che il file tar venga è stato creato.
Snapshot leggero
In Google Distributed Cloud 1.29 e versioni successive, una versione leggera di
gkectl diagnose snapshot
è disponibile sia per i cluster di amministrazione che per i cluster utente.
Lo snapshot leggero velocizza il processo di creazione dello snapshot poiché acquisisce
meno informazioni sul cluster. Quando aggiungi --scenario=lite
a
del comando, nello snapshot sono incluse solo le seguenti informazioni:
Stato delle risorse Kubernetes negli spazi dei nomi kube-system e gke-system: cluster, macchina, nodi, servizi, endpoint, ConfigMap, ReplicaSet i CronJob, i pod e i relativi proprietari, tra cui gli oggetti Deployment, DaemonSet e StatefulSet
Log dal comando
gkectl diagnose snapshot
Acquisisci stato del cluster
Se il comando gkectl diagnose cluster
rileva errori, devi acquisire i
lo stato del cluster e fornire le informazioni necessarie all'assistenza clienti Google Cloud. Puoi acquisire
queste informazioni usando il comando gkectl diagnose snapshot
.
gkectl diagnose snapshot
ha un flag facoltativo per --config
. Inoltre,
alla raccolta di informazioni sul cluster,
questo flag raccoglie il file di configurazione usato per creare o eseguire l'upgrade
in un cluster Kubernetes.
Acquisisci 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 a
per fornire altre informazioni di debug.
Nella versione 1.29 e successive, puoi includere --scenario=lite
se non disponi
e necessitano di tutte le informazioni
nello snapshot predefinito.
L'output include un elenco di file e il nome di un file tar, come mostrato in il seguente output di 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 l'archivio del file tar.
Per esaminare l'elenco dei file generati dallo snapshot, esegui questo comando :
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
di 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 la chiave SSH privata
per il cluster di amministrazione. Puoi anche specificare la chiave in modo esplicito
usando il parametro --admin-ssh-key-path
.
Segui le istruzioni per Utilizzo di SSH per connettersi a un nodo cluster per scaricare le chiavi SSH.
Nel comando gkectl diagnose snapshot
, imposta --admin-ssh-key-path
sul
percorso chiave decodificato:
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 questo comando:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
L'output di esempio seguente include un elenco di file e il nome di un tar file:
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 un
senza dover creare uno snapshot. Per specificare uno scenario, utilizza il flag --scenario
. Il seguente elenco
mostra i valori possibili:
system
(predefinito): raccogli snapshot con log negli spazi dei nomi di sistema supportati.all
: raccogli snapshot con log in tutti gli spazi dei nomi, inclusi quelli definiti dall'utente spazi dei nomi.lite
(1.29 e versioni successive): raccogli snapshot solo con risorse Kubernetes egkectl
di log. Tutti gli altri log, come i log dei container e i log dei kernel dei nodi sono escluse.
Gli scenari di snapshot disponibili variano a seconda della piattaforma Google Distributed Cloud completamente gestita.
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 un :
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
Usa --log-since
per limitare uno snapshot
Puoi usare il flag --log-since
per limitare la raccolta dei log a un orario recente
punto. Ad esempio, potresti raccogliere solo i log degli ultimi due giorni
le 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 relativo all'ora 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 nello snapshot personalizzato configurazione.
Esegui una prova per uno snapshot
Puoi utilizzare il flag --dry-run
per mostrare le azioni da intraprendere e
configurazione dello snapshot.
Per eseguire una prova sul cluster di amministrazione, inserisci il comando seguente:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=ADMIN_CLUSTER_NAME \ --dry-run
Per eseguire una prova su un cluster utente, inserisci il comando seguente:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --dry-run
Utilizza 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 snapshot
con 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 vedere lo snapshot
per lo scenario predefinito
(system
) di un cluster utente, inserisci il comando seguente:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=system --dry-run
L'output è simile all'esempio seguente:
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 dall'istantanea (maiuscole/minuscole) insensibile). Le righe che contengono queste parole vengono rimosse dai risultati degli snapshot. "password" è sempre escluso, indipendentemente da se lo specifichi.kubectlCommands
: elenco di comandi kubectl da eseguire. I risultati sono salvate. I comandi vengono eseguiti in base agli spazi dei nomi corrispondenti. Per i comandikubectl logs
, tutti i pod e i container nella vengono aggiunti automaticamente. Le espressioni regolari sono supportate che specifica gli spazi dei nomi. Se non specifichi uno spazio dei nomi,default
del deployment.nodeCommands
: elenco di comandi da eseguire sui nodi corrispondenti. I risultati vengono salvati. Se i nodi non sono specificati, tutti i nodi nella destinazione vengono presi in considerazione.nodeFiles
: elenco di file da raccogliere dai nodi corrispondenti. La vengono salvati i file. Se i nodi non sono specificati, tutti i nodi nel cluster di destinazione vengono presi in considerazione.seesawCommands
: elenco dei comandi da eseguire per raccogliere il bilanciatore del carico Seesaw informazioni. I risultati vengono salvati se il cluster utilizza il carico Seesaw con il bilanciatore del carico di rete passthrough esterno regionale.seesawFiles
: elenco dei file da raccogliere per il bilanciatore del carico Seesaw.nodeCollectors
: un raccoglitore in esecuzione per i nodi Cilium per raccogliere eBPF informazioni.f5
: un flag per consentire la raccolta di informazioni relative a F5 BIG-IP con il bilanciatore del carico di rete passthrough esterno regionale.vCenter
: un flag per consentire la raccolta di informazioni relative a vCenter.prometheusRequests
: elenco di richieste Prometheus. I risultati vengono salvati.
carica snapshot in un bucket Cloud Storage
Per semplificare la conservazione, l'analisi e l'archiviazione dei registri, puoi caricare tutti i di snapshot di un cluster specifico in un bucket Cloud Storage. Questo è particolarmente utile se hai bisogno dell'assistenza dei assistenza clienti Google Cloud.
Prima di caricare gli snapshot in un bucket Cloud Storage, esamina e soddisfa i seguenti requisiti iniziali:
Attiva
storage.googleapis.com
in progetto host del parco risorse. Anche se puoi utilizzare un progetto diverso, è consigliabile utilizzare il progetto host del parco risorse.gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com
Concedi
roles/storage.admin
all'account di servizio nel progetto padre, e passare il file di chiave JSON dell'account di servizio utilizzando--service-account-key-file
. Puoi usare qualsiasi account di servizio, il collega account di servizio è consigliato. Consulta Account di servizio per ulteriori informazioni.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 connettore registra un account di servizio.
Una volta soddisfatti questi requisiti, ora puoi caricare l'istantanea 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
Account di servizio dell'assistenza clienti Google Cloud fornito dall'assistenza clienti Google Cloud, insieme a qualsiasi
da parte di altri account di servizio
forniti dall'assistenza clienti Google Cloud.
Quando usi il flag --upload
, il comando cerca nel progetto
bucket di archiviazione il cui nome inizia con "anthos-snapshot-
" Se un
un bucket esistente, il comando carica lo snapshot in quel bucket. Se il comando
non trova un bucket con un nome corrispondente, crea un nuovo bucket con il nome
anthos-snapshot-UUID
,
dove UUID
è
Un identificatore univoco universale di 32 cifre.
Se usi il flag --share-with
, non è necessario eseguire manualmente
condividere l'accesso al bucket con l'assistenza clienti Google Cloud.
L'output di esempio che segue viene visualizzato quando carichi uno snapshot 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>