Dieses Dokument enthält eine Testanleitung, in der die Einrichtung einer Bereitstellungspipeline in Google Cloud Deploy beschrieben wird, die Container in Cloud Run bereitstellt. Am Ende dieser Anleitung haben Sie eine CD-Pipeline, die auf Cloud Run mit zwei Umgebungen ausgerichtet ist: dev
und prod
. Sie können über die Pipelinephasen neue Container-Images bereitstellen und hochstufen und den Prozess in der Google Cloud Console beobachten.
In dieser Anleitung werden mehrere Google Cloud-Dienste verwendet, insbesondere der Config Controller, sowie Pre-GA-Dienste, die sich noch in der Vorschau befinden und noch nicht allgemein verfügbar sind (Cloud Run Admin API Version 2). Mit Config Controller können Sie GCP-Ressourcen mit dem Kubernetes-Ressourcenmodell (KRM) deklarativ bereitstellen. Google Cloud Deploy verwendet Config Config, um Cloud Run-Dienste als Teil der Bereitstellungspipeline zu erstellen und zu verwalten.
Wenn Sie Fragen haben, Programmfehler finden oder uns Feedback geben möchten, kontaktieren Sie uns unter clouddeploy-feedback-external@google.com.
Cloud Shell-Anleitung
Die Anleitungen in diesem Dokument sind auch in einer leicht verständlichen, Cloud Shell-basierten Anleitung enthalten. Weitere Informationen finden Sie in dieser Anleitung.
Umgebung einrichten
Erstellen Sie ein neues Projekt und legen Sie das Standardprojekt für die Google Cloud CLI fest.
Wir empfehlen, mit einem neuen Projekt zu beginnen.
gcloud config set project PROJECT_ID
Ersetzen Sie im obigen Befehl PROJECT_ID durch Ihre tatsächliche Projekt-ID. In diesem Dokument enthält Code (Befehle und Dateien)
{PROJECT_ID}
als Platzhalter. Wenn Sie sie hier ersetzen, werden alle Instanzen in diesem Dokument ausgefüllt, sofern Sie die Seite nicht aktualisieren.Aktivieren Sie die erforderlichen APIs:
gcloud services enable \ krmapihosting.googleapis.com \ clouddeploy.googleapis.com \ compute.googleapis.com \ run.googleapis.com
Mit diesem Befehl werden die folgenden APIs aktiviert, die Sie für diesen Test benötigen:
- Compute Engine
- Config Controller
- Google Cloud Deploy
- Cloud Build (über Google Cloud Deploy aktiviert)
- Cloud Storage (über Google Cloud Deploy aktiviert)
- Resource Manager
- Cloud Run
- Google Kubernetes Engine (über Config Controller aktiviert)
Prüfen Sie, ob die Google Cloud CLI installiert und konfiguriert wurde.
Außerdem müssen Sie kubectl installieren:
which kubectl || gcloud components install kubectl
Wenn Sie Befehle über Cloud Shell ausführen, sind diese Komponenten bereits für Sie installiert.
Compute Engine-Standarddienstkonto konfigurieren
Google Cloud Deploy verwendet standardmäßig das Compute Engine-Standarddienstkonto. Das Dienstkonto hat möglicherweise bereits die erforderlichen Berechtigungen. Dieser Schritt ist für Organisationen enthalten, die automatische Rollenzuweisungen für Standarddienstkonten deaktivieren.
Führen Sie die folgenden Befehle aus, damit das Dienstkonto die erforderlichen Berechtigungen hat:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer"
Übersicht über Google Cloud Deploy
Diese Übersicht hilft Ihnen, den Dienst und die Konzepte von Google Cloud Deploy zu verstehen.
Config Controller einrichten
Google Cloud Deploy verwendet eine Config Controller-Instanz, um Ihre Cloud Run-Dienste und -Überarbeitungen bereitzustellen.
Prüfen Sie vor dem Erstellen des Config Controllers, ob ein Standardnetzwerk vorhanden ist:
gcloud compute networks list
Eine erfolgreiche Konsolenausgabe sieht so aus:
NAME: default SUBNET_MODE: AUTO BGP_ROUTING_MODE: REGIONAL IPV4_RANGE: GATEWAY_IPV4:
Wenn Sie kein Standardnetzwerk haben, führen Sie den folgenden Befehl aus:
gcloud compute networks create default --subnet-mode=auto
Wenn die Ausgabe korrekt war, müssen Sie diesen Befehl nicht ausführen.
Wenn weitere Probleme auftreten, lesen Sie die Anleitung zur Fehlerbehebung im Config Controller oder wenden Sie sich an den Administrator Ihrer Organisation.
Erstellen Sie Ihre Config Controller-Instanz.
gcloud anthos config controller create cc-deployrun --location=us-central1
Gewähren Sie dem Config Controller Berechtigungen in den Projekten, in denen Sie die Bereitstellung vornehmen möchten. Mit dem folgenden Befehl erhalten Sie die minimalen Berechtigungen, die Config Controller zum Erstellen und Verwalten von Cloud Run-Diensten in Ihrem Projekt benötigt.
export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)" gcloud projects add-iam-policy-binding "PROJECT_ID" \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/run.admin" \ --project "PROJECT_ID" gcloud projects add-iam-policy-binding "PROJECT_ID" \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/iam.serviceAccountUser" \ --project "PROJECT_ID"
Konfigurationsdateien erstellen
Google Cloud Deploy verwendet Skaffold, um die Details für die Bereitstellung und die korrekte Bereitstellung für Ihre separaten Ziele bereitzustellen. Für diesen Test haben wir zwei Ziele: run-dev
und run-prod
.
In diesem Abschnitt erstellen Sie eine skaffold.yaml
-Datei, die die Cloud Run-Manifeste angibt, die Ihre Anwendung über eine Google Cloud Deploy-Bereitstellungspipeline bereitstellen. Außerdem erstellen Sie die Manifeste für Ihre Cloud Run-Dienste, jeweils eines für jede Zielumgebung (run-dev-service.yaml bzw. run-prod-service.yaml).
Erstellen Sie ein neues Verzeichnis für Ihre Manifeste und rufen Sie dieses Verzeichnis auf:
mkdir deploy-cloudrun cd deploy-cloudrun
Erstellen Sie die Datei
skaffold.yaml
in diesem Verzeichnis.skaffold.yaml
teilt Google Cloud Deploy mit, welche Manifeste für jedes Ziel in der Pipeline und für einen bestimmten Release bereitgestellt werden sollen.apiVersion: skaffold/v2beta26 kind: Config profiles: - name: prod deploy: kubectl: manifests: - run-prod-*.yaml - name: dev deploy: kubectl: manifests: - run-dev-*.yaml
Erstellen Sie die Datei
run-dev-service.yaml
im selben Verzeichnis.Dieses deklarative Manifest stellt die
dev
-Umgebungsversion Ihres Cloud Run-Dienstes dar.Notieren Sie sich die Einstellungen, die für diese Umgebung angepasst wurden. Sie können beispielsweise die Containerskalierung auf zwei Instanzen beschränken. Labels und ein Name werden zur Unterscheidung dieser Version des Dienstes in Ihrem Projekt verwendet. Der Image-Name ist eine Variable:
run-container
anstelle eines bestimmten Container-Images. Dieser wird durch ein bestimmtes Container-Image ersetzt, wenn Sie einen Release in Google Cloud Deploy erstellen.apiVersion: run.cnrm.cloud.google.com/v1beta1 kind: RunService metadata: labels: cloud-deploy-target: run-dev name: deploytest-dev namespace: config-control spec: ingress: INGRESS_TRAFFIC_ALL location: us-central1 projectRef: external: projects/PROJECT_ID template: containers: - env: - name: environment value: dev image: run-container scaling: maxInstanceCount: 2 traffic: - percent: 100 type: TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST
Erstellen Sie die Datei
run-prod-service.yaml
im selben Verzeichnis.Dieses Manifest stellt die
prod
-Version Ihres Cloud Run-Dienstes dar. Beachten Sie die aktualisierten Namen, Labels und Skalierungseinstellungen sowie die Wiederverwendung vonrun-container
.apiVersion: run.cnrm.cloud.google.com/v1beta1 kind: RunService metadata: labels: cloud-deploy-target: run-prod name: deploytest-prod namespace: config-control spec: ingress: INGRESS_TRAFFIC_ALL location: us-central1 projectRef: external: projects/PROJECT_ID template: containers: - env: - name: environment value: prod image: run-container scaling: maxInstanceCount: 10 traffic: - percent: 100 type: TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST
Lieferpipeline und Ziele erstellen
Sie können Ihre Bereitstellungspipeline und Ziele für Google Cloud Deploy in einer Datei oder in separaten Dateien definieren. Der Einfachheit halber erstellen Sie aus dieser Anleitung eine einzelne Datei.
Erstellen Sie im Verzeichnis mit den kürzlich erstellten Manifesten (
/deploy-cloudrun/
) die Dateiclouddeploy.yaml
:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-run-app-1 description: main application pipeline serialPipeline: stages: - targetId: run-dev profiles: - dev - targetId: run-prod profiles: - prod --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: run-dev description: Cloud Run development environment gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/krmapihost-cc-deployrun --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: run-prod description: Cloud Run production environment gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/krmapihost-cc-deployrun
cloudeploy.yaml
definiert eine Ablaufsequenz zwei Phasen in der Bereitstellungspipeline:run-dev
undrun-prod
. Die Datei definiert auch Ziele für jede dieser beiden Phasen.Beachten Sie, dass beide Ziele auf denselben Config Controller verweisen wie ein GKE-Cluster. Dieser Config Controller, der von einem zugrunde liegenden GKE-Cluster unterstützt wird, der beim Erstellen von Config Controller erstellt wird, erstellt die Cloud Run-Dienste für jede Umgebung mit dem entsprechenden Manifest.
Registrieren Sie die Bereitstellungspipeline und Ziele bei Google Cloud Deploy:
gcloud deploy apply --file clouddeploy.yaml --region=us-central1
Die Ausgabe sieht so aus:
Waiting for the operation on resource projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1...done. Created Cloud Deploy resource: projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1. Waiting for the operation on resource projects/sample-project/locations/us-central1/targets/run-dev...done. Created Cloud Deploy resource: projects/sample-project/locations/us-central1/targets/run-dev. Waiting for the operation on resource projects/sample-project/locations/us-central1/targets/run-prod...done. Created Cloud Deploy resource: projects/sample-project/locations/us-central1/targets/run-prod.
Release erstellen und Container bereitstellen
Nachdem die Konfigurationsdateien vorbereitet und die Bereitstellungspipeline und -ziele registriert wurden, können wir jetzt die Release-Ressource erstellen, die das bereitzustellende Container-Image darstellt. Wir verwenden einen Beispielcontainer, echoserver
, zur Bereitstellung:
gcloud deploy releases create run-release-001 --project=PROJECT_ID --region=us-central1 --delivery-pipeline=my-run-app-1 --labels="use-case=my-cloud-run-experiment" --images=run-container="us-docker.pkg.dev/cloudrun/container/hello"
Die Ausgabe sieht so aus:
Creating temporary tarball archive of 4 file(s) totalling 2.0 KiB before compression.
Uploading tarball of [.] to [gs://sample-project_clouddeploy_us-central1/source/1643560782.447815-aed1fdf4973b4d25b9b7d09ff9fbbaa9.tgz]
Waiting for operation [operation-1643560782826-5d6cf50a08a8d-e40f7a45-ac4aa0ae]...done.
Created Cloud Deploy release run-release-001.
Creating rollout projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1/releases/run-release-001/rollouts/run-release-001-to-run-dev-0001 in target run-dev...done.
Da dies der erste Release ist (Bereitstellung im ersten Ziel im Fortschritt), erstellt Google Cloud Deploy automatisch auch eine Rollout-Ressource und stellt die Anwendung im ersten Ziel im Fortschritt (run-dev
) bereit. Möglicherweise müssen Sie einige Minuten warten, bis der Roll-out abgeschlossen ist (Rollout-Status: SUCCEEDED
). Mit dem folgenden Befehl können Sie den Rollout-Status verfolgen:
gcloud deploy rollouts list --delivery-pipeline=my-run-app-1 --region=us-central1 --release run-release-001
Die Ausgabe sieht so aus:
approvalState: DOES_NOT_NEED_APPROVAL
createTime: '2022-02-10T21:25:11.228171Z'
deployEndTime: '2022-02-10T21:26:37.984888Z'
deployStartTime: '2022-02-10T21:26:09.778897390Z'
deployingBuild: projects/435050644073/locations/us-central1/builds/59f588d1-0cbc-4c46-9574-7e3f3b763ae6
enqueueTime: '2022-02-10T21:26:09.108240Z'
etag: 5f57d54f8b11d20e
name: projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1/releases/run-release-001/rollouts/run-release-001-to-run-dev-0001
state: SUCCEEDED
targetId: run-dev
uid: 9cab18e1dfea4054b7d182b707c21f75
Nachdem die Anwendung für das erste Ziel bereitgestellt wurde, können wir prüfen, ob der Cloud Run-Dienst (deploytest-dev
) wie erwartet ausgeführt wird:
gcloud run services list --region=us-central1
Die Ausgabe sieht so aus:
✔
SERVICE: deploytest-dev
REGION: us-central1
URL: https://deploytest-dev-k5kzux4u6a-uc.a.run.app
LAST DEPLOYED BY: service-435050644073@gcp-sa-yakima.iam.gserviceaccount.com
LAST DEPLOYED AT: 2022-01-30T04:25:13.081829Z
Release hochstufen
Nachdem die Anwendung im ersten Ziel (run-dev
) bereitgestellt wurde, können Sie sie mit dem folgenden Befehl hochstufen:
gcloud deploy releases promote --release=run-release-001 --delivery-pipeline=my-run-app-1 --region=us-central1 --project=PROJECT_ID
Die Ausgabe sieht so aus:
Promoting release run-release-001 to target run-prod.
Do you want to continue (Y/n)? Y
Creating rollout projects/sample-project/locations/us-central1/deliveryPipelines/my-run-app-1/releases/run-release-001/rollouts/run-release-001-to-run-prod-0001 in target run-prod...done.
Prüfen Sie anschließend noch einmal, ob der Cloud Run Prod-Dienst ausgeführt wird:
gcloud run services list --region=us-central1
Die Ausgabe sieht so aus:
✔
SERVICE: deploytest-dev
REGION: us-central1
URL: https://deploytest-dev-k5kzux4u6a-uc.a.run.app
LAST DEPLOYED BY: service-435050644073@gcp-sa-yakima.iam.gserviceaccount.com
LAST DEPLOYED AT: 2022-01-30T04:25:13.081829Z
✔
SERVICE: deploytest-prod
REGION: us-central1
URL: https://deploytest-prod-k5kzux4u6a-uc.a.run.app
LAST DEPLOYED BY: service-435050644073@gcp-sa-yakima.iam.gserviceaccount.com
LAST DEPLOYED AT: 2022-01-30T16:04:43.468907Z
Ergebnisse in der Cloud Deploy-Konsole ansehen
Wenn Sie sich den Release-Fortschritt in der Bereitstellungspipeline ansehen möchten, öffnen Sie die Google Cloud Deploy-Konsole und rufen Sie die Bereitstellungspipeline my-run-app-1
auf.
Release überprüfen
Sie können die Details des erstellten Release aufrufen, indem Sie in der Detailansicht der Bereitstellungspipeline in der Tabelle mit den Bereitstellungspipelines auf den entsprechenden Namen run-release-001
klicken.
In der Ansicht der Release-Details können Sie Assets wie den angegebenen Parameter (Container) (Build-Artefakte) und die gerenderten Dienstmanifeste weiter prüfen.
Roll-out prüfen
Jeder Roll-out ist auch auf der Seite „Release“ aufgeführt. Wenn Sie auf einen Roll-out-Namen klicken, werden die Roll-out-Details mit detaillierten Informationen zum Roll-out und den Rendering- und Bereitstellungslogs geöffnet.
Dienst in der Cloud Run Console ansehen
Mit den erstellten Dienstlogs in der Cloud Run-Konsole können Sie prüfen, ob der Dienst korrekt gestartet wurde.
Wettkampfübungen
Sie haben jetzt eine Bereitstellungspipeline für den Cloud Run-Dienst erstellt und einen Container aus einer Entwicklungsumgebung in eine Produktionsumgebung hochgestuft. Im Folgenden finden Sie eine Liste von Challenges, mit denen Sie die Bereitstellungspipelines von Cloud Run in Google Cloud Deploy weiter untersuchen können.
Fügen Sie der Bereitstellungspipeline eine Genehmigung für die Produktionsumgebung hinzu.
Konvertieren Sie einen Ihrer vorhandenen Cloud Run-Dienste in eine Bereitstellungspipeline von Google Cloud Deploy.
Parametrisieren Sie ein Cloud Run-Dienstmanifest für
dev
undprod
mit Kustomize. Weitere Informationen finden Sie in der Schritt-für-Schritt-Anleitung zu Google Cloud Deploy-Profilen.
Bereinigen
Wenn Sie diesen Test abgeschlossen haben, können Sie entweder Ihr Projekt löschen oder die Ressourcen im Projekt entfernen, um zu vermeiden, dass Ihrem Google Cloud-Konto für diese Ressourcen Gebühren in Rechnung gestellt werden.
Löschen Sie die über Config Controller bereitgestellten Cloud Run-Dienste direkt aus dem Cluster.
Wenn Sie den Namespace aus dem Config Controller-Cluster löschen, werden alle erstellten Cloud Run-Dienste gelöscht.
kubectl -n config-control delete runservice deploytest-dev
kubectl -n config-control delete runservice deploytest-prod
Löschen Sie den Config Controller:
gcloud anthos config controller delete cc-deployrun --location=us-central1 --project=PROJECT_ID
Löschen Sie die Lieferpipeline:
gcloud deploy delivery-pipelines delete my-run-app-1 --force --region=us-central1 --project=PROJECT_ID
Dadurch werden die Bereitstellungspipeline selbst sowie alle für diese Pipeline erstellten Release- und Rollout-Ressourcen gelöscht.
Löschen Sie die von Google Cloud Deploy erstellten Cloud Storage-Buckets mithilfe der Cloud Storage Console.
Storage-Buckets können durch Namenskonventionen wie
[PROJECT]_clouddeploy_[region]
und[region].deploy-artifacts.[project-id].appspot.com
sowie mit dem folgenden Befehl identifiziert werden:gsutil ls | egrep "_clouddeploy_|deploy-artifacts.PROJECT_ID.appspot.com" | xargs --max-lines=1 echo gsutil gsutil -m rm -r
Dadurch werden die auszuführenden Befehle ausgegeben, nachdem Sie die Liste der Buckets auf ihre Richtigkeit überprüft haben:
gsutil rb gs://PROJECT_ID_clouddeploy_us-central1/ gsutil rb gs://us-central1.deploy-artifacts.PROJECT_ID.appspot.com/