Se riscontri un problema con uno dei tuoi cluster, puoi richiedere assistenza all'assistenza clienti Google Cloud. L 'assistenza clienti potrebbe chiederti di creare un'istantanea del cluster, utilizzabile per diagnosticare il problema. Uno snapshot acquisisce i file di configurazione dei cluster e dei nodi, nonché pacchettizza queste informazioni in un unico file tar.
Questo documento descrive come creare snapshot predefiniti o più snapshot personalizzati di un cluster. Spiega inoltre come creare snapshot quando un cluster riscontra errori specifici.
Snapshot predefiniti
Le seguenti sezioni descrivono cosa contiene uno snapshot standard e come crearne uno. Per informazioni sugli snapshot personalizzati, consulta la sezione Snapshot personalizzati.
Quali informazioni contiene uno snapshot predefinito?
Lo snapshot di un cluster è un file tar di file e log di configurazione relativi al cluster. In particolare, la configurazione predefinita del comando 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 relativi proprietari, inclusi deployment, DaemonSet e StatefulSet.
Dettagli sulla configurazione di ciascun nodo, inclusi indirizzi IP, regole iptables, punti di montaggio, file system, connessioni di rete e processi in esecuzione.
Informazioni sul runtime VM su GDC e su eventuali VM e risorse correlate alle VM in esecuzione nel cluster. Per maggiori informazioni su cosa viene raccolto per impostazione predefinita e su come creare snapshot specifici delle VM, consulta Informazioni sulle VM negli snapshot in questo documento.
Log del comando
bmctl check cluster --snapshot
.
Le informazioni sulle credenziali di un cluster non sono incluse nello snapshot predefinito. Se l'assistenza clienti Google Cloud richiede queste informazioni, consulta Recupero delle informazioni sui cluster.
Per un elenco completo delle informazioni raccolte quando esegui il comando snapshot, vedi il file di configurazione mostrato nella sezione Il file di configurazione in dettaglio. Questo file di configurazione mostra quali comandi vengono eseguiti quando si crea uno snapshot predefinito.
Come creare uno snapshot predefinito
Il comando bmctl check cluster
crea uno snapshot di un cluster. Puoi utilizzare questo comando per eseguire una delle seguenti azioni:
- Creare uno snapshot e caricarlo automaticamente in un bucket Cloud Storage.
- Crea uno snapshot di un cluster e salva il file dello snapshot sulla macchina locale su cui esegui il comando.
Metodo n. 1: crea uno snapshot predefinito e caricalo automaticamente nel bucket Cloud Storage
Per creare e caricare uno snapshot in un bucket Cloud Storage:
Configura l'API e l'account di servizio come descritto in Configurare un account di servizio che può accedere a un bucket Cloud Storage.
Si tratta di un passaggio da eseguire una sola volta.
Esegui questo comando
bmctl
per creare e caricare automaticamente uno snapshot in un bucket Cloud Storage:bmctl check cluster --snapshot --cluster=CLUSTER_NAME \ --admin-kubeconfig=ADMIN_KUBECONFIG \ --service-account-key-file SA_KEY_FILE
Nel comando, sostituisci le voci seguenti con informazioni specifiche per il tuo ambiente cluster:
CLUSTER_NAME
: il nome del cluster di cui vuoi acquisire uno snapshot.ADMIN_KUBECONFIG
: il percorso del file kubeconfig del cluster di amministrazione.SA_KEY_FILE
: il percorso del file di chiavi JSON scaricato per l'account di servizio creato nel passaggio precedente. Se non utilizzi il flag--service-account-key-file
, il comando utilizza le credenziali associate alla variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS. La specifica esplicita delle credenziali dell'account di servizio con il flag ha la precedenza.
Questo comando genera un file tar di snapshot e lo salva localmente. Quando l'account di servizio è configurato correttamente, il comando carica anche il file tar dello snapshot in un bucket in Cloud Storage. Il comando cerca nel progetto un bucket di archiviazione il cui nome inizia con "
anthos-snapshot-
". Se il bucket di questo tipo esce, 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 nomeanthos-snapshot-UUID
, doveUUID
è un identificatore univoco universale a 32 cifre.Condividi l'accesso con l'assistenza clienti Google Cloud come descritto in Consentire all'Assistenza Google Cloud di visualizzare lo snapshot del cluster caricato.
Metodo 2: crea uno snapshot predefinito solo sulla macchina locale
Usa il flag --local
per assicurarti che lo snapshot del cluster venga salvato solo localmente. Puoi acquisire lo stato dei cluster creati con il seguente comando:
bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
--admin-kubeconfig=ADMIN_KUBECONFIG --local
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del cluster di destinazione.ADMIN_KUBECONFIG
: il percorso del file kubeconfig del cluster di amministrazione.
Questo comando restituisce un file tar alla tua macchina locale. Il nome di questo file tar è nel formato snapshot-CLUSTER_NAME-TIMESTAMP.tar.gz
, dove TIMESTAMP
indica la data e l'ora di creazione del file. Questo file tar include informazioni di debug pertinenti sui componenti e sulle macchine di sistema di un cluster.
Quando esegui questo comando, vengono raccolte informazioni sui pod dai seguenti spazi dei nomi: gke-system
, gke-connect
, capi-system
, capi-webhook-system
, cert-manager
e capi-kubeadm-bootstrap-system
Tuttavia, puoi ampliare l'ambito delle informazioni diagnostiche raccolte utilizzando il flag --snapshot-scenario all
. Questo flag aumenta l'ambito dello snapshot di diagnostica per includere tutti i pod in un cluster:
bmctl check cluster --snapshot --snapshot-scenario all \
--cluster=CLUSTER_NAME \
--kubeconfig=KUBECONFIG_PATH \
--local
Scenari di snapshot
Il comando bmctl check cluster --snapshot
supporta due scenari. Per specificare uno scenario, utilizza il flag --scenario
. Il seguente elenco mostra i possibili valori:
system
: raccogli uno snapshot dei componenti di sistema, inclusi i relativi log.all
: raccogli uno snapshot di tutti i pod, inclusi i relativi log.
Puoi utilizzare ciascuno dei due scenari con un cluster di amministrazione o un cluster utente. Ad esempio, per creare uno snapshot del cluster di amministrazione utilizzando lo scenario system
:
bmctl check cluster --snapshot --snapshot-scenario system \ --cluster=ADMIN_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Per creare uno snapshot di un cluster utente utilizzando lo scenario all
:
bmctl check cluster --snapshot --snapshot-scenario all \ --cluster=USER_CLUSTER_NAME \ --kubeconfig=USER_KUBECONFIG_PATH
Esegui una prova per ottenere uno snapshot
Quando utilizzi il flag --snapshot-dry-run
, il comando non crea uno snapshot.
Mostra invece quali azioni eseguirà il comando snapshot e restituisce un file di configurazione degli snapshot. Per informazioni sul file di configurazione degli snapshot, consulta Come creare uno snapshot personalizzato.
Per eseguire uno snapshot di prova sul cluster di amministrazione, inserisci il comando seguente:
bmctl check cluster --snapshot --snapshot-dry-run \ --cluster=ADMIN_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Per eseguire uno snapshot di prova su un cluster utente, inserisci il seguente comando:
bmctl check cluster --snapshot --snapshot-dry-run \ --cluster=USER_CLUSTER_NAME \ --kubeconfig=USER_KUBECONFIG_PATH
Recupera i log di un determinato periodo
Puoi utilizzare il flag --since
per recuperare i log relativi a un periodo di tempo che ti interessa in particolare. In questo modo, puoi creare snapshot più piccoli e più mirati del logging avvenuto negli ultimi secondi, minuti o ore.
Ad esempio, il seguente comando bmctl
crea uno snapshot del logging avvenuto nelle ultime tre ore:
bmctl check cluster --snapshot --since=3h \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Specifica una directory in cui viene salvato temporaneamente lo snapshot
Puoi utilizzare il flag --snapshot-temp-output-dir
per specificare una directory in cui lo snapshot viene salvato temporaneamente:
bmctl check cluster --snapshot --snapshot-temp-output-dir=TEMP_OUTPUT_DIR \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Se non specifichi una directory, lo snapshot viene salvato temporaneamente nella directory /tmp
. Ad esempio, è consigliabile utilizzare l'opzione --snapshot-temp-output-dir
quando
lo spazio è limitato nella directory predefinita /tmp
.
Elimina logging della console
Puoi utilizzare il flag --quiet
per impedire la visualizzazione dei messaggi di log nella console durante l'esecuzione di uno snapshot. Invece, i log della console vengono salvati nel file "bmctl_diagnose_snapshot.log" come parte dello snapshot.
Esegui questo comando per impedire la visualizzazione dei messaggi di log nella console:
bmctl check cluster --snapshot --quiet \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
Istantanee personalizzate
Ti consigliamo di creare uno snapshot personalizzato di un cluster per i seguenti motivi:
- a includere più informazioni sul cluster rispetto a quelle fornite nello snapshot predefinito.
- Per escludere alcune informazioni contenute nello snapshot predefinito.
Come creare uno snapshot personalizzato
Per creare uno snapshot personalizzato è necessario utilizzare un file di configurazione degli snapshot. I passaggi seguenti spiegano come creare il file di configurazione, modificarlo e utilizzarlo per creare uno snapshot personalizzato di un cluster:
Crea un file di configurazione di snapshot eseguendo questo comando sul cluster e scrivendo l'output su un file:
bmctl check cluster \ --snapshot --snapshot-dry-run --cluster CLUSTER_NAME \ --kubeconfig KUBECONFIG_PATH
Definisci il tipo di informazioni che vuoi mostrare nell'istantanea personalizzata. A questo scopo, modifica il file di configurazione degli snapshot che hai creato nel passaggio 1. Ad esempio, se vuoi che lo snapshot contenga informazioni aggiuntive, come la durata di esecuzione di un determinato nodo, aggiungi il comando Linux
uptime
alla sezione pertinente del file di configurazione. Il seguente snippet di un file di configurazione mostra come fare in modo che il comando snapshot fornisca auptime
informazioni sul nodo10.200.0.3
. Queste informazioni non vengono visualizzate in uno snapshot standard.... nodeCommands: - nodes: - 10.200.0.3 commands: - uptime ...
Dopo aver modificato il file di configurazione per definire il tipo di snapshot desiderato, crea lo snapshot personalizzato eseguendo questo comando:
bmctl check cluster --snapshot --snapshot-config SNAPSHOT_CONFIG_FILE \ --cluster CLUSTER_NAME--kubeconfig KUBECONFIG_PATH
Il flag
--snapshot-config
indica al comandobmctl
di utilizzare i contenuti del file di configurazione dello snapshot per definire le informazioni da visualizzare nello snapshot.
Il file di configurazione in dettaglio
Il seguente file di configurazione degli snapshot di esempio mostra i comandi e i file standard utilizzati per creare uno snapshot, ma puoi aggiungere altri comandi e file quando sono necessarie ulteriori informazioni diagnostiche:
numOfParallelThreads: 10
excludeWords:
- password
nodeCommands:
- nodes:
- 10.200.0.3
- 10.200.0.4
commands:
- uptime
- df --all --inodes
- ip addr
- ip neigh
- iptables-save --counters
- mount
- ip route list table all
- top -bn1 || true
- docker info || true
- docker ps -a || true
- crictl ps -a || true
- docker ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
sudo docker logs || true
- docker ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
xargs sudo docker logs || true
- crictl ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
sudo crictl logs || true
- crictl ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
xargs sudo crictl logs || true
- ps -edF
- ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
- conntrack --count
- dmesg
- systemctl status -l docker || true
- journalctl --utc -u docker
- journalctl --utc -u docker-monitor.service
- systemctl status -l kubelet
- journalctl --utc -u kubelet
- journalctl --utc -u kubelet-monitor.service
- journalctl --utc --boot --dmesg
- journalctl --utc -u node-problem-detector
- systemctl status -l containerd || true
- journalctl --utc -u containerd
- systemctl status -l docker.haproxy || true
- journalctl --utc -u docker.haproxy
- systemctl status -l docker.keepalived || true
- journalctl --utc -u docker.keepalived
- systemctl status -l container.haproxy || true
- journalctl --utc -u container.haproxy
- systemctl status -l container.keepalived || true
- journalctl --utc -u container.keepalived
nodeFiles:
- nodes:
- 10.200.0.3
- 10.200.0.4
files:
- /proc/sys/fs/file-nr
- /proc/sys/net/netfilter/nf_conntrack_max
- /proc/sys/net/ipv4/conf/all/rp_filter
- /lib/systemd/system/kubelet.service
- /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- /lib/systemd/system/docker.service || true
- /etc/systemd/system/containerd.service || true
- /etc/docker/daemon.json || true
- /etc/containerd/config.toml || true
- /etc/systemd/system/container.keepalived.service || true
- /etc/systemd/system/container.haproxy.service || true
- /etc/systemd/system/docker.keepalived.service || true
- /etc/systemd/system/docker.haproxy.service || true
nodeSSHKey: ~/.ssh/id_rsa # path to your ssh key file
Le seguenti voci nel file di configurazione sono probabilmente diverse da quelle presenti nel file di configurazione di esempio riportato sopra:
- Gli indirizzi IP dei nodi nelle sezioni
nodeCommands
enodeFiles
- Il percorso del parametro
nodeSSHKey
del cluster
Campi nel file di configurazione
Un file di configurazione di snapshot è in formato YAML. Il file di configurazione include i seguenti campi:
numOfParallelThreads
: la routine di snapshot in genere esegue numerosi comandi. Più thread paralleli aiutano a velocizzare l'esecuzione della routine. Ti consigliamo di impostarenumOfParallelThreads
su10
, come mostrato nel precedente file di configurazione di esempio. Se gli snapshot richiedono troppo tempo, aumenta questo valore.excludeWords
: lo snapshot contiene una grande quantità di dati per i nodi del cluster. UtilizzaexcludeWords
per ridurre i rischi per la sicurezza quando condividi lo snapshot. Ad esempio, escludipassword
in modo che non sia possibile identificare le stringhe della password corrispondenti.nodeCommands
: in questa sezione sono specificate le seguenti informazioni:nodes
: un elenco di indirizzi IP per i nodi del cluster da cui vuoi raccogliere informazioni. Per creare uno snapshot quando il cluster di amministrazione non è raggiungibile, specifica almeno un indirizzo IP del nodo.commands
: un elenco di comandi (e argomenti) da eseguire su ciascun nodo. L'output di ogni comando è incluso nello snapshot.
nodeFiles
: in questa sezione sono specificate le seguenti informazioni:nodes
: un elenco di indirizzi IP di nodi cluster da cui vuoi raccogliere file. Per creare uno snapshot quando il cluster di amministrazione non è raggiungibile, specifica almeno un indirizzo IP del nodo.files
: un elenco di file da recuperare da ciascun nodo. Quando i file specificati vengono trovati su un nodo, vengono inclusi nello snapshot.
nodeSSHKey
: percorso del file della chiave SSH. Quando il cluster di amministrazione non è raggiungibile, questo campo è obbligatorio.
Creazione di snapshot in caso di errori specifici
Come creare uno snapshot predefinito durante le installazioni o gli upgrade bloccati
Durante l'installazione o l'upgrade di cluster amministrativi, ibridi o autonomi, bmctl
a volte può bloccarsi in punti in cui sono visibili i seguenti output:
- In attesa che kubeconfig del cluster sia pronto.
- In attesa che il cluster sia pronto.
- In attesa che i pool di nodi siano pronti.
- In attesa del completamento dell'upgrade.
Se riscontri un'installazione o un upgrade bloccati, puoi comunque creare un'istantanea di un cluster, utilizzando il cluster di bootstrap, eseguendo questo comando:
bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
--kubeconfig=WORKSPACE_DIR/.kindkubeconfig
Come creare uno snapshot personalizzato durante installazioni o upgrade bloccati
I passaggi seguenti mostrano come creare uno snapshot personalizzato di un cluster quando un'installazione o un upgrade è bloccato:
Recupera un file di configurazione di snapshot del cluster dagli archivi.
Modifica il file di configurazione degli snapshot in modo che lo snapshot contenga le informazioni desiderate.
Crea lo snapshot personalizzato eseguendo questo comando:
bmctl check cluster --snapshot --snapshot-config=SNAPSHOT_CONFIG_FILE \ --cluster=CLUSTER_NAME --kubeconfig=WORKSPACE_DIR/.kindkubeconfig
Creare uno snapshot personalizzato quando il cluster di amministrazione non è raggiungibile
Quando il cluster di amministrazione non è raggiungibile, puoi creare uno snapshot personalizzato del cluster eseguendo questo comando:
bmctl check cluster --snapshot --cluster CLUSTER_NAME
--node-ssh-key SSH_KEY_FILE
--nodes NODE_1_IP_ADDRESS, NODE_2_IP_ADDRESS, ...
Nel comando, sostituisci le voci seguenti con informazioni specifiche per il tuo ambiente cluster:
CLUSTER_NAME
: il nome del cluster di cui vuoi acquisire uno snapshot.SSH_KEY_FILE
: percorso del file di chiavi SSH del nodo.NODE_x_IP_ADDRESS
: l'indirizzo IP di un nodo cluster su cui vuoi informazioni.
In alternativa, puoi elencare gli indirizzi IP dei nodi su righe separate:
bmctl check cluster
--snapshot --cluster CLUSTER_NAME \
--node-ssh-key SSH_KEY_FILE \
--nodes NODE_1_IP_ADDRESS \
--nodes NODE_2_IP_ADDRESS
...
Informazioni sulle VM negli snapshot
Se utilizzi il runtime VM su GDC per creare e gestire macchine virtuali (VM) su GKE su Bare Metal, puoi raccogliere informazioni diagnostiche pertinenti negli snapshot. Gli snapshot sono una risorsa critica per diagnosticare e risolvere i problemi delle VM.
Dati raccolti per impostazione predefinita
Quando crei uno snapshot predefinito, questo contiene le informazioni sul runtime VM su GDC e sulle risorse correlate.
Il runtime VM su GDC è in bundle con GKE su Bare Metal e la risorsa personalizzata VMRuntime
è disponibile sui tuoi cluster che eseguono carichi di lavoro.
Anche se non hai abilitato il runtime VM su GDC, lo snapshot contiene comunque la VMRuntime
descrizione YAML della risorsa personalizzata.
Se hai abilitato il runtime VM su GDC, gli snapshot contengono informazioni sullo stato e sulla configurazione delle risorse relative alle VM (se gli oggetti sono presenti) nel cluster. Le risorse correlate alle VM includono oggetti Kubernetes come pod, deployment, DaemonSet e ConfigMap.
Oggetti nello spazio dei nomi vm-system
Le informazioni sullo stato e sulla configurazione dei seguenti oggetti si trovano in
kubectlCommands/vm-system
nello snapshot generato:
KubeVirt
VirtualMachineType
VMHighAvailabilityPolicy
Oggetti in altri spazi dei nomi
Quando crei una VM (VirtualMachine
), puoi specificare lo spazio dei nomi. Se non specifichi uno spazio dei nomi, la VM ottiene lo spazio dei nomi default
. Gli altri oggetti in questa sezione, come VirtualMachineInstance
, sono tutti associati allo spazio dei nomi per la VM corrispondente.
Le informazioni sullo stato e sulla configurazione per i seguenti oggetti si trovano in
kubectlCommands/VM_NAMESPACE
nello snapshot generato. Se non hai impostato uno spazio dei nomi specifico per la tua VM, le informazioni si trovano in kubectlCommands/default
:
VirtualMachine
VirtualMachineInstance
VirtualMachineDisk
GuestEnvironmentData
VirtualMachineAccessRequest
VirtualMachinePasswordResetRequest
Oggetti senza spazio dei nomi
I seguenti oggetti non hanno uno spazio dei nomi, quindi le informazioni corrispondenti si trovano direttamente in kubectlCommands
nello snapshot generato:
VMRuntime
DataVolume
CDI
GPUAllocation
Usa un file di configurazione di snapshot per acquisire solo i dettagli della VM
Se stai diagnosticando in particolare i problemi delle VM, puoi utilizzare un file di configurazione degli snapshot per limitare le informazioni raccolte solo ai dettagli relativi alle VM e personalizzare le informazioni raccolte sulle VM.
Il seguente file di configurazione degli snapshot illustra come puoi creare uno snapshot specifico per VM. Puoi includere altri comandi per raccogliere ulteriori informazioni per lo snapshot.
---
kubectlCommands:
- commands:
- kubectl get vm -o wide
- kubectl get vmi -o wide
- kubectl get gvm -o wide
- kubectl get vm -o yaml
- kubectl get vmi -o yaml
- kubectl get gvm -o yaml
- kubectl describe vm
- kubectl describe vmi
- kubectl describe gvm
namespaces:
- .*
- commands:
- kubectl get virtualmachinetype -o wide
- kubectl get virtualmachinedisk -o wide
- kubectl get virtualmachinetype -o yaml
- kubectl get virtualmachinedisk -o yaml
- kubectl describe virtualmachinetype
- kubectl describe virtualmachinedisk
namespaces:
- vm-system
Per saperne di più sull'utilizzo dei file di configurazione degli snapshot, consulta la sezione Snapshot personalizzati in questo documento.