Sie betrachten die Dokumentation für eine frühere Version von GKE On-Prem. Sehen Sie sich die aktuelle Dokumentation an.

Fehlerdiagnose von Clusterproblemen

Auf dieser Seite wird erläutert, wie Sie mit dem gkectl -Befehlszeilentool Probleme in Ihren GKE On-Prem-Clustern diagnostizieren.

Überblick

Das Tool gkectl verfügt über zwei Befehle zur Fehlerbehebung bei Clustern: gkectl diagnose cluster und gkectl diagnose snapshot. Die Befehle sind sowohl für Administrator- als auch für User-Cluster verfügbar.

gkectl diagnose cluster

Führt Systemdiagnosen für Ihren GKE-On-Prem-Cluster durch und meldet Fehler. Führt Systemdiagnosen für die folgenden Komponenten aus:

  • Cluster-Objekte
  • Maschinenobjekte und die entsprechenden Clusterknoten
  • Pods in den Namespaces kube-system und gke-system
  • Nutzer-Steuerungsebene, wenn der Zielcluster ein Nutzer-Cluster ist
  • Nichtflüchtige vspare-Volumes im Cluster

gkectl diagnose snapshot

Komprimiert den Status, die Konfigurationen und Logs eines Clusters in einer Tarball-Datei. Die Standardkonfiguration des Befehls erfasst insbesondere die folgenden Informationen zu Ihrem Cluster:

  • Kubernetes-Version
  • Status von Kubernetes-Ressourcen in den Namespaces "kube-system" und "gke-system": Cluster, Maschine, Knoten, Dienste, Endpunkte, ConfigMaps, ReplicaSets, CronJobs, Pods und die Inhaber dieser Pods, einschließlich Deployments, DaemonSets und StatefulSets
  • Status der Nutzer-Steuerungsebene, wenn der Zielcluster ein Nutzer-Cluster ist (die Steuerungsebene des Nutzer-Clusters wird im Administrator-Cluster ausgeführt)
  • Details zu jeder Knotenkonfiguration, einschließlich IP-Adressen, iptables-Regeln, Bereitstellungspunkten, Dateisystem, Netzwerkverbindungen und ausgeführten Prozessen
  • Logs vom Befehl gkectl diagnose snapshot.
  • Optional die GKE On-Prem-Konfigurationsdatei, die zum Installieren und Aktualisieren von Clustern verwendet wird.

Anmeldedaten, einschließlich vSphere und F5-Anmeldedaten, werden entfernt, bevor das Tarball erstellt wird.

Cluster diagnostizieren

Sie können gke diagnose cluster ausführen, um nach häufigen Problemen mit Ihrem Cluster zu suchen.

Einen Administrator-Cluster diagnostizieren

Sie können einen Administrator-Cluster diagnostizieren, indem Sie seinen Namen oder nur kubeconfig weitergeben.

Verwenden des Administrator-Clusters kubeconfig

Wenn Sie das kubeconfig des Administrator-Clusters übergeben, wählt gkectl automatisch den Administrator-Cluster aus:

gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG]

Verwenden des Namens des Administrator-Clusters

Führen Sie den folgenden Befehl aus, um den Namen des Administrator-Clusters abzurufen:

kubectl get cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG]

Geben Sie dann den Namen des Administrator-Clusters an gkectl diagnose cluster:

gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--cluster-name=[ADMIN_CLUSTER_NAME]

Wenn Ihr Administrator-Cluster ordnungsgemäß funktioniert, gibt gkectl diagnose cluster die folgende Ausgabe zurück:

Diagnosing admin cluster "[ADMIN_CLUSTER_NAME]"...
Checking cluster object...PASS
Checking machine objects...PASS
Checking kube-system pods...PASS
Checking storage...PASS
Cluster is healthy.

Einen Nutzer-Cluster diagnostizieren

Um einen Cluster zu diagnostizieren, rufen Sie zuerst den Namen des User-Clusters ab:

kubectl get cluster --kubeconfig=[USER_CLUSTER_KUBECONFIG]

