Diagnostica dei problemi relativi ai cluster

Questa pagina descrive come utilizzare lo strumento a riga di comando actl in modalità privata Anthos per diagnosticare problemi con i cluster. Il comando diagnose genera un file di archivio contenente una raccolta di log che acquisiscono lo stato del cluster.

Introduzione

Puoi acquisire lo stato dei tuoi cluster con il comando actl diagnose. Le informazioni diagnostiche possono aiutarti a rilevare i problemi e a eseguire il debug dei deployment in modo più efficace. Il comando acquisisce tutti i file di configurazione di cluster e nodi pertinenti per l'ambito definito, quindi pacchettizza le informazioni in un unico archivio tar. I flag per il comando consentono di scegliere l'ambito di diagnostica del comando.

actl diagnose

Usa il comando actl diagnose per risolvere i problemi relativi ai cluster. Questo comando comprime lo stato, le configurazioni e i log di un cluster in un file tar. La configurazione predefinita del comando acquisisce le seguenti informazioni sul cluster:

  • Versione di Kubernetes
  • Stato delle risorse Kubernetes nei spazi dei nomi dei controller kube-system e APM: cluster, macchina, nodi, servizi, Endpoints, ConfigMaps, ReplicaSets, CronJobs, Pod e i proprietari di tali pod, inclusi Deployment, DaemonSet e StatefulSets.
  • Stato del piano di controllo dell'utente se il cluster di destinazione è un cluster utente (il piano di controllo del cluster utente viene eseguito nel cluster di amministrazione).
  • Dettagli relativi a ogni configurazione dei nodi, inclusi indirizzi IP, regole iptables, punti di montaggio, file system, connessioni di rete e processi in esecuzione.
  • I log dei container del nodo del piano di controllo del cluster di amministrazione, quando il server API Kubernetes non è disponibile.
  • Informazioni nel sistema Istio, inclusi pod, servizi, deployment, endpoint, secret, mappe di configurazione, log attuali e precedenti di tutti i componenti e sidecar Istio, nonché tutti gli artefatti di configurazione di Istio.
  • Informazioni in Config Sync, incluse le configurazioni negli spazi dei nomi relativi a config-management-system.
  • Log del comando actl diagnose.

Crea uno snapshot da uno scenario

Il comando actl diagnose supporta cinque scenari. Per specificare uno scenario, utilizza il flag --scenario per raccogliere gli snapshot per una delle seguenti configurazioni:

  • all: (default) Include tutti gli scenari predefiniti, inclusi: auth, config-management, kubernetes, management-center e service-mesh.
  • auth
  • Config-Management
  • kubernetes
  • centro-gestione
  • mesh di servizi

Puoi utilizzare ciascuno dei cinque scenari con il cluster di amministrazione. Per creare uno snapshot del cluster di amministrazione utilizzando tutto lo scenario:

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG\
    --cluster=CLUSTER_NAME\
    --scenario=all

Sostituisci quanto segue:

  • ADMIN_CLUSTER_KUBECONFIG: il file kubeconfig del cluster di amministrazione.
  • (Facoltativo) CLUSTER_NAME: il nome del cluster di amministrazione. Se non conosci il nome del cluster, ometti questo flag e ti verrà chiesto di selezionare un cluster di cui eseguire lo snapshot.

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

Using ["all"] snapshot configuration...
? Choose a cluster (namespace/name) cluster-admin/admin
Taking snapshots throttled at 10 in-flight requests...
  kubectlCommands/anthos-management-center-operator/kubectl_get_updateitems
  kubectlCommands/kubectl_cluster-info
  kubectlCommands/kubectl_version
  kubectlCommands/anthos-management-center/kubectl_logs_git-server-0_--container_git-server_--since_24h0m0s
  kubectlCommands/anthos-management-center/kubectl_get_deployments
  ...
  nodes/10.200.0.5/files/lib/systemd/system/docker.service
  nodes/10.200.0.4/files/lib/systemd/system/docker.service
  ...
  istioCommands/istioctl_bug-report

