Container-Images bereitstellen

Auf dieser Seite wird beschrieben, wie Sie neue Dienste und neue Überarbeitungen in Knative Serving bereitstellen.

Vorbereitung

Zur Verwendung der Google Cloud CLI müssen Sie zuerst die Befehlszeilentools einrichten und konfigurieren.

Verbindung zu GKE-Clustern herstellen

Bevor Sie Dienste in Knative Serving bereitstellen können, müssen Sie sich anmelden, um eine Verbindung zu Ihrem GKE-Cluster herzustellen.

Weitere Informationen zum Herstellen einer Verbindung zu Ihren GKE-Clustern, einschließlich zusätzlicher Optionen, finden Sie unter:

Für das Deployment erforderliche Berechtigungen

Sie benötigen Berechtigungen zum Erstellen, Aktualisieren und Löschen für die apiGroup serving.knative.dev und die Art Service. Darüber hinaus benötigen Sie EINE der folgenden Rollen für die Identitäts- und Zugriffsverwaltung:

Bereitstellbare Images

Es gibt keine Größenbeschränkung für Container-Images, die Sie bereitstellen können.

Sie können Container aus jeder Container-Registry wie Docker Hub verwenden. Informationen zum Bereitstellen privater Images aus anderen Registries als Container Registry oder Artifact Registry finden Sie unter Private Container-Images aus anderen Container Registries bereitstellen.

Neuen Dienst bereitstellen

Sie können ein Container-Image mit einem Tag (z. B. gcr.io/my-project/my-image:latest) oder mit einem genauen Digest (z. B. gcr.io/my-project/my-image@sha256:41f34ab970ee...) angeben.

Wenn Sie einen Dienst zum ersten Mal bereitstellen, wird die erste Überarbeitung erstellt. Überarbeitungen können nach der Erstellung nicht mehr geändert werden. Wenn Sie den Dienst aus einem Container-Image-Tag bereitstellen, wird er in einen Digest aufgelöst. Die Überarbeitung stellt anschließend immer diesen speziellen Digest bereit.

Sie können einen Container über die Google Cloud Console, die Google Cloud CLI oder eine YAML-Konfigurationsdatei bereitstellen.

Klicken Sie auf den Tab, um eine Anleitung zum gewünschten Tool zu erhalten.

Standardkonfiguration des gcloud-Standorts

Wenn Sie zuvor einen Standort in der default-Konfiguration der Google Cloud CLI konfiguriert haben, verwenden Ihre gcloud-Befehle diese Werte standardmäßig, u. a.:

  • compute/region
  • compute/zone
  • run/cluster
  • run/cluster_location
  • run/platform
  • run/region

Führen Sie den folgenden gcloud config-Befehl aus, um die Einstellungen für die Konfiguration default aufzurufen:

gcloud config configurations describe default

Console

So stellen Sie ein Container-Image bereit:

  1. Rufen Sie in der Google Cloud Console Knative Serving auf:

    Knative Serving aufrufen

  2. Klicken Sie auf Dienst erstellen, um die entsprechende Seite aufzurufen.

    Füllen Sie das Formular aus:

    1. Wählen Sie im Drop-down-Menü einen der verfügbaren GKE-Cluster für Ihren Dienst aus.

    2. Geben Sie den gewünschten Dienstnamen ein. Dienstnamen dürfen pro Region und Projekt oder pro Cluster nur einmal vorkommen. Ein Dienstname kann später nicht mehr geändert werden.

    3. Unter Verbindung:

      • Wählen Sie Intern aus, wenn Sie den Zugriff auf andere Knative Serving-Dienste oder Dienste in Ihrem Cluster beschränken möchten, die Istio verwenden.
      • Wählen Sie Extern aus, um externen Zugriff auf Ihren Dienst zuzulassen.

      Sie können die Verbindungsoption jederzeit ändern. Eine Beschreibung hierzu finden Sie unter Verbindungseinstellungen für Cloud Run in GKE-Dienst ändern.

    4. Klicken Sie auf Weiter, um mit der zweiten Seite des Diensterstellungsformulars fortzufahren:

      Füllen Sie das Formular aus:

      1. Geben Sie im Textfeld Container-Image-URL die URL eines Images ein. Beispiel: us-docker.pkg.dev/cloudrun/container/hello:latest

      2. Optional können Sie auf Erweiterte Einstellungen anzeigen und die nachfolgenden Tabs klicken, um diese Einstellungen vorzunehmen:

      3. Klicken Sie auf Erstellen, um das Image in Knative Serving bereitzustellen. Warten Sie, bis die Bereitstellung abgeschlossen ist.

    Sie haben gerade einen Dienst in einem Cluster bereitgestellt, auf dem Knative Serving aktiviert ist.