Geben Sie dann das kubeconfig des Admin-Clusters und den Namen des Nutzer-Clusters ein:

gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
  --cluster-name=[USER_CLUSTER_NAME]

Wenn Ihr Nutzer-Cluster ordnungsgemäß funktioniert, gibt gkectl diagnose cluster die folgende Ausgabe zurück:

Diagnosing user cluster "[USER_CLUSTER_NAME]"...
Checking cluster object...PASS
Checking control plane pods...PASS
Checking machine objects...PASS
Checking other kube-system pods...PASS
Checking storage...PASS
Cluster is healthy.

Clusterstatus erfassen

Wenn gkectl diagnose cluster Fehler findet, sollten Sie den Status des Clusters erfassen und die Informationen an Google senden. Verwenden Sie dazu den Befehl gkectl diagnose snapshot.

gkectl diagnose snapshot hat ein optionales Flag, --seed-config. Zusätzlich zum Erfassen von Informationen zum Cluster erfasst dieses Flag die lokale GKE-Konfigurationsdatei, die zum Erstellen oder Aktualisieren des Clusters verwendet wurde.

Status des Administrator-Clusters erfassen

Führen Sie den folgenden Befehl aus, um den Zustand eines Administratorclusters zu erfassen, wobei --seed-config optional ist:

gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] [--seed-config]

Die Ausgabe enthält eine Liste von Dateien und den Namen einer Tarball-Datei:

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 [TARBALL_FILE_NAME].tar.gz.

Führen Sie den folgenden Befehl aus, um die Tarball-Datei in ein Verzeichnis zu extrahieren:

tar -zxf [TARBALL_FILE_NAME] --directory [EXTRACTION_DIRECTORY_NAME]

Führen Sie die folgenden Befehle aus, um sich die Liste der durch den Snapshot erstellten Dateien anzusehen:

cd [EXTRACTION_DIRECTORY_NAME]/[EXTRACTED_SNAPSHOT_DIRECTORY]
ls kubectlCommands
ls nodes/[NODE_NAME]/commands
ls nodes/[NODE_NAME]/files

Wenn Sie sich die Details eines bestimmten Vorgangs ansehen möchten, öffnen Sie eine der Dateien.

SSH-Schlüssel für den Administrator-Cluster angeben

Wenn Sie einen Snapshot des Admin-Clusters erhalten, findet gkectl automatisch den privaten SSH-Schlüssel für den Admin-Cluster. Sie können den Schlüssel auch explizit mit dem Parameter --admin-ssh-key-path angeben.

Folgen Sie der Anleitung unter SSH zum Herstellen einer Verbindung zu einem Clusterknoten verwenden, um die SSH-Schlüssel herunterzuladen.

Setzen Sie dann in Ihrem gkectl diagnose snapshot -Befehl --admin-ssh-key-path auf den Pfad Ihrer dekodierten Schlüsseldatei:

gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--admin-ssh-key-path=[PATH_TO_DECODED_KEY]

Status des Nutzer-Clusters erfassen

Führen Sie den folgenden Befehl aus, um den Status eines Nutzer-Clusters zu erfassen:

gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--cluster-name=[USER_CLUSTER_NAME]

Die Ausgabe enthält eine Liste von Dateien und den Namen einer Tarball-Datei:

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.

Snapshot-Szenarien

Der Befehl gkectl diagnose snapshot unterstützt vier Szenarien. Verwenden Sie das Flag --scenario, um ein Szenario anzugeben. In der folgenden Liste sind die möglichen Werte aufgeführt:

  • system: (Standard) Machen Sie einen Snapshot für die System-Namespaces: kube-system und gke-system.

  • system-with-logs: Erstellen Sie einen system - Snapshot mit Logs.

  • all: Machen Sie einen Snapshot für alle Namespaces.

  • all-with-logs: Machen Sie einen all Snapshot mit Logs.

Sie können jedes der vier Szenarien mit einem Administrator- oder Nutzercluster verwenden. Es gibt also acht mögliche Varianten. Die folgenden Beispiele zeigen einige Möglichkeiten.

