Fehlerbehebung bei der Knotenregistrierung


In diesem Dokument wird beschrieben, wie Sie Probleme beheben, die beim Hinzufügen von Knoten zu Ihrem GKE-Standardcluster (Google Kubernetes Engine) auftreten können. Einige der Szenarien, in denen diese Probleme auftreten, sind die Erstellung von Clustern und Knotenpools sowie Hochskalierungsereignisse.

Informationen zum Beheben von Problemen mit GKE Autopilot-Clustern finden Sie unter Fehlerbehebung bei Autopilot-Clustern.

Knotenregistrierung

Knoten sind Compute Engine-VM-Instanzen, die GKE für Sie erstellt. Wenn ein neuer Knoten einem GKE-Cluster hinzugefügt wird, muss er bei der Steuerungsebene des Clusters registriert werden. Dieser Vorgang, der als Knotenregistrierung oder Knoten-Bootstrapping bezeichnet wird, erfolgt beim Erstellen eines Knotens.

Zeitpunkt der Knotenregistrierung

Die Knotenregistrierung erfolgt bei jeder Knotenerstellung, einschließlich der folgenden Szenarien:

Der Knotenregistrierungsprozess umfasst folgende Schritte:

  1. Die für den Knotenpool festgelegte Knotenanzahl wird in die verwalteten Instanzgruppen (MIGs) repliziert.
  2. Die MIGs erstellen die erforderliche Anzahl von VM-Instanzen.
  3. Für jede erstellte VM-Instanz:

    1. Die VM-Instanz wird gestartet.
    2. Die VM-Instanz konfiguriert und installiert die erforderlichen Pakete, die als Kubernetes-Knoten ausgeführt werden sollen.
    3. Das auf der VM-Instanz ausgeführte kubelet kommuniziert mit dem API-Server der Steuerungsebene, um sich als Knoten zu registrieren.

Fehlermeldung zur Knotenregistrierung

Wenn GKE versucht, Ihrem Cluster Knoten hinzuzufügen, wird in der Google Cloud Console der folgende Fehler angezeigt, wenn die Knotenregistrierung fehlgeschlagen ist:

  All cluster resources were brought up, but: only 0 nodes out of * have
  registered; this is likely due to the Nodes failing to start correctly; try
  re-creating the cluster or contact support if that doesn't work.

Diese Fehlermeldung weist darauf hin, dass die Knoten nicht erfolgreich beim Cluster registriert wurden. In den folgenden Abschnitten werden einige der möglichen Ursachen dieses Fehlers beschrieben.

Voraussetzungen für die erfolgreiche Knotenregistrierung

Die erfolgreiche Knotenregistrierung in einem GKE-Cluster hängt von Faktoren wie den folgenden ab:

  • Network Connectivity.
  • Ressourcenverfügbarkeit.
  • Dienstkontoberechtigungen.

Voraussetzungen für die Instanzerstellung

Wenn GKE einen Knoten für Ihren Cluster erstellt, wird im ersten Schritt eine neue Compute Engine-VM-Instanz erstellt.

Das Erstellen einer Instanz kann aus einem der folgenden Gründe fehlschlagen:

Fehlgeschlagene Instanzerstellung bedeutet, dass in dem Zeitraum, in dem GKE versucht hat, die Instanz zu erstellen, um sie als GKE-Knoten zu registrieren, keine Logs für die Instanzerstellung vorhanden sind, da die Instanzen nie erstellt wurden. Folgen Sie der Anleitung unter Instanz mit fehlgeschlagener Knotenregistrierung suchen, um nach fehlenden Logs zu suchen.

Dienstkontoberechtigungen

GKE-Knoten haben ein IAM-Dienstkonto, das mit ihnen verbunden ist. Standardmäßig ist dieses Dienstkonto das Compute Engine-Standarddienstkonto. Wir empfehlen, zur Härtung Ihres Clusters ein benutzerdefiniertes IAM-Dienstkonto mit den mindestens erforderlichen Berechtigungen zu verwenden.

Dieses Dienstkonto muss die erforderlichen Berechtigungen für die VM-Instanzen haben, die als GKE-Knoten initialisiert werden sollen. Wenn Sie das Dienstkonto löschen oder deaktivieren oder ihm nicht die richtigen Berechtigungen erteilen, schlägt die Knotenregistrierung möglicherweise fehl.

Voraussetzungen für die Netzwerkverbindung zu Google APIs und Google-Diensten

