Este es un tutorial básico sobre cómo integrar Cloud Build con la pasarela Connect, lo que te permite crear un flujo de procesamiento de CI/CD para clústeres de GKE que se ejecutan en muchos entornos diferentes.
En este tutorial se da por hecho que conoces las secciones anteriores de la guía de la pasarela Connect y que estás familiarizado con Cloud Build. En estas instrucciones se usa la cloud-sdk
imagen de compilación, que requiere un poco de scripting (como verás más abajo).
Antes de empezar
Asegúrate de que tienes instaladas las siguientes herramientas de línea de comandos:
- La versión más reciente de Google Cloud CLI, que incluye
gcloud
, la herramienta de línea de comandos para interactuar con Google Cloud. kubectl
, la herramienta de línea de comandos para interactuar con Kubernetes.
Si usas Cloud Shell como entorno de shell para interactuar con Google Cloud, estas herramientas ya están instaladas.
- La versión más reciente de Google Cloud CLI, que incluye
Asegúrate de haber inicializado gcloud CLI para usarlo con tu proyecto.
Asegúrate de que la pasarela Connect y otras APIs necesarias estén habilitadas en tu proyecto, tal como se describe en la guía de configuración.
1. Asignar roles de gestión de identidades y accesos a la cuenta de servicio de Cloud Build
De forma predeterminada, Cloud Build usa una Google Cloud cuenta de servicio para ejecutar todo el trabajo necesario, con una dirección en el formato MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com
. Puedes encontrar la dirección de correo de esta cuenta de servicio de tu proyecto en Cloud Build > Configuración en la Google Cloud consola.
Sigue las instrucciones de la sección Conceder permisos de gestión de identidades y accesos de la guía de configuración de la pasarela para conceder a esta cuenta los roles necesarios en tu proyecto.
2. Especificar políticas de RBAC para la cuenta de servicio de Cloud Build
Sigue las instrucciones de la sección Configurar políticas de RBAC de la guía de configuración de la pasarela para dar a la cuenta de servicio de Cloud Build los permisos adecuados en todos los clústeres que quieras usar.
Te recomendamos que uses Policy Controller para implementar y mantener políticas de RBAC en varios clústeres.
3. Crear una canalización de Cloud Build
El flujo de trabajo de Cloud Build necesita un archivo cloudbuild.yaml
para configurar la canalización. A continuación, se muestra un ejemplo sencillo que despliega un manifiesto estático en dos clústeres diferentes (un clúster de GKE en Google Cloudy otro en VMware). Puedes consultar más información sobre cómo configurar una canalización de Cloud Build en la documentación de 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
Puedes poner cualquier flujo de trabajo que quieras en myapp.yaml
para configurar clústeres. A continuación se muestra un ejemplo:
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 vez que insertes la configuración en tu repositorio de Git, el flujo de trabajo de Cloud Build desplegará la aplicación necesaria en los clústeres especificados. También puedes configurar Cloud Build para que detecte los cambios en el repositorio de Git vinculado y active la actualización o la instalación automatizadas de la aplicación.
Uso avanzado
Como usa conceptos estándar de Cloud Build, puedes adaptar y personalizar aún más nuestro ejemplo para que se ajuste a tus necesidades concretas de CI/CD. En concreto, si quieres crear una imagen desde cero e implementarla en tu canalización, puedes usar el modo de preparación del compilador gke-deploy
. Por ejemplo, la siguiente configuración de Cloud Build:
- Compila una imagen de Docker a partir del Dockerfile de la raíz del repositorio de Git y la etiqueta con el SHA de Git.
- Envía la imagen etiquetada al Container Registry del proyecto.
- Prepara los manifiestos de Kubernetes en el directorio
manifest
. Para ello, define las etiquetas de imagen correctas y coloca los manifiestos de salida enoutput/expanded
. - Se despliega en un clúster de GKE on-premise mediante la pasarela de conexión.
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
Ten en cuenta que, en este ejemplo, hemos tenido que crear un secreto de extracción de imágenes para autorizar al clúster de GKE local a extraer imágenes de Container Registry.
Para obtener más ideas sobre el uso de Cloud Build, consulta la documentación de Cloud Build.