Desplegar en GKE

En esta página se explica cómo desplegar una aplicación en Kubernetes con Cloud Build.

Cloud Build proporciona un gke-deploy compilador que te permite desplegar una aplicación en contenedores en un clúster de GKE.

gke-deploy es un envoltorio de kubectl, la interfaz de línea de comandos de Kubernetes. Aplica las prácticas recomendadas de Google para desplegar aplicaciones en Kubernetes de la siguiente forma:

  • Actualizar el archivo de recursos de Kubernetes de la aplicación para usar el digest de la imagen del contenedor en lugar de una etiqueta.

  • Añadir etiquetas recomendadas al archivo de recursos de Kubernetes.

  • Obtener las credenciales de los clústeres de GKE en los que vas a desplegar la imagen.

  • Esperando a que esté listo el archivo de recursos de Kubernetes que se ha enviado.

Si quieres desplegar tus aplicaciones directamente con kubectl y no necesitas funciones adicionales, Cloud Build también ofrece un compilador de kubectl que puedes usar para desplegar tu aplicación en un clúster de GKE.

Antes de empezar

  • Crea un clúster de GKE si aún no tienes uno.

  • Ten lista tu aplicación en contenedores en forma de código fuente y un Dockerfile. El código fuente debe almacenarse en un repositorio, como Cloud Source Repositories, GitHub o Bitbucket.

  • Necesitará al menos un archivo de recursos de Kubernetes que describa los recursos de Kubernetes que se utilizan para ejecutar su aplicación. Si no tienes archivos de recursos de Kubernetes, sigue estos pasos para generar uno para tu aplicación:

    1. Abre la página de clústeres de Kubernetes Engine en la Google Cloud consola.
    2. En la página de clústeres de Kubernetes Engine, haz clic en Desplegar.
    3. Selecciona el contenedor y haz clic en Continuar. Verá la sección Configuración.
    4. En Configuración YAML, haz clic en Ver YAML para obtener un archivo de recursos de Kubernetes de ejemplo.

Permisos de gestión de identidades y accesos necesarios

Añade el rol Desarrollador de Google Kubernetes Engine a tu cuenta:

  1. En la Google Cloud consola, ve a la página Permisos de Cloud Build:

    Ve a Permisos.

  2. Define el estado del rol Desarrollador de Kubernetes Engine como Habilitado.

Desplegar una imagen de contenedor prediseñada

Para implementar una versión concreta de tu aplicación con gke-deploy, sigue estos pasos:

  1. Asegúrate de que el archivo de recursos de Kubernetes haga referencia a la etiqueta o al digest correctos de la imagen de contenedor.

  2. Añade 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 del archivo de recursos de Kubernetes o la ruta del directorio que contiene los archivos de recursos de Kubernetes.
    • cluster es el nombre del clúster de GKE en el que se desplegará la aplicación.
    • location es la región o la zona del clúster.

    Para obtener más información sobre las marcas disponibles, consulta las marcas gke-deploy run.

  3. Empieza a crear tu perfil:

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

    Donde:

Crear y desplegar una imagen de contenedor

Para crear una imagen de contenedor y desplegarla, haz lo siguiente:

  1. Actualiza el archivo de recursos 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 de tu proyecto.
    • image es el nombre que quieres asignar a la imagen del contenedor, normalmente el nombre de la aplicación.
    • tag es la etiqueta de la imagen del contenedor.
      • Si creas una imagen de contenedor con cada confirmación, es recomendable usar el SHA corto de la confirmación como etiqueta. Cloud Build lo pone a disposición como sustitución predeterminada, $SHORT_SHA.
    • kubernetes-resource-file es la ruta del archivo de recursos de Kubernetes o la ruta del directorio que contiene los archivos de recursos de Kubernetes.
    • cluster es el nombre del clúster de GKE en el que se desplegará la aplicación.
    • location es la región o zona en la que se desplegará el clúster.
  2. Empieza a crear tu perfil:

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

    Donde:

Automatizar los despliegues

Puedes automatizar el despliegue de tu aplicación en GKE creando un activador en Cloud Build. Puedes configurar activadores para compilar e 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 Triggers (Activadores) en la Google Cloud consola:

    Abre la página Activadores.

  2. Selecciona tu proyecto en el menú desplegable del selector de proyectos situado 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, introduzca los siguientes ajustes:

    1. Escribe 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 expresión regular del nombre de la rama o etiqueta que iniciará el activador.ee

    5. Elige una configuración para el activador.

      Si elige un archivo de configuración de Cloud Build, puede especificar variables de sustitución proporcionando un nombre de variable y el valor que quiera asociar a esa variable. En el ejemplo de abajo, la variable de sustitución definida por el usuario _CLOUDSDK_CONTAINER_CLUSTER especifica el clúster en el que se va a implementar y la variable de sustitución definida por el usuario _CLOUDSDK_COMPUTE_ZONE especifica su ubicación. Si quieres implementar en otro clúster, puedes usar la misma configuración de compilación y solo tienes que cambiar los valores de las variables de sustitución:

      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 del archivo de configuración de Kubernetes o la ruta del directorio que contiene los archivos de recursos de Kubernetes.
      • project-id es el ID de tu proyecto.
      • image es el nombre que quieres asignar a la imagen del contenedor, que suele ser el nombre de la aplicación.
      • tag es la etiqueta de la imagen del contenedor.

      Para obtener más información sobre cómo definir sustituciones para archivos de configuración de compilación, consulta el artículo Usar 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á automáticamente una compilación. Para obtener más información sobre los activadores de compilación, consulta el artículo Crear y gestionar activadores de compilación.

Siguientes pasos