Auf dieser Seite wird erläutert, wie Sie mit Cloud Build eine Anwendung in Kubernetes bereitstellen.
Cloud Build bietet einen gke-deploy
-Builder, mit dem Sie eine Containeranwendung in einem GKE-Cluster bereitstellen können.
gke-deploy
ist ein Wrapper um kubectl
, die Befehlszeile für Kubernetes. Es wendet die von Google empfohlenen Vorgehensweisen für das Bereitstellen von Anwendungen in Kubernetes an, indem folgende Aktionen vorgenommen werden:
Aktualisieren der Kubernetes-Ressourcendatei der Anwendung, um den Digest des Container-Images anstelle eines Tags zu verwenden.
Hinzufügen von empfohlenen Labels zur Kubernetes-Ressourcendatei.
Abrufen der Anmeldedaten für die GKE-Cluster, in denen Sie das Image bereitstellen möchten.
Es wird auf die bereitgestellte Kubernetes-Ressourcendatei gewartet.
Wenn Sie Ihre Anwendungen direkt mit kubectl
bereitstellen möchten und keine zusätzlichen Funktionen benötigen, bietet Cloud Build auch einen kubectl
-Builder, mit dem Sie die Anwendungen in einem GKE-Cluster bereitstellen können.
Hinweis
Erstellen Sie einen GKE-Cluster, falls Sie noch keinen haben.
Halten Sie die containerisierte Anwendung in Form von Quellcode und einem
Dockerfile
bereit. Der Quellcode muss in einem Repository gespeichert sein, z. B. in Cloud Source Repositories, GitHub oder Bitbucket.Sie benötigen mindestens eine Kubernetes-Ressourcendatei, in der die Kubernetes-Ressourcen beschrieben sind, die zum Ausführen der Anwendung verwendet werden. Wenn Sie keine Kubernetes-Ressourcendateien haben, gehen Sie folgendermaßen vor, um eine Datei für die Anwendung zu erstellen:
- Öffnen Sie in der Google Cloud Console die Kubernetes Engine-Seite "Cluster".
- Klicken Sie auf der Seite mit den Kubernetes Engine-Clustern auf Bereitstellen.
- Wählen Sie Ihren Container aus und klicken Sie auf Weiter. Der Bereich "Konfiguration" wird angezeigt.
- Klicken Sie unter „YAML-Konfigurationsdatei“ auf YAML öffnen, um eine Beispielkonfigurationsdatei für Kubernetes zu erhalten.
Erforderliche IAM-Berechtigungen
Fügen Sie Ihrem Konto die Rolle "GKE-Entwickler" hinzu:
Öffnen Sie die Seite mit den Cloud Build-Einstellungen:
Zur Seite mit den Cloud Build-Einstellungen
Sie sehen die Seite Dienstkontoberechtigungen:
Setzen Sie den Status der Rolle Kubernetes Engine Developer (Kubernetes Engine-Entwickler) auf Enabled (Aktiviert).
Vorkonfiguriertes Containerimage bereitstellen
So stellen Sie eine bestimmte Version der Anwendung mit gke-deploy
bereit:
Achten Sie darauf, dass die Kubernetes-Konfigurationsdatei auf das richtige Containerimage-Tag oder -Digest verweist.
Fügen Sie den Schritt
gke-deploy
der Build-Konfigurationsdatei hinzu:YAML
steps: ... # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=kubernetes-resource-file - --location=location - --cluster=cluster
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=kubernetes-resource-file", "--location=location", "--cluster=cluster" ] } ] }
Wobei:
- kubernetes-resource-file ist der Dateipfad der Kubernetes-Ressourcendatei oder der Pfad zu dem Verzeichnis, das die Kubernetes-Ressourcendateien enthält.
- cluster ist der Name des GKE-Clusters, in dem die Anwendung bereitgestellt wird.
- location ist die Region/Zone des Clusters.
Weitere Informationen zu verfügbaren Flags finden Sie unter
gke-deploy run
-Flags.Starten Sie den Build:
gcloud builds submit --region=REGION --project=project-id --config build-config
Wobei:
- project-id ist die ID für Ihr Projekt.
- build-config ist der Name Ihrer Build-Konfigurationsdatei.
REGION
ist eine der unterstützten Build-Regionen.
Neues Containerimage erstellen und bereitstellen
So erstellen Sie ein neues Containerimage und stellen das neue Containerimage bereit:
Aktualisieren Sie die Kubernetes-Konfigurationsdatei mithilfe des Attributs
--image
mit dem neuen Containerimage:YAML
steps: # build the container image - name: "gcr.io/cloud-builders/docker" args: ["build", "-t", "gcr.io/project-id/image:tag", "."] # push container image - name: "gcr.io/cloud-builders/docker" args: ["push", "gcr.io/project-id/image:tag"] # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=kubernetes-resource-file - --image=gcr.io/project-id/image:tag - --location=location - --cluster=cluster
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "gcr.io/project-id/image:tag", "." ] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "push", "gcr.io/project-id/image:tag" ] }, { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=kubernetes-resource-file", "--image=gcr.io/project-id/image:tag", "--location=location", "--cluster=cluster" ] } ] }
Wobei:
- project-id ist die ID für Ihr Projekt.
- image ist der gewünschte Name des Container-Images, normalerweise der Anwendungsname.
- tag ist das Tag des Container-Images.
- Wenn Sie bei jedem Commit ein neues Container-Image erstellen, empfiehlt es sich, das Commit-Kürzel "SHA" als Tag zu verwenden. Cloud Build stellt dies als Standardsubstitution
$SHORT_SHA
zur Verfügung.
- Wenn Sie bei jedem Commit ein neues Container-Image erstellen, empfiehlt es sich, das Commit-Kürzel "SHA" als Tag zu verwenden. Cloud Build stellt dies als Standardsubstitution
- kubernetes-resource-file ist der Dateipfad der Kubernetes-Ressourcendatei oder der Pfad zu dem Verzeichnis, das die Kubernetes-Ressourcendateien enthält.
- cluster ist der Name des GKE-Clusters, in dem die Anwendung bereitgestellt wird.
- location ist die Region/Zone des Clusters, in dem die Anwendung bereitgestellt wird.
Starten Sie den Build:
gcloud builds submit --region=REGION --project=project-id --config build-config
Wobei:
- project-id ist die ID für Ihr Projekt.
- build-config ist der Name Ihrer Build-Konfigurationsdatei.
REGION
ist eine der unterstützten Build-Regionen.
Bereitstellungen automatisieren
Sie können die Bereitstellung Ihrer Anwendung in GKE automatisieren, indem Sie in Cloud Build einen Trigger erstellen. Sie können den Trigger so konfigurieren, dass Images erstellt und bereitgestellt werden, wenn Sie Änderungen an Ihrem Code per Push-Befehl übertragen.
So erstellen Sie einen Build-Trigger:
Öffnen Sie in der Google Cloud Console die Seite Trigger:
Wählen Sie oben auf der Seite im Drop-down-Menü zur Projektauswahl Ihr Projekt aus.
Klicken Sie auf Öffnen.
Klicken Sie auf Trigger erstellen.
Auf der Seite Erstellen Sie einen Trigger geben Sie die folgenden Einstellungen ein:
Geben Sie einen Namen für den Trigger ein.
Wählen Sie das Repository-Ereignis aus, das den Trigger aufrufen soll.
Wählen Sie das Repository aus, das Ihren Quellcode enthält, und erstellen Sie die Konfigurationsdatei.
Geben Sie den regulären Ausdruck für den Zweig- oder Tag-Namen an, mit dem der Trigger gestartet wird.
Wählen Sie eine Konfiguration für den Trigger aus.
Wenn Sie eine Cloud Build-Konfigurationsdatei auswählen, können Sie Substitutionsvariablen angeben. Stellen Sie dazu einen Variablennamen und den Wert bereit, den Sie mit dieser Variablen verknüpfen möchten. Im unteren Beispiel gibt die benutzerdefinierte Substitutionsvariable
_CLOUDSDK_CONTAINER_CLUSTER
den Cluster für die Bereitstellung und die benutzerdefinierte Substitutionsvariable_CLOUDSDK_COMPUTE_ZONE
dessen Standort an. Wenn Sie die Bereitstellung in einem anderen Cluster vornehmen möchten, können Sie dieselbe Build-Konfiguration verwenden und müssen nur die Werte der Substitutionsvariablen ändern:YAML
steps: ... # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=kubernetes-resource-file - --image=gcr.io/project-id/image:tag - --location=${_CLOUDSDK_COMPUTE_ZONE} - --cluster=${_CLOUDSDK_CONTAINER_CLUSTER}
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=kubernetes-resource-file", "--image=gcr.io/project-id/image:tag", "--location=${_CLOUDSDK_COMPUTE_ZONE}", "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}" ] } ] }
Wobei:
- kubernetes-resource-file ist der Dateipfad der Kubernetes-Konfigurationsdatei oder der Pfad zu dem Verzeichnis, das die Kubernetes-Ressourcendateien enthält.
- project-id ist die ID für Ihr Projekt.
- image ist der gewünschte Name des Container-Images, normalerweise der Anwendungsname.
- tag ist das Tag des Container-Images.
Weitere Informationen zum Definieren von Substitutionen für Build-Konfigurationsdateien finden Sie unter Benutzerdefinierte Substitutionen verwenden.
Klicken Sie auf Erstellen, um den Build-Trigger zu speichern.
Wenn Sie Code in Ihr Repository übertragen, löst Cloud Build automatisch einen Build aus. Weitere Informationen zu Build-Triggern finden Sie unter Build-Trigger erstellen und verwalten.
Nächste Schritte
- Automatisierte Bereitstellungen für Ihre Arbeitslasten in GKE konfigurieren
- CI-/CD-Pipeline im GitOps-Stil erstellen, die mit Cloud Build Bereitstellungen in GKE vornimmt
- Weitere Informationen zu
gke-deploy
-Optionen - Weitere Informationen zu Blau/Grün-Bereitstellungen in der Compute Engine
- Weitere Informationen zu Cloud-Buildern
- Build-Fehler beheben