Connect-Gateway in Cloud Build einbinden
Dies ist eine einfache Anleitung zur Einbindung von Cloud Build in das Connect-Gateway, mit dem Sie eine CI/CD-Pipeline für GKE-Cluster erstellen können, die in vielen verschiedenen Umgebungen ausgeführt werden.
In dieser Anleitung wird davon ausgegangen, dass Sie mit den vorherigen Abschnitten im Leitfaden zum Connect-Gateway vertraut sind und mit Cloud Build vertraut sind. In dieser Anleitung wird das cloud-sdk
-Builder-Image verwendet, für das ein paar Skripts erforderlich sind (siehe unten).
Hinweise
Prüfen Sie, ob die folgenden Befehlszeilentools installiert sind:
- Die neueste Version der Google Cloud CLI, die
gcloud
, das Befehlszeilentool für die Interaktion mit Google Cloud, enthält. kubectl
Wenn Sie Cloud Shell als Shell-Umgebung für die Interaktion mit Google Cloud verwenden, sind diese Tools für Sie installiert.
- Die neueste Version der Google Cloud CLI, die
Achten Sie darauf, dass die gcloud CLI für die Verwendung mit Ihrem Projekt initialisiert wurde.
Achten Sie darauf, dass das Connect-Gateway und andere erforderliche APIs für Ihr Projekt aktiviert sind, wie im Einrichtungsleitfaden beschrieben.
1. IAM-Rollen dem Cloud Build-Dienstkonto zuweisen
Standardmäßig verwendet Cloud Build ein Google Cloud-Dienstkonto, um alle erforderlichen Aufgaben mit einer Adresse im Format MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com
auszuführen. Diese Dienstkonto-E-Mail-Adresse für Ihr Projekt finden Sie in der unter Cloud Build > Einstellungen in der Google Cloud Console.
Folgen Sie der Anleitung unter IAM-Berechtigungen erteilen im Einrichtungsleitfaden für das Gateway, um diesem Konto die erforderlichen Rollen in Ihrem Projekt zu gewähren.
2. RBAC-Richtlinien für das Cloud Build-Dienstkonto angeben
Folgen Sie der Anleitung unter RBAC-Richtlinien konfigurieren im Leitfaden zur Einrichtung des Gateways, um dem Cloud Build-Dienstkonto die entsprechenden Berechtigungen für alle Cluster zu erteilen, die Sie verwenden möchten.
Es wird dringend empfohlen, RBAC-Richtlinien in mehreren Clustern mithilfe von Policy Controller bereitzustellen und zu verwalten.
3. Cloud Build-Pipeline erstellen
Der Cloud Build-Workflow benötigt eine cloudbuild.yaml
-Datei zum Konfigurieren der Pipeline. Im Folgenden finden Sie ein einfaches Beispiel, in dem ein statisches Manifest in zwei verschiedenen Clustern bereitgestellt wird (einem GKE-Cluster und einem GKE-Cluster auf VMware). Weitere Informationen zum Konfigurieren einer Cloud Build-Pipeline finden Sie in der Cloud Build-Dokumentation.
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: Deploy to GKE cluster
args:
- '-c'
- |
set -x && \
export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
gcloud container fleet memberships get-credentials my-gke-cluster && \
kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: Deploy to Anthos cluster on VMware
args:
- '-c'
- |
set -x && \
export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
gcloud container fleet memberships get-credentials my-vmware-cluster && \
kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
Sie können einen beliebigen Workflow in myapp.yaml
festlegen, um Cluster zu konfigurieren. Hier ein Beispiel:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Sobald Sie Ihre Konfiguration per Push in Ihr Git-Repository übertragen haben, stellt der Cloud Build-Workflow die erforderliche Anwendung für die angegebenen Cluster bereit. Sie können Cloud Build auch so einrichten, dass Änderungen im verknüpften Git-Repository erkannt werden, um eine automatische Aktualisierung oder Installation einer Anwendung auszulösen.
Fortgeschrittene Nutzung
Da darin standardmäßige Cloud Build-Konzepte verwendet werden, können Sie unser Beispiel weiter an Ihre spezifischen CI-/CD-Anforderungen anpassen. Wenn Sie ein Image von Grund auf erstellen und in Ihrer Pipeline bereitstellen möchten, können Sie den Vorbereitungsmodus des gke-deploy
-Builders verwenden. Beispiel: Die folgende Cloud Build-Konfiguration:
- Erstellt ein Docker-Image aus dem Dockerfile im Stammverzeichnis des Git-Repositories und kennzeichnet es mit dem Git-SHA.
- Sendet das getaggte Image per Push an die Container Registry des Projekts.
- Bereiten Sie die Kubernetes-Manifeste im Verzeichnis
manifest
vor, indem Sie die richtigen Image-Tags festlegen und die Ausgabemanifeste inoutput/expanded
setzen. - Bereitstellungen in einem lokalen GKE-Cluster mithilfe des Connect-Gateways.
steps:
- name: 'gcr.io/cloud-builders/docker'
id: "Build Container"
args: ['build', '--tag=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
id: "Push to GCR"
args: ['push', 'gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA']
- name: "gcr.io/cloud-builders/gke-deploy"
id: "Prepare Manifests"
args:
- prepare
- --filename=manifests/
- --image=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: "Deploy to Anthos clusters on VMware"
args:
- '-c'
- |
set -x && \
export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
gcloud container fleet memberships get-credentials my-vmware-cluster && \
kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded
Beachten Sie, dass in diesem Beispiel ein Image-Pull-Secret erstellt werden musste, um den lokalen GKE-Cluster zum Abrufen von Images aus Container Registry zu autorisieren.
Weitere Ideen zur Nutzung von Cloud Build finden Sie in der Cloud Build-Dokumentation.