Befehlszeile

So stellen Sie ein Container-Image bereit:

  1. Führen Sie den Befehl gcloud run deploy aus:

    gcloud run deploy SERVICE --image IMAGE_URL

    • Ersetzen Sie SERVICE durch den Namen des Dienstes, für den Sie die Bereitstellung durchführen möchten. Wenn der angegebene Dienst nicht existiert, wird ein neuer Dienst erstellt.

    • Ersetzen Sie IMAGE_URL durch einen Verweis auf das Container-Image, z. B. gcr.io/cloudrun/hello.

    • Zusätzliche Bereitstellungsoptionen:

      • Für die Bereitstellung in einem anderen Namespace als dem Standard müssen Sie diesen Namespace mit dem Parameter --namespace angeben.

      • Für Bereitstellungen an einem anderen Standort als der Standardkonfiguration, müssen Sie das Argument name und location des Clusters mit den Parametern --cluster und --cluster-location angeben:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Mit dem Flag --connectivity können Sie Verbindungsoptionen für den internen und externen Zugriff festlegen. Eine Beschreibung hierzu finden Sie unter Verbindungseinstellungen für Dienste ändern.

      • Für Knative Serving auf VMware müssen Sie den Parameter --kubeconfig einfügen und Ihre Konfigurationsdatei angeben:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Warten Sie, bis die Bereitstellung abgeschlossen ist. Nach erfolgreichem Abschluss wird eine Bestätigung zusammen mit der URL des bereitgestellten Dienstes angezeigt.

YAML

Sie können Ihre Dienstspezifikation in einer YAML-Datei speichern und dann über die Google Cloud CLI bereitstellen.

  1. Erstellen Sie eine neue service.yaml-Datei mit folgendem Inhalt:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    Ersetzen

    • SERVICE durch den Namen Ihres Knative Serving-Dienstes
    • IMAGE durch die URL Ihres Container-Images.

    Sie können auch weitere Konfigurationen angeben, z. B. Umgebungsvariablen oder Speicherlimits.

  2. Stellen Sie den neuen Dienst mit dem folgenden Befehl bereit:

    gcloud run services replace service.yaml

Neue Überarbeitung eines vorhandenen Dienstes bereitstellen

Sie können eine neue Überarbeitung über die Google Cloud Console, die gcloud-Befehlszeile oder eine YAML-Konfigurationsdatei bereitstellen.

Beachten Sie, dass beim Ändern von Konfigurationseinstellungen eine neue Überarbeitung erstellt wird, auch wenn das Container-Image nicht geändert wird. Überarbeitungen können nach der Erstellung nicht mehr geändert werden.

Klicken Sie auf den Tab, um eine Anleitung zum gewünschten Tool zu erhalten.

Console

So stellen Sie eine neue Überarbeitung eines vorhandenen Dienstes bereit:

  1. Rufen Sie in der Google Cloud Console Knative Serving auf:

    Zu Knative Serving

  2. Klicken Sie in der Übersicht auf den zu aktualisierenden Dienst, um dessen Details anzuzeigen.

  3. Klicken Sie auf NEUE ÜBERARBEITUNG BEARBEITEN UND BEREITSTELLEN. Dadurch wird das Formular für die Bereitstellung der Überarbeitung angezeigt:

  4. Geben Sie bei Bedarf die URL des neu bereitzustellenden Container-Images an.

  5. Legen Sie optional Folgendes fest:

  6. Um den gesamten Traffic an die neue Überarbeitung zu senden, aktivieren Sie das Kästchen Diese Überarbeitung sofort bereitstellen. Wenn Sie eine neue Überarbeitung nach und nach einführen möchten, entfernen Sie das Häkchen aus diesem Kästchen. Dadurch erhalten Sie eine Bereitstellung, bei der kein Traffic an die neue Überarbeitung gesendet wird. Folgen Sie der Anleitung für schrittweise Einführungen nach der Bereitstellung.

  7. Klicken Sie auf BEREITSTELLEN und warten Sie, bis die Bereitstellung abgeschlossen ist.