Snapshot succeeded.
Snapshots saved in "[TAR_FILE_PATH]/[TAR_FILE_NAME].tar.gz".

Limitare uno snapshot a un periodo di tempo

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

Per limitare il periodo di tempo per la raccolta dei log:

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --scenario=all \
    --log-since=DURATION

Sostituisci DURATION con un valore temporale come 2g o 3h. La durata predefinita è 24 h.

Esegui 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 sul cluster di amministrazione:

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --dry-run

Personalizza una configurazione di snapshot

Se i cinque scenari non soddisfano le tue esigenze, puoi creare uno snapshot personalizzato. Puoi generare una configurazione e copiarla e incollarla in un nuovo file di configurazione oppure creare un file di configurazione da zero. Quindi, puoi creare lo snapshot dal file di configurazione personalizzato.

Opzione 1: generare una configurazione di snapshot

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

actl diagnose \
    --scenario=all  \
    --dry-run \

Ecco un esempio di risultato:

ExcludeWords:
- certificateAuthorityData
- password
InFlightRequests: 10
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system
NodeCommands:
- Commands:
  - uptime
  - df --all --inodes
  - ip addr
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1
  - docker info
  - docker ps -a
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - conntrack --count
  Nodes: []
NodeFiles:
- Files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
  - /lib/systemd/system/kubelet.service
  - /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  - /lib/systemd/system/docker.service
  - /etc/docker/daemon.json
  Nodes: []
NomosBugReport:
  Enabled: true
IstioBugReport:
  Enabled: true

Puoi copiare e incollare l'output di questo comando dall'interfaccia a riga di comando in un nuovo file di configurazione da te creato, ad esempio myconfig.yaml. Puoi modificare i seguenti valori:

  • InFlightRequests: numero di thread paralleli utilizzati per acquisire snapshot.
  • excludeWords: elenco di parole da escludere dallo snapshot (senza distinzione tra maiuscole e minuscole). Le righe che contengono queste parole vengono rimosse dai risultati delle istantanee. "Password" viene sempre esclusa, anche se non è specificata da te.
  • kubectlCommands: elenco di kubectl comandi da eseguire. 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 specificare gli spazi dei nomi. Se non specifica uno spazio dei nomi, viene utilizzato lo spazio dei nomi default.
  • nodeCommands: elenco di comandi da eseguire sui nodi corrispondenti. I risultati vengono salvati. Quando non sono specificati nodi, vengono presi in considerazione tutti i nodi nel cluster di destinazione.
  • nodeFiles: elenco di file da raccogliere dai nodi corrispondenti. I file vengono salvati. Quando non sono specificati nodi, vengono presi in considerazione tutti i nodi nel cluster di destinazione.
  • istioBugReport: un flag per attivare l'istantanea istioctl bug-report.
  • nomosBugReport: un flag per attivare l'istantanea nomos bugreport.

Opzione 2: definisci manualmente un file di configurazione dello snapshot personalizzato

Crea un file YAML con i parametri snapshot che ti interessano, ad esempio:

ExcludeWords:
- certificateAuthorityData
- password
InFlightRequests: 10
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system

Crea uno snapshot utilizzando la configurazione degli snapshot personalizzati

Passa il file di configurazione degli snapshot personalizzati utilizzando il flag --snapshot-config:

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

Sostituisci SNAPSHOT_CONFIG_FILE con il nome del tuo file di configurazione dello snapshot personalizzato, ad esempio myconfig.yaml.

Esamina i contenuti dello snapshot

Per esaminare i contenuti del file tar, estrailo con il seguente comando:

tar -zxf TAR_FILE_PATHTAR_FILENAME.tar.gz  --directory EXTRACTION_DIRECTORY_NAME

Esamina i contenuti del file tar prima di allegarlo nelle tue interazioni con l'assistenza.