Die VM-Instanz lädt Pakete herunter, um sie als GKE-Knoten auszuführen. Eine Zeitüberschreitung bei der Verbindung kann bedeuten, dass Ihr Cluster die Netzwerkanforderungen nicht erfüllt, die für die Verbindung mit Google APIs und Diensten wie storage.googleapis.com erforderlich sind. Wenn eine Instanz keine Verbindung zu diesen Diensten herstellen kann, kann sie die Kubernetes-Distribution nicht herunterladen und den Knotenregistrierungsprozess nicht abschließen.

Abhängig von Ihrer Netzwerkverbindung kann das Zulassen dieser Verbindung bedeuten, dass Sie privaten Google-Zugriff konfigurieren oder Firewall-Regeln und Routen im VPC-Netzwerk (Virtual Private Cloud) Ihres Clusters haben, die die Verbindung zulassen.

Voraussetzungen für die Netzwerkverbindung mit Steuerungsebene

Die Verbindung zwischen der Steuerungsebene und den Knoten ist für die Knotenregistrierung und die reguläre Funktion von entscheidender Bedeutung. Diese Kommunikation ist standardmäßig zugelassen. Achten Sie darauf, dass bei der Einrichtung von VPC-Firewallregeln weiterhin die Kommunikation zwischen den Knoten und der Steuerungsebene zulässig ist.

Weitere Informationen finden Sie unter Verbindung der Steuerungsebene zulassen.

Knotenregistrierungsprüfung zur Fehlerbehebung bei der Knotenregistrierung verwenden

Bei Knotenpools, die mit der GKE-Version 1.24.0-gke.100 oder höher erstellt wurden, wird ein Dienstprogramm namens Node Registration Checker auf neu erstellten Instanzen ausgeführt. Es prüft, ob die Instanz die Schritte der Knotenregistrierung erfolgreich abgeschlossen hat.

Wenn die Knotenregistrierung fehlschlägt, generiert das Dienstprogramm einen Zusammenfassungsbericht, in dem Sie sehen können, welche Voraussetzungen nicht erfüllt wurden, je nachdem, wo die Instanz fehlgeschlagen ist.

Verwenden Sie die Anleitung im folgenden Abschnitt, um eine Instanz zu finden, die die Knotenregistrierung fehlgeschlagen hat, und verwenden Sie die Zusammenfassung der Knotenregistrierungsprüfung, um zu erfahren, warum sie fehlgeschlagen ist.

Wenn Sie die Knotenregistrierungsprüfung in Ihrem Knotenpool nicht verwenden können, lesen Sie die Informationen unter Fehlerbehebung bei der Knotenregistrierung ohne den Node Registration Checker.

Instanz suchen, deren Knotenregistrierung fehlgeschlagen ist

Wenn sich eine oder mehrere Instanzen nicht als Knoten bei der Steuerungsebene Ihres GKE-Clusters registrieren lassen, können Sie die Anzahl der fehlgeschlagenen Instanzen der Fehlermeldung entnehmen, die auf der Seite Clusterdetails der Google Cloud Console angezeigt wird. Wenn die Registrierung mehrerer Instanzen gleichzeitig fehlschlägt, kann dies auf denselben Grund zurückzuführen sein. Aus diesem Grund können Sie eine der fehlgeschlagenen Instanzen verwenden, um zu untersuchen, warum alle Instanzen fehlgeschlagen sind.

Da die Instanzen jedoch nicht als GKE-Knoten registriert wurden, müssen Sie die folgenden Anweisungen verwenden, um die Namen der zugrunde liegenden Compute Engine-VMs zu ermitteln, die nicht registriert werden konnten.

  1. Rufen Sie in der Google Cloud Console die Seite Logs-Explorer auf.

    Zum Log-Explorer

  2. Verwenden Sie den folgenden Logfilter, um die Logs der VM-Instanzerstellung zu finden:

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    protoPayload.requestMetadata.callerSuppliedUserAgent="GCE Managed Instance Group for GKE"
    protoPayload.response.status="RUNNING"
    

    Ersetzen Sie PROJECT_ID durch die Projekt-ID Ihres Clusters.

  3. Verwenden Sie das Histogramm unter dem Logfilter, um den Zeitraum einzugrenzen, in dem die Knotenerstellung stattgefunden haben sollte.

  4. Klicken Sie auf eines der Logs, die unter Abfrageergebnisse angezeigt werden, und dann auf Verschachtelte Felder maximieren, um weitere Details aufzurufen.

  5. Suchen Sie das Feld protoPayload.resourceName. Der letzte Teil des Pfads ist der Instanzname. Instanznamen haben ein Format, das mit dem Namen des Clusters und dem Namen des Knotenpools beginnt, zum Beispiel:

    gke-cluster-1-default-pool-b0ac62d3-9g1v ist eine Instanz für den Knotenpool default-pool in gke-cluster-1.

  6. Öffnen Sie in der Google Cloud Console die Seite Compute Engine-VM-Instanzen:

    Zu Seite „VM-Instanzen“

    Suchen Sie mithilfe des Filters nach dem Namen der VM-Instanz. Klicken Sie für weitere Informationen darauf.

