In diesem Dokument wird gezeigt, wie Sie mit dem Befehl gkectl diagnose
Diagnose-Snapshots zur Fehlerbehebung in Ihren Clustern erstellen, die mit Google Distributed Cloud (nur Software) für VMware erstellt wurden, wenn der erweiterte Cluster aktiviert ist.
Der erweiterte Cluster ist aktiviert, wenn enableAdvancedClusters
in der Konfigurationsdatei des Administratorclusters und in der Konfigurationsdatei des Nutzerclusters auf true
festgelegt ist. Wenn der erweiterte Cluster nicht aktiviert ist, lesen Sie den Hilfeartikel Diagnose-Snapshots erstellen, wenn der erweiterte Cluster nicht aktiviert ist.
gkectl diagnose snapshot
Mit diesem Befehl werden der Status, die Konfigurationen und die Protokolle eines Clusters in eine TAR-Datei komprimiert. Die Standardkonfiguration des Befehls „gkectl diagnose snapshot“ erfasst die folgenden Informationen zu Ihrem Cluster:
Kubernetes-Version.
Status von Kubernetes-Ressourcen in den Namespaces "kube-system" und "gke-system": Cluster, Maschine, Knoten, Services, Endpunkte, ConfigMaps, ReplicaSets, CronJobs, Pods und die Inhaber dieser Pods, einschließlich Deployments, DaemonSets und StatefulSets.
Status der Steuerungsebene.
Details zu jeder Knotenkonfiguration, einschließlich IP-Adressen, iptables-Regeln, Bereitstellungspunkten, Dateisystem, Netzwerkverbindungen und ausgeführten Prozessen.
Container-Logs aus dem Knoten der Steuerungsebene des Administratorclusters, wenn Kubernetes API-Server nicht verfügbar ist.
Logs aus dem Befehl
gkectl diagnose snapshot
.Logs von Preflight-Jobs.
Logs von Containern in Namespaces basierend auf den Szenarien.
Anmeldedaten, einschließlich für vSphere und F5, werden entfernt, bevor die TAR-Datei erstellt wird.
Status des Administratorclusters erfassen
Führen Sie den folgenden Befehl aus, um den Status eines Administrator-Clusters zu erfassen:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
Ersetzen Sie ADMIN_CLUSTER_KUBECONFIG
durch den Pfad zur kubeconfig-Datei des Administratorclusters.
Die Ausgabe enthält eine Liste von Dateien und den Namen einer TAR-Datei, wie in der folgenden Beispielausgabe gezeigt:
Using "system" snapshot configuration...
Creating ssh signer for "[ADMIN_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
gkectlLogs/gkectl-xxx.log
...
kubectlCommands/[NAMESPACE]/kubectl_get_pods
kubectlCommands/[NAMESPACE]/kubectl_get_deployments
kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.
Führen Sie den folgenden Befehl aus, um die Tar-Datei in ein Verzeichnis zu extrahieren:
tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME
Ersetzen Sie Folgendes:
TAR_FILE_NAME
: der Name der Tar-Datei.EXTRACTION_DIRECTORY_NAME
: das Verzeichnis, in das Sie das Tar-Dateiarchiv extrahieren möchten.
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
Ersetzen Sie NODE_NAME
durch den Namen des Knotens, für den Sie die Dateien aufrufen möchten.
Wenn Sie sich die Details eines bestimmten Vorgangs ansehen möchten, öffnen Sie eine der Dateien.
SSH-Schlüssel für den Administratorcluster angeben
Wenn Sie einen Snapshot des Administratorclusters erhalten, findet gkectl
automatisch den privaten SSH-Schlüssel für den Administratorcluster. Sie können den Schlüssel auch explizit mit dem Parameter --admin-ssh-key-path
angeben.
Folgen Sie der Anleitung unter SSH-Verbindung zu einem Clusterknoten herstellen, um die SSH-Schlüssel herunterzuladen.
Setzen Sie im gkectl diagnose snapshot
-Befehl --admin-ssh-key-path
auf den decodierten Schlüsselpfad:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --admin-ssh-key-path=PATH_TO_DECODED_KEY
Status des Nutzerclusters erfassen
Führen Sie den folgenden Befehl aus, um den Status eines Nutzerclusters zu erfassen:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
Die folgende Beispielausgabe enthält eine Liste von Dateien und den Namen einer Tar-Datei:
Using "system" snapshot configuration...
Creating ssh signer for "[USER_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
gkectlLogs/gkectl-xxx.log
...
kubectlCommands/[NAMESPACE]/kubectl_get_pods
kubectlCommands/[NAMESPACE]/kubectl_get_deployments
kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/commands/journalctl_-u_kubelet
nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/files/var/log/startup.logn
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.
Snapshot-Szenarien
Mit Snapshot-Szenarien können Sie steuern, welche Informationen in einem Snapshot enthalten sind. Verwenden Sie das Flag --scenario
, um ein Szenario anzugeben. In der folgenden Liste sind die möglichen Werte aufgeführt:
system
(Standard): Snapshot mit Logs in unterstützten System-Namespaces erstellenall
: Snapshot mit Logs in allen Namespaces erstellen, einschließlich benutzerdefinierter Namespaces.
Wenn Sie einen Snapshot des Administratorclusters erstellen möchten, müssen Sie kein Szenario angeben:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
So erstellen Sie einen Snapshot eines Nutzerclusters mit dem system
-Szenario:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=system
So erstellen Sie einen Snapshot eines Nutzerclusters mit dem all
-Szenario:
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=all
Mit --log-since
einen Snapshot begrenzen
Mit dem Flag --log-since
können Sie die Logerfassung auf einen aktuellen Zeitraum beschränken. Sie können beispielsweise nur Logs der letzten zwei Tage oder der letzten drei Stunden erfassen. Standardmäßig erfasst diagnose snapshot
alle Logs.
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=CLUSTER_NAME \ --scenario=system \ --log-since=DURATION
Ersetzen Sie <var>DURATION</var>
durch einen Zeitwert wie 120m
oder 48h
.
Dabei gilt Folgendes:
- Das Flag
--log-since
wird nur für die Logskubectl
undjournalctl
unterstützt. - Befehls-Flags wie
--log-since
sind in der benutzerdefinierten Snapshot-Konfiguration nicht zulässig.
Probelauf für einen Snapshot machen
Sie können das Flag --dry-run
verwenden, um die auszuführenden Aktionen und die Snapshot-Konfiguration anzeigen zu lassen.
Geben Sie den folgenden Befehl ein, um einen Probelauf für Ihren Administratorcluster durchzuführen:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=ADMIN_CLUSTER_NAME \ --dry-run
Geben Sie den folgenden Befehl ein, um einen Probelauf für einen Nutzercluster durchzuführen:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --dry-run
Snapshot-Konfiguration verwenden
Wenn diese beiden Szenarien (--scenario system
oder all
) nicht Ihren Anforderungen entsprechen, können Sie einen benutzerdefinierten Snapshot erstellen, indem Sie mit dem Flag --snapshot-config
eine Snapshot-Konfigurationsdatei übergeben:
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --snapshot-config=SNAPSHOT_CONFIG_FILE
Snapshot-Konfiguration generieren
Sie können für das jeweilige Szenario eine Snapshot-Konfiguration generieren, indem Sie die Flags --scenario
und --dry-run
übergeben. Um beispielsweise die Snapshot-Konfiguration für das Standardszenario system
eines Nutzerclusters zu sehen, 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 wie im folgenden Beispiel.
The snapshot configuration is:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
- kubectl version
- kubectl cluster-info
- kubectl top node
- kubectl top pod -A --containers
namespaces: []
- commands:
- kubectl get -o wide --ignore-not-found
- kubectl get -o yaml --ignore-not-found
- kubectl describe
namespaces:
- kube-system
...
expandResources: true
- commands:
- kubectl logs
namespaces:
- kube-system
...
kindNodeCommands: []
nodeCommands:
- nodes: []
commands:
- uptime
- df --all --inodes
- ip addr
- ip neigh
- iptables-save --counters
- mount
- ip route list table all
- top -bn1 || true
- docker info || true
...
- nodes: []
commands:
- dmesg
- systemctl status -l kubelet
- journalctl --utc -u kubelet
- journalctl --utc -u kubelet-monitor.service
...
nodeFiles:
- nodes: []
files:
- /proc/sys/fs/file-nr
- /proc/sys/net/netfilter/nf_conntrack_max
...
- nodes: []
files:
- /var/log/apiserver/audit-proxy-buffer/* || true
Die folgenden Informationen werden in der Ausgabe angezeigt:
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 die Groß- und Kleinschreibung nicht berücksichtigt. Zeilen, die diese Wörter enthalten, werden aus den Snapshot-Ergebnissen entfernt. "Passwort" ist immer ausgeschlossen, unabhängig davon, ob Sie das angeben oder nicht.kubectlCommands
: Liste der auszuführenden kubectl-Befehle. Die Ergebnisse werden gespeichert. Die Befehle werden für die entsprechenden Namespaces ausgeführt. Beikubectl logs
-Befehlen 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 Namespacedefault
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.