En esta página, se explica cómo implementar una aplicación en Kubernetes con Cloud Build.
Cloud Build proporciona un compilador de gke-deploy
que te permite implementar una aplicación en contenedores en un clúster de GKE.
gke-deploy
es un wrapper en torno a kubectl
, la interfaz de línea de comandos para Kubernetes. Aplica las prácticas recomendadas de Google para implementar aplicaciones en Kubernetes de la siguiente manera:
Actualiza el archivo de recursos de Kubernetes de la aplicación para usar el resumen de la imagen del contenedor en lugar de una etiqueta
Agrega etiquetas recomendadas al archivo de recursos de Kubernetes.
Recupera las credenciales de los clústeres de GKE en los que estés implementando la imagen.
Espera que el archivo de recurso de Kubernetes que se envió esté listo.
Si deseas implementar tus aplicaciones directamente mediante kubectl
y no necesitas funcionalidad adicional, Cloud Build también proporciona un compilador de kubectl
que puedes usar para implementar tu aplicación en un clúster de GKE.
Antes de comenzar
Crea un Clúster de GKE, si todavía no tienes uno.
Ten tu aplicación en contenedores en forma de código fuente y un
Dockerfile
listo. Tu código fuente debe almacenarse en un repositorio, como Cloud Source Repositories, GitHub o Bitbucket.Necesitarás al menos un archivo de recurso de Kubernetes que describa los recursos de Kubernetes que se usaron para ejecutar la aplicación. Si no tienes archivos de recurso de Kubernetes, sigue estos pasos a fin de generar uno para tu aplicación:
- Abre la página Clústeres de Kubernetes Engine en Google Cloud Console.
- En la página de clústeres de Kubernetes Engine, haz clic en Implementar.
- Selecciona tu contenedor y haz clic en Continuar. Verás la sección Configuración.
- En YAML de configuración, haz clic en Ver YAML para obtener un ejemplo del archivo de configuración de Kubernetes.
Permisos de IAM obligatorios
Agrega la función de programador de Google Kubernetes Engine a tu cuenta:
Abre la página Configuración (Settings) de Cloud Build:
Abrir la página Configuración (Settings) de Cloud Build
Verás la página Permisos de cuenta de servicio (Service account permissions):
Configura el estado de la función Programador de Kubernetes Engine (Kubernetes Engine Developer) como Habilitado (Enabled).
Implementa una imagen de contenedor compilada previamente
Para implementar una versión específica de tu aplicación con gke-deploy
, sigue estos pasos:
Asegúrate de que el archivo de configuración de Kubernetes haga referencia a la etiqueta de imagen del contenedor o al resumen correctos.
Agrega el paso
gke-deploy
en tu archivo de configuración de compilación: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" ] } ] }
Aquí:
- kubernetes-resource-file es la ruta de acceso al archivo de recurso de Kubernetes o la ruta de acceso al directorio que contiene tus archivos de configuración de Kubernetes.
- cluster es el nombre del clúster de GKE en el que se implementará la aplicación.
- location es la región o zona del clúster
Para obtener más información sobre las marcas disponibles, consulta las marcas
gke-deploy run
.Comienza la compilación con el siguiente comando:
gcloud builds submit --region=REGION --project=project-id --config build-config
Aquí:
- project-id es el ID del proyecto.
- build-config es el nombre de tu archivo de configuración de compilación.
REGION
es una de las regiones de compilación compatibles.
Compila e implementa una nueva imagen de contenedor
Para compilar una nueva imagen de contenedor y, luego, implementarla, haz lo siguiente:
Actualiza el archivo de configuración de Kubernetes con la nueva imagen de contenedor mediante el atributo
--image
: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" ] } ] }
Aquí:
- project-id es el ID del proyecto.
- image es el nombre deseado de la imagen de contenedor, suele ser el nombre de la aplicación.
- tag es la etiqueta de la imagen del contenedor.
- Si compilas una imagen de contenedor nueva con cada confirmación, se recomienda usar el SHA corto de confirmación como una etiqueta. Cloud Build lo pone a disposición como una sustitución predeterminada,
$SHORT_SHA
.
- Si compilas una imagen de contenedor nueva con cada confirmación, se recomienda usar el SHA corto de confirmación como una etiqueta. Cloud Build lo pone a disposición como una sustitución predeterminada,
- kubernetes-resource-file es la ruta de acceso al archivo de recurso de Kubernetes o la ruta de acceso al directorio que contiene tus archivos de configuración de Kubernetes.
- cluster es el nombre del clúster de GKE en el que se implementará la aplicación.
- location es la región o zona en la que se implementará el clúster.
Comienza la compilación con el siguiente comando:
gcloud builds submit --region=REGION --project=project-id --config build-config
Aquí:
- project-id es el ID del proyecto.
- build-config es el nombre de tu archivo de configuración de compilación.
REGION
es una de las regiones de compilación admitidas.
Automatiza implementaciones
Puedes automatizar la implementación de tu aplicación en GKE si creas un activador en Cloud Build. Puedes configurar activadores para compilar y, luego, implementar imágenes cada vez que envíes cambios a tu código.
Para crear un activador de compilación, sigue estos pasos:
Abre la página Activadores en la consola de Google Cloud:
Selecciona el proyecto en el menú desplegable del selector de proyectos, que se ubica en la parte superior de la página.
Haz clic en Abrir.
Haz clic en Crear activador.
En la página Crear activador, ingresa la siguiente configuración:
Ingresa un nombre para el activador.
Selecciona el evento del repositorio para iniciar el activador.
Selecciona el repositorio que contiene el código fuente y el archivo de configuración de compilación.
Especifica la regex de la rama o el nombre de la etiqueta que iniciará tu trigger.ee
Elige una Configuración para el activador.
Si eliges un archivo de configuración de Cloud Build, puedes especificar Variables de sustitución cuando proporciones un nombre de variable y el valor que deseas asociar con esa variable. En el siguiente ejemplo, la variable de sustitución
_CLOUDSDK_CONTAINER_CLUSTER
definida por el usuario especifica el clúster en el que se implementará, y la variable de sustitución definida_CLOUDSDK_COMPUTE_ZONE
por el usuario especifica su ubicación. Si deseas implementar en un clúster diferente, puedes usar la misma configuración de compilación y solo tienes que cambiar los valores de las variables de sustitución con el siguiente comando: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}" ] } ] }
Aquí:
- kubernetes-resource-file es la ruta de acceso al archivo de configuración de Kubernetes o la ruta de acceso al directorio que contiene tus archivos de configuración de Kubernetes.
- project-id es el ID del proyecto.
- image es el nombre deseado de la imagen de contenedor, suele ser el nombre de la aplicación.
- tag es la etiqueta de la imagen de contenedor.
Si quieres obtener más información sobre cómo definir sustituciones para los archivos de configuración de compilación, consulta Usa sustituciones definidas por el usuario.
Haz clic en Crear para guardar el activador de compilación.
Cuando envíes código a tu repositorio, Cloud Build activará una compilación de manera automática. Para obtener más información sobre los activadores de compilación, consulta Crea y administra activadores de compilación.
¿Qué sigue?
- Aprende a configurar implementaciones automatizadas para tus cargas de trabajo en GKE.
- Aprende a crear una canalización de CI/CD al estilo de GitOps que se implementa en GKE con Cloud Build.
- Obtén más información sobre las opciones de
gke-deploy
adicionales. - Aprende a realizar implementaciones azul-verde en Compute Engine.
- Obtén información sobre compiladoras de Cloud adicionales.
- Obtén más información para solucionar errores de compilación.