Fehlerbehebung bei einer Instanz mit dem Node Registration Checker

Nachdem Sie den Namen der Instanz, die nicht registriert werden konnte, ermittelt haben, können Sie mit dem Node Registration Checker prüfen, warum sie fehlgeschlagen ist.

Klicken Sie auf dem Tab Details der VM-Instanz im Abschnitt Logs auf Serieller Port 1 (Konsole).

Für Knotenpools, die mit der GKE Version 1.24.0-gke.100 oder höher erstellt wurden, enthält die Ausgabe für neu erstellte Instanzen die folgende Meldung, die anzeigt, dass der Node Registration Checker gestartet wurde:

** Starting Node Registration Checker **
** Loading variables from kube-env **
** Sleeping for 7m to allow registration to complete  **

Wenn die Knotenregistrierung erfolgreich ist, enthält die Ausgabe die folgenden Nachrichten:

** Node ready and registered. **
** Completed running Node Registration Checker **

Wenn diese Meldungen nicht angezeigt werden, ist die Knotenregistrierung fehlgeschlagen und die Knotenregistrierungsprüfung hat einen Bericht generiert, der erläutert, warum die Registrierung fehlgeschlagen ist. Suchen Sie nach der folgenden zusätzlichen Nachricht, um die Zusammenfassung aufzurufen:

** Here is a summary of the checks performed: **

Suchen Sie unter dieser Nachricht nach einer Tabelle wie der folgenden:

------------------------------
Service    DNS      Reachable
------------------------------
LOGGING    true     true
GCR        true     true
GCS        true     true
Master     N/A      false
------------------------------

Wenn LOGGING, GCR oder GCS als nicht erreichbar aufgeführt sind, prüfen Sie die Dienstkontoberechtigungen für die Knotenregistrierung und die Netzwerkverbindung zu Google APIs und Diensten für die Knotenregistrierung.

Wenn Master als nicht erreichbar aufgeführt ist, prüfen Sie die Voraussetzungen für die Netzwerkverbindung mit Steuerungsebene für die Knotenregistrierung.

Nachdem Sie alle Probleme behoben haben, die eine erfolgreiche Knotenregistrierung verhindern, finden Sie weitere Informationen unter Knotenregistrierung nach Behebung der Ursache abschließen.

Wenn die vorherigen Schritte nicht aussagen, warum die Knotenregistrierung fehlgeschlagen ist, lesen Sie die Informationen unter Informationen für weitere Nachforschungen.

Fehlerbehebung bei der Knotenregistrierung ohne Prüfung der Knotenregistrierung

Wenn die Knotenregistrierung in einem Knotenpool fehlgeschlagen ist, der mit einer GKE-Version vor 1.24.0-gke.100 erstellt wurde, können Sie Fehler nur manuell beheben. Wenn Ihr Knotenpool mit einer GKE Version 1.24.0-gke.100 oder höher erstellt wurde, folgen Sie der Anleitung unter Knotenregistrierungsprüfung zur Fehlerbehebung für Knotenregistrierung verwenden.

Nachdem Sie alle Probleme behoben haben, die eine erfolgreiche Knotenregistrierung verhindern, folgen Sie der folgenden Anleitung, um die Knotenregistrierung nach dem Beheben der Ursache abzuschließen.

Wenn keiner der Untersuchungsschritte auf dieser Seite angibt, warum die Knotenregistrierung fehlgeschlagen ist, lesen Sie den Abschnitt Informationen für weitere Nachforschungen.

Dienstkontoberechtigungen für Knotenregistrierung prüfen