Befehlszeile

So stellen Sie ein Container-Image bereit:

  1. Führen Sie den Befehl gcloud run services update aus:

    gcloud run services update SERVICE --image IMAGE_URL
    • Für jede Überarbeitung wird automatisch ein Überarbeitungssuffix zugewiesen. Wenn Sie ein eigenes Überarbeitungssuffix angeben möchten, fügen Sie den Parameter --revision-suffix hinzu.

    • Ersetzen Sie SERVICE durch den Namen des Dienstes, für den Sie die Bereitstellung durchführen möchten. Wenn der angegebene Dienst nicht existiert, wird ein neuer Dienst erstellt.

    • Ersetzen Sie IMAGE_URL durch einen Verweis auf das Container-Image, z. B. gcr.io/cloudrun/hello.

    • Zusätzliche Bereitstellungsoptionen:

      • Für die Bereitstellung in einem anderen Namespace als dem Standard müssen Sie diesen Namespace mit dem Parameter --namespace angeben.

      • Für Bereitstellungen an einem anderen Standort als der Standardkonfiguration, müssen Sie das Argument name und location des Clusters mit den Parametern --cluster und --cluster-location angeben:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Mit dem Flag --connectivity können Sie Verbindungsoptionen für den internen und externen Zugriff festlegen. Eine Beschreibung hierzu finden Sie unter Verbindungseinstellungen für Dienste ändern.

      • Für Knative Serving auf VMware müssen Sie den Parameter --kubeconfig einfügen und Ihre Konfigurationsdatei angeben:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Warten Sie, bis die Bereitstellung abgeschlossen ist. Nach erfolgreichem Abschluss wird eine Bestätigung zusammen mit der URL des bereitgestellten Dienstes angezeigt.

YAML

Sie können die Konfiguration eines vorhandenen Dienstes in eine YAML-Datei herunterladen – mit dem gcloud run services describe-Befehl mithilfe des Flags --format=export. Sie können diese YAML-Datei dann ändern und diese Änderungen mit dem Befehl gcloud run services replace bereitstellen. Sie müssen sicherstellen, dass Sie nur die angegebenen Attribute ändern.

  1. Laden Sie die Konfiguration des Dienstes in eine Datei mit dem Namen service.yaml im lokalen Arbeitsbereich herunter:

    gcloud run services describe SERVICE --format export > service.yaml

    Ersetzen Sie SERVICE durch den Namen Ihres Knative-Serving-Dienstes.

    1. Aktualisieren Sie in Ihrer lokalen Datei die Revisionseinstellungen in jedem untergeordneten Attribut von spec.template.

    2. Stellen Sie die neue Überarbeitung bereit:

      gcloud run services replace service.yaml

Images aus anderen Google Cloud-Projekten bereitstellen

Sie können Container-Images aus anderen Google Cloud-Projekten bereitstellen, wenn Sie die richtigen IAM-Berechtigungen festlegen:

  1. Öffnen Sie in der Google Cloud Console das Projekt für Ihren Knative Serving-Dienst.

  2. Zur IAM-Seite

  3. Rufen Sie Ihre Dienstkontoinformationen ab:

  4. Öffnen Sie das Projekt mit der gewünschten Container Registry.

  5. Zur IAM-Seite

  6. Klicken Sie auf Hinzufügen, um ein neues Hauptkonto hinzuzufügen.

  7. Fügen Sie in das Textfeld Neue Hauptkonten die zuvor kopierte E-Mail-Adresse des Dienstkontos ein.

  8. Wählen Sie in der Drop-down-Liste Rolle auswählen die Rolle aus, die aus der Registry gelesen werden soll:

  9. Stellen Sie das Container-Image für das Projekt bereit, das den Knative Serving-Dienst enthält.

