In diesem Dokument wird beschrieben, wie Sie Ihre Anwendungen bereitstellen, einschließlich Cloud Run-Diensten und Cloud Run-Jobs.
Mit Cloud Deploy können Sie Ihre containerbasierten Arbeitslasten in einem beliebigen Cloud Run-Dienst oder -Job bereitstellen. Alle Cloud Deploy-Funktionen werden unterstützt, wenn Sie Cloud Run-Dienste auf Cloud Run-Ziele bereitstellen. Canary-Bereitstellungen werden jedoch für Cloud Run-Jobs nicht unterstützt.
In diesem Dokument werden die drei Hauptkonfigurationen beschrieben, die Sie für die Bereitstellung in Cloud Run ausführen müssen:
- Zielkonfiguration erstellen
- Skaffold-Konfiguration erstellen
- Dienstdefinitionen oder Jobdefinitionen für Cloud Run erstellen
Beschränkungen
Sie können nur einen Cloud Run-Dienst oder -Job pro Ziel bereitstellen.
Sie können keine Canary-Bereitstellung für einen Cloud Run-Job ausführen.
Cloud Run-Dienste können jedoch ein Canary-Deployment verwenden.
Wenn Sie eine Cloud Run-Funktion mit Cloud Deploy bereitstellen möchten, müssen Sie Ihren CI-Workflow ändern, um die Funktion in einem Container zu erstellen und als Cloud Run-Dienst bereitzustellen.
Hinweise
Sie benötigen die gcloud CLI-Version
401.0.0
oder höher.
Zielkonfiguration erstellen
Das Ziel kann in der YAML-Datei Ihrer Lieferpipeline oder in einer separaten Datei konfiguriert werden. Außerdem können Sie in derselben Datei mehrere Ziele konfigurieren.
Ziele müssen im selben Projekt und in derselben Region wie die Bereitstellungspipeline definiert werden. Die Dienste oder Jobs, auf denen die Ziele bereitgestellt werden, können sich jedoch in verschiedenen Projekten und Regionen befinden, sofern das Dienstkonto Zugriff auf diese Projekte hat.
Erstellen Sie in der Zieldefinition einen run
-Abschnitt, um den Ort anzugeben, an dem der Cloud Run-Dienst erstellt wird.
Die Syntax zum Angeben des Cloud Run-Dienstes oder -Jobs in der Zieldatei ist wie folgt:
run:
location: projects/[project_name]/locations/[region_name]
Diese Ressourcen-ID verwendet die folgenden Elemente:
[
project_name
] ist der Name des Google Cloud Projekts, in dem Ihr Cloud Run-Dienst oder -Job erstellt wird.Das müssen Sie für jedes Zielvorhaben tun. Wir empfehlen, für jeden Cloud Run-Dienst oder -Job ein separates Projekt zu verwenden. Wenn Sie mehr als einen Dienst oder Job im selben Projekt verwenden möchten, müssen Sie Skaffold-Profile in Ihrer
skaffold.yaml
-Konfigurationsdatei verwenden.[
region_name
] ist die Region, in der der Dienst oder Job erstellt wird. Ihr Dienst oder Job kann sich in jeder Region befinden, die von Cloud Run unterstützt wird.
Das Folgende ist ein Beispiel für eine Zielkonfiguration, in der der zu erstellende Cloud Run-Dienst oder -Job definiert wird:
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev
description: development service
run:
location: projects/my-app/locations/us-central1
Sie können dieses Ziel in einer Cloud Deploy-Definition der Bereitstellungspipeline oder separat definieren. In jedem Fall müssen Sie das Ziel registrieren, bevor Sie das Release zum Bereitstellen Ihres Cloud Run-Dienstes oder -Jobs erstellen.
Skaffold-Konfiguration erstellen
Unten sehen Sie ein Beispiel für eine skaffold.yaml
-Datei für eine Cloud Run-Bereitstellung:
apiVersion: skaffold/v4beta7
kind: Config
metadata:
name: cloud-run-application
manifests:
rawYaml:
- service.yaml
deploy:
cloudrun: {}
In dieser skaffold.yaml
-Datei...
manifests.rawYaml
enthält die Namen der Cloud Run-Dienstdefinitionen.In diesem Beispiel ist
service.yaml
die Datei, die einen Cloud Run-Dienst definiert, der von Skaffold bereitgestellt wird. Der Dateiname kann beliebig sein, aber standardmäßig wirdservice.yaml
für einen Dienst undjob.yaml
für einen Job verwendet.Im
deploy
-Abschnitt wird angegeben, wie das Manifest bereitgestellt werden soll, insbesondere das Projekt und der Standort.deploy
ist erforderlich.Wir empfehlen, das Feld
{}
leer zu lassen. Cloud Deploy füllt diese während des Renderns basierend auf dem Projekt und dem Speicherort aus der Zieldefinition aus.Für die lokale Entwicklung können Sie hier jedoch Werte angeben. Cloud Deploy verwendet jedoch immer das Projekt und den Speicherort aus der Zieldefinition, unabhängig davon, ob hier Werte angegeben sind.
Cloud Run-Dienstdefinitionen erstellen
Sie können eine Cloud Run-Dienstdefinition entweder manuell erstellen oder aus einem vorhandenen Dienst kopieren. Beide werden in diesem Abschnitt beschrieben.
Option 1: Neue Cloud Run-service.yaml
erstellen
In der Datei service.yaml wird Ihr Cloud Run-Dienst definiert. Wenn Sie ein Release erstellen, verwendet Skaffold diese Definition, um Ihren Dienst bereitzustellen.
Hier ein vereinfachtes Beispiel:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: [SERVICE_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
Wobei:
[SERVICE_NAME]
ist ein Name für diesen Cloud Run-Dienst.[IMAGE_PATH]
verweist auf das Container-Image oder die Container-Images, die Sie mit diesem Dienst bereitstellen.
Option 2: service.yaml
aus einem vorhandenen Dienst mit der Google Cloud Console kopieren
Sie können einen Dienst über die Google Cloud Console erstellen oder einen vorhandenen Dienst verwenden und die service.yaml
von dort kopieren.
So rufen Sie die service.yaml
mit der Google Cloud CLI ab:
gcloud run services describe [service_name] --format=export
So rufen Sie die service.yaml
über die Google Cloud Console ab:
Rufen Sie in der Google Cloud Console die Seite „Cloud Run-Dienste“ auf.
Wählen Sie den vorhandenen Dienst aus, dessen Definition Sie verwenden möchten.
Alternativ können Sie ein neues erstellen und es dann auswählen. Wenn Sie den Dienst auswählen, wird die Seite „Dienstdetails“ angezeigt:
Wählen Sie den Tab YAML aus.
Klicken Sie auf Bearbeiten und kopieren Sie den Inhalt der YAML-Datei in eine neue Datei mit dem Namen
service.yaml
in Ihrem Dateisystem, damit Skaffold sie verwenden kann, wenn Sie eine Release erstellen.
Cloud Run-Jobdefinitionen erstellen
Wenn Sie eine Cloud Run-Jobdefinition bereitstellen möchten, können Sie sie entweder manuell erstellen oder aus einem vorhandenen Job kopieren. Beide werden in diesem Abschnitt beschrieben.
Beachten Sie, dass Jobs nicht unbedingt ausgeführt werden, wenn sie von Cloud Deploy bereitgestellt werden. Das unterscheidet sich von Diensten, die Anwendungen nach der Bereitstellung ausführen. Wie ein Job aufgerufen wird, hängt vom Job selbst ab.
Option 1: Neue Cloud Run-job.yaml
erstellen
In der Datei job.yaml wird Ihr Cloud Run-Job definiert. Wenn Sie ein Release erstellen, verwendet Skaffold diese Definition, um den Job bereitzustellen.
Hier ein vereinfachtes Beispiel:
apiVersion: run.googleapis.com/v1
kind: Job
metadata:
name: [JOB_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
Wobei:
[JOB_NAME]
ist ein Name für diesen Cloud Run-Job.[IMAGE_PATH]
verweist auf das Container-Image, das Sie für diesen Job bereitstellen.
Option 2: job.yaml
aus einem vorhandenen Job mit der Google Cloud -Konsole kopieren
Sie können einen Job über die Google Cloud -Konsole erstellen oder einen vorhandenen Job verwenden und die job.yaml
daraus kopieren.
So rufen Sie die job.yaml
mit der Google Cloud CLI ab:
gcloud run jobs describe [job_name] --format=export
So rufen Sie die job.yaml
über die Google Cloud Console ab:
Rufen Sie in der Google Cloud Console die Seite „Cloud Run-Jobs“ auf.
Wählen Sie den vorhandenen Job aus, dessen Definition Sie verwenden möchten.
Alternativ können Sie ein neues erstellen und es dann auswählen. Wenn Sie den Job auswählen, wird die Seite „Jobdetails“ angezeigt:
Wählen Sie den Tab YAML aus.
Klicken Sie auf Bearbeiten und kopieren Sie den Inhalt der YAML-Datei in eine neue Datei mit dem Namen
job.yaml
in Ihrem Dateisystem, damit Skaffold sie verwenden kann, wenn Sie ein Release erstellen.
Zusammenfassung
Nachdem Sie nun die Definition Ihres Cloud Run-Dienstes oder -Jobs, Ihre skaffold.yaml
-Konfiguration und Ihre Cloud Deploy-Zieldefinition haben und Ihr Ziel als Cloud Deploy-Ressource registriert haben, können Sie jetzt Ihre Bereitstellungspipeline aufrufen, um ein Release zu erstellen und es durch die in der Pipeline definierte Zielsequenz zu verschieben.
In der Kurzanleitung Anwendung mit Cloud Deploy in Cloud Run bereitstellen wird das alles in der Praxis gezeigt.
Verhalten von Diensten bei Überarbeitungen
Wenn Sie einen Dienst noch einmal bereitstellen, basiert die neue Überarbeitung auf dem neu bereitgestellten service.yaml
. Von der vorherigen Überarbeitung wird nichts beibehalten, es sei denn, es ist in der neu bereitgestellten YAML-Datei identisch. Wenn beispielsweise Konfigurationseinstellungen oder Labels in der vorherigen Überarbeitung vorhanden sind, die nicht in der neuen YAML-Datei enthalten sind, fehlen diese Einstellungen oder Labels in der neuen Überarbeitung.
Cloud Run-Jobs auslösen
Nachdem Sie einen Job bereitgestellt haben, können Sie ihn wie in der Cloud Run-Dokumentation beschrieben auslösen.
Cloud Run-Dienste und ‑Jobs in mehreren Projekten bereitstellen
Wenn Sie Dienste oder Jobs bereitstellen müssen, die sich in verschiedenen Projekten befinden, benötigt Ihr Ausführungsdienstkonto die Berechtigung für den Zugriff auf die Projekte, in denen diese Dienste oder Jobs definiert sind.
Weitere Informationen finden Sie unter Cloud Deploy-Ausführungsdienstkonto und Rollen und Berechtigungen für Identity and Access Management.
Cloud Run-Funktionen bereitstellen
Cloud Run Functions erstellt Ihren Quellcode jedes Mal, wenn eine Funktion bereitgestellt wird. Aus diesem Grund kann jedes Ziel-Laufzeit-Artefakt in Ihrer Pipeline leicht unterschiedlich sein. Dies widerspricht den Best Practices in Cloud Deploy. Stattdessen empfehlen wir, einen Cloud Run-Dienst direkt zu verwenden. So können Sie ein einzelnes Artefakt erstellen und in Ihren Umgebungen bereitstellen.
Sehen Sie in der
service.yaml
für Ihre Cloud Run-Funktion nach.Sie können ihn mit dem folgenden Befehl abrufen:
gcloud run services describe FUNCTION_NAME \ --format=export \ --region=REGION \ --project=PROJECT
Entfernen Sie die folgenden Anmerkungen, falls vorhanden:
run.googleapis.com/build-base-image
run.googleapis.com/build-name
run.googleapis.com/build-source-location
run.googleapis.com/build-enable-automatic-updates
Ersetzen Sie den Wert in
spec.spec.containers.image
durchIMAGE_TAG
.Erstellen Sie Ihre Bereitstellungspipeline und Ziele mit dem Cloud Run-Dienst als Ziel.
Trennen Sie den Build-Schritt von dem Bereitstellungsschritt in Ihrem CI-Prozess. Anstatt die Google Cloud CLI zum Bereitstellen Ihrer Funktion zu verwenden, führen Sie die folgenden Schritte aus:
Funktion mit Cloud Build in einem Container erstellen:
gcloud builds submit --pack image=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME \ --project=PROJECT \ --region=REGION
Release mit Cloud Deploy erstellen:
gcloud deploy releases create RELEASE_NAME \ --project=PROJECT \ --region=REGION \ --delivery-pipeline=DELIVERY_PIPELINE --image=IMAGE_TAG=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME
Nächste Schritte
Weitere Informationen zum Konfigurieren von Cloud Deploy-Zielen
Weitere Informationen zu Ausführungsumgebungen für Cloud Deploy