Das von Ihren Knoten verwendete Dienstkonto muss die erforderlichen Berechtigungen für die Knotenregistrierung haben. Gehen Sie folgendermaßen vor, um zu prüfen, ob Sie diese Voraussetzungen erfüllen:

  1. Instanz suchen, deren Knotenregistrierung fehlgeschlagen ist

  2. Suchen Sie im Tab Details der VM-Instanz im Abschnitt API und Identitätsverwaltung den Namen des Dienstkontos im Feld Dienstkonto. Wenn der Knoten das Compute Engine-Standarddienstkonto verwendet hat, hat der Name das Format PROJECT_NUMBER-compute@developer.gserviceaccount.com. Dieses Dienstkonto muss die erforderlichen Mindestberechtigungen haben.

  3. Suchen Sie in der Ausgabe der seriellen Konsole nach Indikatoren für die erfolgreiche Registrierung. Klicken Sie auf dem Tab Details der VM-Instanz im Abschnitt Logs auf Serieller Port 1 (Konsole).

    Wenn die Instanz ein Dienstkonto mit den richtigen Berechtigungen verwendet hat, enthält die Ausgabe Folgendes:

    • Started Download and install k8s binaries and configurations
    • Started Docker Application Container Engine.
    • Started Configure kubernetes node.
    • Reached target Kubernetes.

    Diese Nachrichten befinden sich an verschiedenen Stellen in dieser Ausgabe. Sie können auch Zeitstempel oder andere Artefakte haben, die sie unterbrechen, wie zum Beispiel: Starting [0;1;39mConfigure kubernetes node. Wenn alle diese Nachrichten angezeigt werden, wurden die Voraussetzungen für das Dienstkonto erfüllt.

    Wenn diese Meldungen nicht angezeigt werden, wurde das Dienstkonto, das der VM-Instanz zugewiesen ist, möglicherweise gelöscht, deaktiviert oder hat nicht die richtigen Berechtigungen.

Netzwerkverbindung zu Google APIs und Google-Diensten für die Knotenregistrierung prüfen

Verbindung mit SSH-Zugriff prüfen

Wenn Sie in Ihrem Projekt den SSH-Zugriff auf VM-Instanzen haben, können Sie auch prüfen, ob die VM-Instanz eine Netzwerkverbindung zu Google APIs und Google-Diensten hat.

  1. Instanz suchen, deren Knotenregistrierung fehlgeschlagen ist

  2. Klicken Sie im Tab Details der VM-Instanz auf SSH.

  3. Nachdem Sie eine Verbindung zur Befehlszeile für Ihre VM-Instanz hergestellt haben, führen Sie den folgenden Befehl aus, um die Verbindung zu Google APIs und Google-Diensten zu prüfen:

    curl -m 5 -v https://storage.googleapis.com/generate_204
    

    Wenn die Verbindung erfolgreich ist, sieht die Ausgabe in etwa so aus:

    *   Trying 142.250.148.128:443...
    * Connected to storage.googleapis.com (142.250.148.128) port 443 (#0)
    
    ...
    
    < HTTP/1.1 204 No Content
    < Content-Length: 0
    < Cross-Origin-Resource-Policy: cross-origin
    < Date: Wed, 04 Jan 2023 00:58:41 GMT
    <
    * Connection #0 to host storage.googleapis.com left intact
    

    Wenn die Verbindung nicht erfolgreich ist, sieht die Ausgabe in etwa so aus:

    *   Trying 142.250.148.128:443...
    * Connection timed out after 5000 milliseconds
    * Closing connection 0
    curl: (28) Connection timed out after 5000 milliseconds```
    

    Wenn die Verbindung unterbrochen wird und die zurückgegebene IP-Adresse innerhalb des IP-Adressbereichs 199.36.153.0/24 liegt, prüfen Sie, ob Ihr Cluster die Netzwerkanforderungen für die Verbindung mit Google-APIs und -Diensten erfüllt. Wenn die Verbindung unterbrochen wird und die zurückgegebene IP-Adresse nicht in dem genannten IP-Adressbereich liegt, prüfen Sie, ob Firewall-Regeln den ausgehenden Traffic blockieren oder ob die Routen im VPC-Netzwerk Ihres Clusters falsch konfiguriert sind.

    Lassen Sie die SSH-Verbindung zur VM-Instanz geöffnet und fahren Sie mit dem nächsten Abschnitt fort.

Verbindung ohne SSH-Zugriff mithilfe von Konnektivitätstests prüfen

Wenn Sie keinen SSH-Zugriff auf VM-Instanzen haben, prüfen Sie mit Konnektivitätstests, ob die VM-Instanz eine Verbindung zu Google APIs und Google-Diensten hat.

  1. Instanz suchen, deren Knotenregistrierung fehlgeschlagen ist

  2. Erstellen und führen Sie Konnektivitätstests mit der VM-Instanz als Quelle und storage.googleapis.com TCP/443 als Ziel aus.

    Verwenden Sie die Testergebnisse, um die Netzwerkkonfiguration des Clusters zu prüfen.

Netzwerkverbindung zur Steuerungsebene für die Knotenregistrierung prüfen

Wenn Sie in Ihrem Projekt SSH-Zugriff auf VM-Instanzen haben, können Sie prüfen, ob die VM-Instanz eine Netzwerkverbindung zur Steuerungsebene des Clusters hat.

  1. Instanz suchen, deren Knotenregistrierung fehlgeschlagen ist

  2. Klicken Sie im Tab Details der VM-Instanz auf SSH.

  3. Nachdem Sie eine Verbindung zur Befehlszeile für Ihre VM-Instanz hergestellt haben, speichern Sie den Endpunkt der Steuerungsebene des Clusters als Umgebungsvariable:

    source <(sudo grep KUBERNETES_MASTER_NAME /home/kubernetes/kube-env)
    
  4. Senden Sie eine GET-Anfrage an den Endpunkt der Steuerungsebene:

    curl -k -m 5  https://${KUBERNETES_MASTER_NAME}/version
    

    Wenn die Ausgabe in etwa so aussieht, kann die VM-Instanz eine Verbindung zur Steuerungsebene herstellen:

    {
    "major": "1",
    "minor": "24",
    "gitVersion": "v1.24.7-gke.900",
    "gitCommit": "e35c4457f66187eff006dda6d2c0fe12144ef2ec",
    "gitTreeState": "clean",
    "buildDate": "2022-10-26T09:25:34Z",
    "goVersion": "go1.18.7b7",
    "compiler": "gc",
    "platform": "linux/amd64"
    }
    

    Wenn die Ausgabe in etwa so aussieht, kann die VM-Instanz keine Verbindung zur Steuerungsebene herstellen:

    curl: (28) Connection timed out after 5000 milliseconds
    

Wenn die VM-Instanz keine Verbindung mit der Steuerebene herstellen kann, lesen Sie den Abschnitt über das Zulassen der Konnektivität der Steuerungsebene in den Best Practices für GKE-Netzwerke.

Knotenregistrierung nach Behebung der Ursache abschließen

Nachdem Sie das Problem, das die Knotenregistrierung blockiert, behoben haben, hängt das weitere Vorgehen vom Kontext des Fehlers ab:

  • Wenn die Knotenregistrierung bei der Clustererstellung fehlgeschlagen ist, löschen Sie den Cluster und versuchen Sie es noch einmal.
  • Wenn die Knotenregistrierung während der vertikalen Skalierung mit Cluster Autoscaler fehlgeschlagen ist, warten Sie, bis die VM-Instanzen es noch einmal versuchen und sich registrieren.
  • Wenn die Knotenregistrierung beim Erstellen des Knotenpools fehlgeschlagen ist:
    • Wenn die VM-Instanzen erstellt wurden, warten Sie, bis die VM-Instanzen es noch einmal versuchen und sich registrieren.
    • Wenn die VM-Instanzen nicht erstellt wurden, löschen Sie den Knotenpool und versuchen Sie es noch einmal.
  • Wenn die Knotenregistrierung bei der Clustergrößenanpassung fehlgeschlagen ist, führen Sie den Befehl noch einmal aus, um die Größe des Clusters zu erhöhen.
  • Wenn die Knotenregistrierung außerhalb eines Vorgangs fehlgeschlagen ist, z. B. während eines Reparaturvorgangs, warten Sie, bis die VM-Instanzen versuchen, es noch einmal zu registrieren.

Informationen zur weiteren Untersuchung sammeln

Wenn Sie das Knotenregistrierungsproblem nicht beheben können, können Sie mit den folgenden Anweisungen zusätzliche Informationen sammeln, die dem Cloud-Kundendienst bei der Untersuchung helfen. Diese Schritte erfordern SSH-Zugriff auf VM-Instanzen in Ihrem Projekt und verwenden das Dienstprogramm sosreport, das in COS-Images enthalten ist.

  1. Instanz suchen, deren Knotenregistrierung fehlgeschlagen ist

  2. Debugging-Informationen mit sosreport erfassen.

    Wenn auf Ihren Knoten das Dienstprogramm sosreport nicht heruntergeladen wurde und es nicht installiert werden kann, erfassen Sie die Fehlerbehebungsinformationen manuell. Führen Sie dazu die folgenden Befehle aus:

    sudo journalctl -u cloud-init-local
    sudo journalctl -u cloud-init
    sudo journalctl -u cloud-final
    sudo journalctl -u cloud-config
    systemctl status kubelet
    journalctl -u kubelet
    systemctl status kube-node-installation.service
    systemctl status kube-node-configuration.service
    journalctl -u kube-node-installation.service --no-pager
    journalctl -u kube-node-configuration.service --no-pager
    journalctl -u kubelet.service --no-pager
    
  3. Fassen Sie diese Informationen in einer ZIP-Datei zusammen und fügen Sie sie ein, wenn Sie eine Supportanfrage an Cloud Customer Care senden.