Questo è un tutorial di base su come integrare Cloud Build con il gateway Connect, che ti consente di creare una pipeline CI/CD per i cluster GKE in esecuzione in molti ambienti diversi.
Questo tutorial presuppone che tu abbia familiarità con le sezioni precedenti della guida al gateway Connect e con Cloud Build. Queste istruzioni utilizzano l'immagine del builder cloud-sdk
, che richiede alcuni script minori (come vedrai di seguito).
Prima di iniziare
Assicurati di aver installato i seguenti strumenti a riga di comando:
- L'ultima versione di Google Cloud CLI, che include
gcloud
, lo strumento a riga di comando per interagire con Google Cloud. kubectl
, lo strumento a riga di comando per interagire con Kubernetes.
Se utilizzi Cloud Shell come ambiente shell per interagire con Google Cloud, questi strumenti vengono installati automaticamente.
- L'ultima versione di Google Cloud CLI, che include
Assicurati di aver inizializzato gcloud CLI per l'utilizzo con il tuo progetto.
Assicurati che il gateway Connect e le altre API richieste siano abilitati per il tuo progetto, come descritto nella guida alla configurazione.
1. Concedi ruoli IAM al account di servizio Cloud Build
Per impostazione predefinita, Cloud Build utilizza un service account Google Cloud per eseguire tutto il lavoro richiesto, con un indirizzo nel formato MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com
. Puoi trovare l'indirizzo email di questo account di servizio per il tuo progetto in Cloud Build - Impostazioni nella Google Cloud console.
Segui le istruzioni riportate in Concedere autorizzazioni IAM nella guida alla configurazione del gateway per concedere a questo account i ruoli richiesti nel tuo progetto.
2. Specifica i criteri RBAC per il account di servizio Cloud Build
Segui le istruzioni riportate in Configura i criteri RBAC nella guida alla configurazione del gateway per concedere al account di servizio Cloud Build le autorizzazioni appropriate su tutti i cluster che vuoi utilizzare.
Ti consigliamo vivamente di utilizzare Policy Controller per eseguire il deployment e la manutenzione dei criteri RBAC su più cluster.
3. Crea una pipeline Cloud Build
Il workflow Cloud Build richiede un file cloudbuild.yaml
per configurare la pipeline. Di seguito è riportato un semplice esempio che esegue il deployment di un manifest statico in due cluster diversi (un cluster GKE su Google Cloude uno su VMware). Puoi scoprire di più su come configurare una pipeline Cloud Build nella documentazione di Cloud Build.
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: Deploy to cluster on Google Cloud
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 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
Puoi inserire qualsiasi flusso di lavoro desiderato in myapp.yaml
per configurare i cluster. Ecco un esempio:
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
Una volta eseguito il push della configurazione nel repository Git, il flusso di lavoro Cloud Build esegue il deployment dell'applicazione richiesta nei cluster specificati. Puoi anche configurare Cloud Build per rilevare le modifiche nel repository Git collegato per attivare l'aggiornamento o l'installazione automatica dell'applicazione.
Utilizzo avanzato
Poiché utilizza i concetti standard di Cloud Build, puoi adattare e personalizzare ulteriormente il nostro esempio in base alle tue esigenze specifiche di CI/CD. In particolare, se vuoi creare un'immagine da zero ed eseguirne il deployment nella pipeline, puoi utilizzare la gke-deploy
modalità preparazione del builder. Ad esempio, la seguente configurazione di Cloud Build:
- Crea una build di un'immagine Docker dal Dockerfile nella radice del repository Git e la tagga con lo SHA Git.
- Esegue il push dell'immagine taggata in Container Registry del progetto.
- Prepara i manifest Kubernetes nella directory
manifest
impostando i tag immagine corretti e inserendo i manifest di output inoutput/expanded
. - Esegue il deployment in un cluster GKE on-premise utilizzando Connect Gateway.
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 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 output/expanded
Tieni presente che in questo esempio abbiamo dovuto creare un secret di pull delle immagini per autorizzare il cluster GKE on-premise a eseguire il pull delle immagini da Container Registry.
Per ulteriori idee sull'utilizzo di Cloud Build, consulta la documentazione di Cloud Build.