Se riscontri un problema con uno dei tuoi cluster, puoi ricevere assistenza dall'assistenza clienti Cloud. L'assistenza clienti potrebbe chiederti di eseguire un'istantanea del cluster, che potrà utilizzare per diagnosticare il problema. Uno snapshot acquisisce i file di configurazione di cluster e nodi e i pacchetti di informazioni in un unico file tar.
Questo documento descrive come creare snapshot predefiniti o istantanee più personalizzate di un cluster. Illustra anche come creare snapshot quando un cluster riscontra errori specifici.
Snapshot predefiniti
Le seguenti sezioni descrivono cosa si intende in uno snapshot standard e come crearne uno. Per informazioni sugli snapshot personalizzati, consulta la sezione Istantanea personalizzata.
Quali informazioni contiene uno snapshot predefinito?
Lo snapshot di un cluster è un file tar di file di configurazione e log relativi al cluster. In particolare, la configurazione predefinita del comando acquisisce le seguenti informazioni sul tuo 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 su ogni configurazione di nodi, inclusi indirizzi IP, regole iptables, punti di montaggio, file system, connessioni di rete ed processi in esecuzione
Log del comando
bmctl check cluster --snapshot
Le informazioni sulle credenziali di un cluster non sono incluse nello snapshot predefinito. Se l'assistenza clienti Cloud richiede queste informazioni, consulta il recupero delle informazioni sul cluster.
Per un elenco completo delle informazioni raccolte quando esegui il comando dello 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 esegue uno snapshot predefinito.
Come creare uno snapshot predefinito
Il comando bmctl check cluster
acquisisce 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
* creare uno snapshot di un cluster e salvare il file dello snapshot sulla macchina locale
su cui esegui il comando.
Metodo 1: crea uno snapshot predefinito e caricalo automaticamente nel bucket Cloud Storage
Per creare e caricare uno snapshot in un bucket Cloud Storage, segui questi passaggi:
Configurare l'API e l'account di servizio:
- Abilitare l'API Cloud Storage nel tuo progetto Google Cloud.
- Concedi un ruolo
storage.admin
all'account di servizio in modo che possa caricare i dati in Cloud Storage. - Scarica la chiave JSON dell'account di servizio.
Per maggiori dettagli, consulta l'articolo Attivare gli account di servizi e servizi Google.
Esegui il comando
bmctl
seguente per creare e caricare automaticamente uno snapshot in un bucket Cloud Storage:bmctl check cluster --snapshot --cluster=CLUSTER_NAME --kubeconfig=KUBECONFIG_PATH --upload-to BUCKET_NAME [--service-account-key-file SERVICE_ACCOUNT_KEY_FILE]
Nel comando sostituisci le seguenti voci con informazioni specifiche per l'ambiente del cluster:
- CLUSTER_NAME: il nome del cluster di cui vuoi acquisire uno snapshot.
- KUBECONFIG_PATH: il percorso del file
kubeconfig
del cluster di amministrazione. (Il percorso del file kubeconfig è in generebmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
. Tuttavia, se hai specificato l'area di lavoro con il flagWORKSPACE_DIR
, il percorso èWORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
. - BUCKET_NAME: il nome di un bucket Cloud Storage di tua proprietà.
- SERVICE_ACCOUNT_KEY_FILE_PATH: se non fornisci il flag
--service-account-key-file
,bmctl
tenta di recuperare il percorso del file delle chiavi dell'account di servizio dalla variabile di ambienteGOOGLE_APPLICATION_CREDENTIALS
.
Concedi all'assistenza clienti Cloud l'accesso in lettura al bucket contenente lo snapshot:
gsutil iam ch \ serviceAccount:service-PROJECT_ID@anthos-support.iam.gserviceaccount.com:roles/storage.objectViewer \ gs://BUCKET_NAME
Metodo n. 2: crea uno snapshot predefinito sulla macchina locale
Puoi acquisire lo stato dei cluster creati con il seguente comando:
bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
--kubeconfig=KUBECONFIG_PATH
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster di destinazione.
KUBECONFIG_PATH: il percorso del file
kubeconfig
del cluster di amministrazione. (Il percorso del file kubeconfig è in generebmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
. Tuttavia, se hai specificato l'area di lavoro con il flagWORKSPACE_DIR
, il percorso saràWORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
.
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 in cui è stato creato il file. Questo file tar include
informazioni di debug pertinenti sui componenti e le macchine di sistema del 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 in modo che includa tutti i pod in un cluster:
bmctl check cluster --snapshot --snapshot-scenario all \
--cluster=CLUSTER_NAME \
--kubeconfig=KUBECONFIG_PATH
Snapshot personalizzati
Puoi creare uno snapshot personalizzato di un cluster per i seguenti motivi:
- Per includere più informazioni sul cluster rispetto a quelle fornite nello snapshot predefinito.
- Per escludere alcune informazioni nell'istantanea predefinita.
- Per acquisire uno snapshot di un cluster quando si verifica l'errore
admin cluster is unreachable
. Consulta la sezione Come creare uno snapshot personalizzato quando il cluster di amministrazione non è raggiungibile per informazioni.
Crea un'istantanea personalizzata
La creazione di uno snapshot personalizzato richiede l'utilizzo di un file di configurazione 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 il comando seguente sul cluster e scrivendo l'output in un file:
bmctl check cluster --snapshot --snapshot-dry-run --cluster CLUSTER_NAME --kubeconfig KUBECONFIG_PATH
Definisci il tipo di informazioni da visualizzare nello snapshot personalizzato. Per farlo, modifica il file di configurazione dello snapshot che hai creato nel passaggio 1. Ad esempio, se vuoi che lo snapshot contenga informazioni aggiuntive, come per quanto tempo un determinato nodo è in esecuzione, aggiungi il comando Linux
uptime
alla sezione pertinente del file di configurazione. Lo snippet seguente di un file di configurazione mostra come fornire al comando snapshotuptime
informazioni sul nodo 10.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 che vuoi, crea lo snapshot personalizzato eseguendo il comando seguente:
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 degli 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 aggiungerne altri quando sono necessarie ulteriori informazioni di diagnostica:
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 probabilmente sono diverse da quelle visualizzate nel file di configurazione di esempio sopra:
- Gli indirizzi IP dei nodi nelle sezioni
nodeCommands
enodeFiles
- Il percorso verso la
nodeSSHKey
del cluster
Campi nel file di configurazione
Un file di configurazione degli snapshot è in formato YAML. Il file di configurazione include i seguenti campi:
numOfParallelThreads
: in genere, la routine snapshot esegue numerosi comandi. Più thread paralleli aiutano la routine a essere eseguita più velocemente. Ti consigliamo di impostarenumOfParallelThreads
su10
, come mostrato nel file di configurazione di esempio precedente. Se gli snapshot richiedono troppo tempo, aumenta questo valore.excludeWords
: lo snapshot contiene una grande quantità di dati per i nodi del cluster. UsaexcludeWords
per ridurre i rischi per la sicurezza quando condividi lo snapshot. Ad esempio, escludipassword
in modo che non sia possibile identificare le stringhe di 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. Lo output di ogni comando è incluso nello snapshot.
nodeFiles
: in questa sezione sono specificate le seguenti informazioni:nodes
: un elenco di indirizzi IP dei nodi del cluster da cui vuoi raccogliere i file. Per creare uno snapshot quando il cluster di amministrazione non è raggiungibile, specifica almeno un indirizzo IP del nodo.files
: un elenco dei file da recuperare da ciascun nodo. Quando i file specificati vengono rilevati 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 particolari.
Come creare uno snapshot predefinito durante installazioni o upgrade bloccati
Quando installi o esegui l'upgrade dei cluster di amministrazione, ibridi o autonomi, a volte bmctl
può bloccarsi nei punti in cui è possibile vedere i seguenti output:
- In attesa che il cluster kubeconfig 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 bloccato, puoi comunque eseguire uno snapshot di un cluster, utilizzando il cluster Bootstrap, eseguendo il comando seguente:
bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
--kubeconfig=WORKSPACE_DIR/.kindkubeconfig
Creare uno snapshot personalizzato durante installazioni o upgrade bloccati
I passaggi seguenti spiegano come creare uno snapshot personalizzato di un cluster quando un'installazione o un upgrade sono bloccati:
Recupera dagli archivi un file di configurazione snapshot del cluster.
Modifica il file di configurazione degli snapshot in modo che contengano le informazioni desiderate.
Crea lo snapshot personalizzato eseguendo il comando seguente:
bmctl check cluster --snapshot --snapshot-config=SNAPSHOT_CONFIG_FILE --cluster=CLUSTER_NAME --kubeconfig=WORKSPACE_DIR/.kindkubeconfig
Crea uno snapshot personalizzato quando il cluster di amministrazione non è raggiungibile
Se il tuo cluster genera un errore che indica che il cluster di amministrazione è irraggiungibile, non puoi creare uno snapshot predefinito di un cluster. Questo perché il comando bmctl
predefinito tenta di recuperare, tra le altre cose, le informazioni dal cluster di amministrazione. Quando il comando predefinito tenta di recuperare le informazioni da un cluster di amministrazione non raggiungibile, il comando snapshot non andrà a buon fine.
Di conseguenza, quando il cluster di amministrazione è irraggiungibile, dovresti creare uno snapshot personalizzato del cluster anziché uno snapshot predefinito. In questo modo, puoi creare uno snapshot personalizzato che non richiede informazioni a un cluster di amministrazione difettoso.
I passaggi seguenti mostrano come creare uno snapshot personalizzato di un cluster quando il cluster di amministrazione è irraggiungibile:
Recupera dagli archivi un file di configurazione snapshot del cluster.
Nella sezione dei nodi, elenca gli indirizzi IP dei nodi per i quali vuoi informazioni, ma assicurati di escludere l'indirizzo IP del nodo del cluster di amministrazione.
Crea lo snapshot personalizzato eseguendo il comando seguente:
bmctl check cluster --snapshot --snapshot-config=SNAPSHOT_CONFIG_FILE --cluster=CLUSTER_NAME --kubeconfig=KUBECONFIG_PATH
Raccogli i log per i problemi in entrata o con Anthos Service Mesh
Gli snapshot bmctl
non contengono informazioni per risolvere i problemi in entrata o con Anthos Service Mesh. Per istruzioni su come raccogliere i log di diagnostica pertinenti, consulta Raccolta dei log di Anthos Service Mesh nella documentazione di Anthos Service Mesh.