Implementar en GKE

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 se debe almacenar 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:

    1. Abre la página Clústeres de Kubernetes Engine en Google Cloud Console.
    2. En la página de clústeres de Kubernetes Engine, haz clic en Implementar.
    3. Selecciona tu contenedor y haz clic en Continuar. Verás la sección Configuración.
    4. 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:

  1. 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):

    Captura de pantalla de la página de permisos de la cuenta de servicio

  2. 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:

  1. Asegúrate de que el archivo de configuración de Kubernetes haga referencia a la etiqueta de imagen del contenedor o al resumen correctos.

  2. 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"
          ]
        }
      ]
    }
    

    Donde:

    • 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.

  3. Comienza la compilación con el siguiente comando:

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    Donde:

Compila e implementa una nueva imagen de contenedor

Para compilar una nueva imagen de contenedor y, luego, implementarla, haz lo siguiente:

  1. 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"
          ]
        }
      ]
    }
    

    Donde:

    • 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 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.
    • 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.
  2. Comienza la compilación con el siguiente comando:

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    Donde:

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:

  1. Abre la página Activadores en la consola de Google Cloud:

    Abrir la página Activadores

  2. Selecciona el proyecto en el menú desplegable del selector de proyectos, que se ubica en la parte superior de la página.

  3. Haz clic en Abrir.

  4. Haz clic en Crear activador.

    En la página Crear activador, ingresa la siguiente configuración:

    1. Ingresa un nombre para el activador.

    2. Selecciona el evento del repositorio para iniciar el activador.

    3. Selecciona el repositorio que contiene el código fuente y el archivo de configuración de compilación.

    4. Especifica la regex de la rama o el nombre de la etiqueta que iniciará tu activador.ee

    5. 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}"
            ]
          }
        ]
      }
      

      Donde:

      • 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.

  5. 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?