In Google Kubernetes Engine bereitstellen

Mit Google Kubernetes Engine können Sie Images direkt aus Docker-Repositories abrufen. Einige Versionen bieten eine vorkonfigurierte Unterstützung zum Abrufen von Images aus Artifact Registry-Docker-Repositories.

Voraussetzungen

In diesem Abschnitt werden die Anforderungen für die Einbindung in GKE beschrieben.

Berechtigungen

Standardmäßig verwendet GKE das Compute Engine-Dienstkonto als Identität für Knoten. Dieses Standarddienstkonto hat Lesezugriff auf Artifact Registry-Repositories im selben Google Cloud-Projekt.

Wenn sich Ihre Repositories in einem anderen Projekt befinden oder wenn Sie ein nutzerverwaltetes Dienstkonto als Identität für Ihre Knoten verwenden, müssen Sie dem Dienstkonto die Rolle "Artifact Registry-Leser" zuweisen. Zum Hochladen in Repositories von Knoten weisen Sie die Rolle Artifact Registry-Autor“ zu.

Weitere Informationen finden Sie in der Dokumentation zur Zugriffssteuerung.

GKE-Version

In der folgenden Tabelle sind die erforderlichen Mindestversionen für GKE aufgeführt, um Cluster zu erstellen, die Standardberechtigungen zum Herunterladen von Containern aus Docker-Repositories im selben Projekt haben.

Version Mindestens erforderlicher Patch
1.14 1.14.8-gke.37
1.14.9-gke.28
1.14.10-gke.22
1.15 1.15.7-gke.28 1.15.8-gke.6
1.15.9-gke.1
1.16 1.16.4-gke.28
1.16.5-gke.0
1.17 1.17.0-gke.5

Wenn Ihre GKE-Version älter als die Mindestversion ist, müssen Sie Kubernetes imagePullSecrets konfigurieren, damit GKE Images abrufen kann.

Wenn sich GKE in einem anderen Projekt als Artifact Registry befindet, Gewähren Sie Artifact Registry-Berechtigungen für das Dienstkonto, das Ihr GKE-Knoten verwendet. Knoten verwenden standardmäßig das Compute Engine-Standarddienstkonto.

Image ausführen

Mit dem folgenden Befehl führen Sie ein Artifact Registry-Image in einem Google Kubernetes Engine-Cluster aus:

kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG

wobei

  • LOCATION ist der regionale oder multiregionale Speicherort für das Repository.
  • PROJECT ist Ihre Projekt-ID der Google Cloud Console. Wenn die Projekt-ID einen Doppelpunkt (:) enthält, finden Sie weitere Informationen unter Auf Domains beschränkte Projekte.
  • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.
  • IMAGE ist der Name des Images im Repository.
  • TAG ist das Tag für die Image-Version, die Sie herunterladen möchten.

Weitere Informationen zu Kubernetes-Befehlen finden Sie in der Übersicht zu kubectl.

Fehlerbehebung bei containerd-Knoten-Images