So erstellen Sie einen Snapshot des Administrator-Clusters mit dem system - Szenario:

gkectl diagnose snapshot \
--kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--scenario=system

So erstellen Sie einen Snapshot eines Nutzer-Clusters mit dem Szenario system-with-logs:

gkectl diagnose snapshot \
--kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--user-cluster=[USER_CLUSTER_NAME] \
--scenario=system-with-logs

So erstellen Sie einen Snapshot eines Nutzer-Clusters mit dem Szenario all:

gkectl diagnose snapshot \
--kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--cluster-name=[USER_CLUSTER_NAME] \
--scenario=all

So erstellen Sie einen Snapshot des Administrator-Clusters mit dem all-with-logs - Szenario:

gkectl diagnose snapshot \
--kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--scenario=all-with-logs

Durchführen eines Probelaufs für einen Snapshot

Sie können das Flag --dry-run verwenden, um die auszuführenden Aktionen und die Snapshot-Konfiguration anzuzeigen.

Geben Sie den folgenden Befehl ein, um einen Probelauf in Ihrem Administrator-Cluster durchzuführen:

gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--cluster-name=[ADMIN_CLUSTER_NAME] \
--dry-run

Geben Sie den folgenden Befehl ein, um auf einem Nutzer-Cluster einen Probelauf durchzuführen:

gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--cluster-name=[USER_CLUSTER_NAME] \
--dry-run

Verwenden einer Snapshot-Konfiguration

Wenn die vier Szenarien nicht Ihren Anforderungen entsprechen, können Sie einen benutzerdefinierten Snapshot erstellen, indem Sie eine Snapshot-Konfigurationsdatei mit dem Flag --snapshot-config einreichen:

gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--cluster-name=[USER_CLUSTER_NAME] \
--snapshot-config=[SNAPSHOT_CONFIG_FILE]

Erstellen einer Snapshot-Konfiguration

Sie können eine Snapshot-Konfiguration für ein bestimmtes Szenario generieren, indem Sie die Flags --scenario und --dry-run übergeben. Um beispielsweise die Snapshot-Konfiguration für das Standardszenario system eines User-Clusters anzuzeigen, geben Sie folgenden Befehl ein:

gkectl diagnose snapshot \
--kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \
--cluster-name=[USER_CLUSTER_NAME] \
--scenario=system
--dry-run

Die Ausgabe sieht etwa so aus:

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
  • numOfParallelThreads: Anzahl der parallelen Threads, die zum Erstellen von Snapshots verwendet werden.
  • excludeWords: Liste der Wörter, die aus dem Snapshot ausgeschlossen werden sollen. Dabei wird nicht zwischen Groß- und Kleinschreibung unterschieden. Zeilen, die diese Wörter enthalten, werden aus den Snapshot-Ergebnissen entfernt. "Passwort" ist immer ausgeschlossen, unabhängig davon, ob Sie es angeben oder nicht.
  • kubectlCommands: Liste der auszuführenden kubectl-Befehle. Die Ergebnisse werden gespeichert. Die Befehle werden für die entsprechenden Namespaces ausgeführt. Für kubectl logs Befehle werden alle Pods und Container in den entsprechenden Namespaces automatisch hinzugefügt. Reguläre Ausdrücke werden für die Angabe von Namespaces unterstützt. Wenn Sie keinen Namespace angeben, wird der Namespace default angenommen.
  • nodeCommands: Liste der Befehle, die auf den entsprechenden Knoten ausgeführt werden sollen. Die Ergebnisse werden gespeichert. Wenn keine Knoten angegeben werden, werden alle Knoten im Zielcluster berücksichtigt.
  • nodeFiles: Liste der Dateien, die von den entsprechenden Knoten erfasst werden sollen. Die Dateien werden gespeichert. Wenn keine Knoten angegeben sind, werden alle Knoten im Zielcluster berücksichtigt.
  • prometheusRequests: Liste der Prometheus-Anfragen. Die Ergebnisse werden gespeichert.