Zur Erhöhung der Sicherheit können Sie den Zugriff einschränken:

  • Artifact Registry: Weisen Sie die Rolle dem Repository zu, in dem Ihre Container-Images gespeichert sind.
  • Container Registry: Weisen Sie die Rolle dem Cloud Storage-Bucket zu, in dem Ihre Container-Images gespeichert werden.

Private Container-Images aus anderen Container Registries bereitstellen

In diesem Abschnitt wird beschrieben, wie Sie die richtigen Berechtigungen zum Bereitstellen von Container-Images aus einer beliebigen privaten Registry in Knative Serving einrichten. Eine private Container-Registry erfordert Anmeldedaten, um auf das Container-Image zuzugreifen. Beachten Sie, dass Sie diese Schritte nicht ausführen müssen, wenn Sie private Container-Images aus Container Registry (Verworfen) oder Artifact Registry im selben Projekt wie Ihren Cluster bereitstellen.

Damit Sie ein privates Container-Image bereitstellen können, müssen Sie ein Kubernetes-Secret vom Typ imagePullSecret erstellen und mit einem Dienstkonto verknüpfen:

  1. Erstellen Sie ein imagePullSecret-Secret mit dem Namen container-registry:

    kubectl create secret docker-registry container-registry \
      --docker-server=DOCKER_REGISTRY_SERVER \
      --docker-email=REGISTRY_EMAIL \
      --docker-username=REGISTRY_USER \
      --docker-password=REGISTRY_PASSWORD
    • Ersetzen Sie DOCKER_REGISTRY_SERVER durch Ihren privaten Registry-FQDN (z. B. https://gcr.io/ für Container Registry oder https://hub.docker.com für DockerHub).
    • Ersetzen Sie REGISTRY_EMAIL durch Ihre E-Mail-Adresse.
    • Ersetzen Sie REGISTRY_USER durch Ihren Container Registry-Nutzernamen.

      Wenn Sie Container Registry oder Artifact Registry verwenden und langlebige Anmeldedaten speichern und abrufen möchten, anstatt kurzlebige Zugriffstokens zu übergeben, finden Sie weitere Informationen unter Authentifizierungsmethoden: JSON-Schlüsseldatei.

    • Ersetzen Sie REGISTRY_PASSWORD durch Ihr Container Registry-Passwort.

  2. Öffnen Sie Ihr Standarddienstkonto:

    kubectl edit serviceaccount default --namespace default

    Jeder Namespace in Ihrem Kubernetes-Cluster hat ein Standarddienstkonto namens default. Dieses Standarddienstkonto wird verwendet, um Ihr Container-Image abzurufen, sofern Sie beim Bereitstellen des Knative Serving-Dienstes nichts anderes angegeben haben.

  3. Fügen Sie das neu erstellte imagePullSecret-Secret Ihrem Standarddienstkonto hinzu:

    imagePullSecrets:
    - name: container-registry
    

    Ihr Dienstkonto sollte nun so aussehen:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

Jetzt ist für alle neuen Pods, die im aktuellen default-Namespace erstellt werden, das imagePullSecret-Secret definiert.

Mit aktivierter automatischer Sidecar-Einfügung bereitstellen

Informationen zum Bereitstellen Ihres Dienstes mit aktivierter Istio-Sidecar-Einfügung finden Sie in der Cloud Service Mesh-Dokumentation unter Automatische Sidecar-Einfügung aktiviert.

Dienste in einem internen Netzwerk bereitstellen

Damit Sie Dienste in einem internen Netzwerk bereitstellen können, müssen Sie ein privates internes Netzwerk einrichten.

Nächste Schritte

Nachdem Sie einen neuen Dienst bereitgestellt haben, können Sie Folgendes tun:

Mithilfe von Cloud Build-Triggern können Sie die Builds und Bereitstellungen Ihrer Knative Serving-Dienste automatisieren.