Ab GKE-Knotenversion 1.19 ist das Standardknoten-Image für Linux-Knoten das Container-Optimized OS mit containerd (cos_containerd ) anstelle von Container-Optimized OS mit Docker (cos.

Die Docker-Binärdatei ist derzeit auf Linux-Knoten verfügbar, die "containerd" als Laufzeit verwenden. Ihre Verwendung wird jedoch nicht empfohlen. Docker verwaltet nicht die Container, die Kubernetes auf containerd-Knoten ausführt. Deshalb können Sie es nicht verwenden, um sich mit Docker-Befehlen oder der Docker API laufende Kubernetes-Container anzusehen oder mit diesen zu interagieren.

Zum Debugging und zur Fehlerbehebung auf Linux-Knoten können Sie mithilfe des speziell für Kubernetes-Containerlaufzeiten erstellten portablen Befehlszeilentools mit "containerd" interagieren: crictl crictl unterstützt allgemeine Funktionen, mit denen Sie Container und Images aufrufen, Logs lesen und Befehle in den Containern ausführen können.

Weitere Informationen finden Sie im Nutzerhandbuch für crictl und in der GKE-Dokumentation zu containerd.

Bei Windows Server-Knoten wird der containerd-Daemon als Windows-Dienst mit dem Namen containerd ausgeführt. Logs sind im folgenden Logverzeichnis verfügbar: C:\etc\kubernetes\logs\containerd.log und werden im Log-Explorer unter LOG NAME: "container-runtime" angezeigt.

Von einem öffentlichen Artifact Registry-Repository abrufen

Nachdem Sie ein Deployment mit einem GKE-Cluster und containerd-Knoten bereitgestellt haben, können Sie mithilfe von SSH eine Verbindung zu einer VM-Instanz herstellen und crictl-Befehle zur Fehlerbehebung ausführen.

Für öffentliche Artifact Registry-Repositories ist keine Authentifizierung erforderlich. crictl kann auch zum Abrufen von Images in privaten Artifact Registry-Repositories verwendet werden.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite VM-Instanzen.

    Zur Seite VMVM-Instanzen“

  2. Klicken Sie in der Liste der VM-Instanzen auf den Pfeil neben SSH in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten.

    SSH-Schaltfläche neben dem Instanznamen.

  3. Wählen Sie aus dem Drop-down-Menü "Im Browserfenster öffnen" oder die gewünschte Verbindungsmethode aus.

  4. In der Cloud Console wird ein neues Terminalfenster geöffnet. Verwenden Sie crictl, um ein Image aus der Artifact Registry abzurufen:

    crictl pull IMAGE_LOCATION:TAG
    

    Die Ausgabe sieht so aus:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Wenn Sie ein Image aus einem privaten Artifact Registry-Repository abrufen, müssen Sie sich beim Repository authentifizieren. Sie können ein Zugriffstoken verwenden, um Ihre Anmeldedaten bereitzustellen.

gcloud

  1. Prüfen Sie, ob Sie die neueste Version des gcloud-Befehlszeilentools haben:

    gcloud components update
    
  2. Stellen Sie eine Verbindung zur VM her.

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Dabei gilt:

    • PROJECT_ID: Die ID des Projekts, das die VM enthält
    • ZONE: Der Name der Zone, in der sich die VM befindet
    • VM_NAME: Der Name der VM

    Wenn Sie Standardeigenschaften für das gcloud-Befehlszeilentool festgelegt haben, können Sie die Flags --project und --zone bei diesem Befehl weglassen. Beispiel:

    gcloud compute ssh VM_NAME
    
  3. Wenn Sie noch keinen SSH-Schlüssel erstellt haben, generiert SSH Keygen einen für Sie. Geben Sie eine Passphrase ein oder lassen Sie das Feld leer, wenn Sie dazu aufgefordert werden.

  4. Verwenden Sie crictl, um ein Image aus der Artifact Registry abzurufen:

    crictl pull IMAGE_LOCATION:TAG
    
  5. Die Ausgabe sieht so aus:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Wenn Sie ein Image aus einem privaten Artifact Registry-Repository abrufen, müssen Sie sich beim Repository authentifizieren. Sie können ein Zugriffstoken verwenden, um Ihre Anmeldedaten bereitzustellen.

Aus einem privaten Artifact Registry-Repository abrufen

Console

  1. Öffnen Sie in der Google Cloud Console die Seite VM-Instanzen.

    Zur Seite VMVM-Instanzen“

  2. Klicken Sie in der Liste der VM-Instanzen auf den Pfeil neben SSH in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten.

    SSH-Schaltfläche neben dem Instanznamen.

  3. Wählen Sie aus dem Drop-down-Menü "Im Browserfenster öffnen" aus.

  4. In der Cloud Console wird ein neues Terminalfenster geöffnet. Generieren Sie mit curl ein Zugriffstoken für das Compute Engine-Dienstkonto.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    Die Ausgabe sieht so aus:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Kopieren Sie den Wert von access_token aus der zurückgegebenen Ausgabe ohne Anführungszeichen.

  6. Rufen Sie das Image mit crictl pull --creds und dem im vorherigen Schritt kopierten Wert access_token ab.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    Die Ausgabe sieht so aus:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Prüfen Sie, ob Sie die neueste Version des gcloud-Befehlszeilentools haben:

    gcloud components update
    
  2. Stellen Sie eine Verbindung zur VM her.

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Ersetzen Sie die folgenden Variablen:

    • PROJECT_ID: Die ID des Projekts, das die VM enthält
    • ZONE: Der Name der Zone, in der sich die VM befindet
    • VM_NAME: Der Name der VM

    Wenn Sie Standardeigenschaften für das gcloud-Befehlszeilentool festgelegt haben, können Sie die Flags --project und --zone bei diesem Befehl weglassen. Beispiel:

    gcloud compute ssh VM_NAME
    
  3. Wenn Sie noch keinen SSH-Schlüssel erstellt haben, generiert SSH Keygen einen für Sie. Geben Sie eine Passphrase ein oder lassen Sie das Feld leer, wenn Sie dazu aufgefordert werden.

  4. Generieren Sie mit curl ein Zugriffstoken für das Compute Engine-Dienstkonto.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    Die Ausgabe sieht so aus:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Kopieren Sie den Wert von access_token aus der zurückgegebenen Ausgabe ohne Anführungszeichen.

  6. Rufen Sie das Image mit crictl pull --creds und dem im vorherigen Schritt kopierten Wert access_token ab.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    Die Ausgabe sieht so aus:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

Mit crictl können Entwickler ihre Laufzeit debuggen, ohne Kubernetes-Komponenten einrichten zu müssen. Eine vollständige Liste der Befehle finden Sie in der Dokumentation zu crictl und in der Dokumentation zur Kubernetes-Fehlerbehebung.