CI/CD modernas con GKE: aplicar el flujo de trabajo de desarrollo

Last reviewed 2023-09-11 UTC

En este tutorial se muestra cómo incorporar una nueva aplicación, desarrollar una función para la aplicación y desplegarla en producción mediante técnicas modernas de integración continua y entrega continua (CI/CD) con Google Kubernetes Engine (GKE).

Este documento forma parte de una serie:

En este tutorial, usarás herramientas como Skaffold, kustomize, Artifact Registry, Config Sync, Cloud Build y Cloud Deploy para desarrollar, compilar y desplegar tu aplicación.

Este documento está dirigido a arquitectos empresariales y desarrolladores de aplicaciones, así como a equipos de seguridad de TI, DevOps y Site Reliability Engineering (SRE). Tener experiencia con herramientas y procesos de implementación automatizada es útil para entender los conceptos de este documento.

Arquitectura

En este tutorial, incorporará una nueva aplicación. Después, desarrollas una nueva función y despliegas la aplicación en los entornos de desarrollo, de preproducción y de producción. La arquitectura de referencia contiene la infraestructura y las herramientas necesarias para incorporar y lanzar una nueva aplicación con el flujo de trabajo que se muestra en el siguiente diagrama:

El bucle de desarrollo abarca repositorios de código y flujos de trabajo de Cloud Build y Cloud Deploy.

El flujo de trabajo, que empieza en el repositorio de código de la integración continua, incluye los siguientes pasos:

  1. Compartes el código fuente de tu aplicación a través de los repositorios de la aplicación.

  2. Cuando confirmas y envías el código al repositorio de la aplicación, se activa automáticamente una canalización de integración continua en Cloud Build. El proceso de integración continua crea y envía una imagen de contenedor a Artifact Registry.

  3. El proceso de integración continua también crea una versión de entrega continua para la aplicación en Cloud Deploy.

  4. La versión de CD genera archivos de manifiesto de Kubernetes totalmente renderizados para el desarrollo mediante skaffold y los despliega en el clúster de GKE de desarrollo.

  5. A continuación, la versión de CD se promociona de desarrollo a un destino de staging, que genera manifiestos de staging totalmente renderizados y los despliega en el clúster de GKE de staging.

  6. A continuación, la versión de CD se promociona de la fase de pruebas a la de producción, lo que genera manifiestos de producción totalmente renderizados y los despliega en clústeres de GKE de producción.

Para obtener más información sobre las herramientas y la infraestructura que se usan en este flujo de trabajo, consulta el artículo CI/CD modernas con GKE: crear un sistema de CI/CD.

Objetivos

  • Incorporar una nueva aplicación.

  • Despliega la aplicación en el entorno de desarrollo.

  • Desarrollar una nueva función y desplegarla en el entorno de desarrollo.

  • Promociona la nueva función al entorno de pruebas y, a continuación, lánzala en producción.

  • Prueba la resiliencia de la aplicación.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.

Antes de empezar

Prepara tu entorno

  1. Si vas a continuar directamente desde CI/CD modernas con GKE: crear un sistema de CI/CD, ve a la siguiente sección. Sin embargo, si tienes una sesión nueva o tu sesión ha caducado, abre Cloud Shell y define el proyecto en el que has instalado la infraestructura de la arquitectura de referencia:

    gcloud config set core/project PROJECT_ID

    Sustituye PROJECT_ID por el ID de tu proyecto. Google Cloud

Incorporar una aplicación nueva

La arquitectura de referencia contiene una fábrica de aplicaciones. Esta fábrica es una colección de un repositorio de Git llamado application-factory-repo y los siguientes activadores de Cloud Build:

  • create-app
  • tf-plan
  • tf-apply
  • create-team

Utilizas la fábrica de aplicaciones para incorporar una nueva aplicación a partir de repositorios de inicio. El proceso de incorporación de aplicaciones consta de los siguientes pasos:

  1. Crea la definición de la aplicación: crea la definición de la aplicación en un archivo de Terraform y la almacena en application-factory-repo, que actúa como catálogo de aplicaciones.

  2. Crea la infraestructura de la aplicación: ejecuta Terraform en el archivo de definición de la aplicación para crear la infraestructura de la aplicación. La infraestructura de la aplicación consta de lo siguiente:

    1. Una zona de aterrizaje de la nueva aplicación incluye la definición del espacio de nombres, la cuenta de servicio y las políticas base en el repositorio acm-gke-infrastructure-repo. La zona de aterrizaje solo se crea en un clúster de GKE de desarrollo al incorporar una aplicación nueva. Esto se hace para que los desarrolladores puedan usar el entorno de desarrollo y empezar a iterar en él. La zona de aterrizaje de los clústeres de staging y producción se crea con el enfoque de GitOps. Este enfoque se muestra más adelante en este documento, cuando esté listo para promocionar la versión en esos clústeres.

    2. El repositorio de infraestructura del repositorio de inicio de infraestructura que aloja el código para crear la canalización de CI en Cloud Build, la canalización de CD en Cloud Deploy y el repositorio de Artifact Registry para almacenar artefactos.

    3. Un activador de Cloud Build de infraestructura que toma el código del repositorio de infraestructura y crea los recursos en función de su definición.

    4. Un repositorio de aplicaciones del repositorio de inicio de aplicaciones que aloja el código fuente de la aplicación.

  3. Crear recursos de CI/CD de la aplicación: usa la infraestructura de la aplicación para crear recursos de CI/CD para la aplicación.

Crea una definición de aplicación:

Ejecuta el activador create-app para generar un archivo de definición de aplicación en application-factory-repo. El archivo de definición contiene la definición declarativa de los recursos necesarios para crear una aplicación.

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

    Ir a la página Cloud Build

  2. Haz clic en create-app activador.

  3. Haga clic en MOSTRAR VISTA PREVIA DE LA URL para ver la URL necesaria para invocar el webhook.

  4. En Cloud Shell, invoca el activador haciendo una solicitud curl en la URL obtenida en el paso anterior y pasando los parámetros como una carga útil.

    curl "WEBHOOK_URL" -d '{"message": {"app": "sample","runtime": "python","trigger_type": "webhook","github_team": ""}}'

    En el ejemplo de código anterior:

    • Sustituye WEBHOOK_URL por la URL obtenida del activador.

    • "app": "sample" especifica el nombre de la aplicación.

    • "runtime": "python" indica a la fábrica de aplicaciones que use la plantilla de Python para crear repositorios de aplicaciones.

    • "trigger_type": "webhook" especifica el tipo de flujos de procesamiento de CI/CD de la aplicación.

    • "github_team": "" es un equipo de GitHub que se asociará a los repositorios que se creen para la aplicación. Como aún no has creado ningún equipo de GitHub, pásalo como una cadena vacía.

  5. Comprueba si el flujo de trabajo tiene el activador create-app:

    Ve a la página Historial de Cloud Build.

    Hay una nueva canalización para el activador create-app. Cuando se haya completado, la definición de la aplicación se creará en application-factory-repo.

  6. Revisa el archivo de definición de la aplicación:

    1. En un navegador web, ve a GitHub e inicia sesión en tu cuenta.

    2. Haz clic en el icono de imagen y, a continuación, en Your organizations. Elige tu organización.

    3. Haz clic en el repositorio application-factory-repo, ve a la carpeta apps/python y abre el archivo nuevo llamado sample.tf que ha creado el activador create-app. Inspecciona el archivo. Contiene código de Terraform para crear una aplicación.

Crea la infraestructura de la aplicación:

Ahora que has creado la definición de la aplicación, ejecuta el activador tf-apply para crear la infraestructura de la aplicación.

  1. En la consola: Google Cloud

    Ve a la página Cloud Build .

    Haz clic en el activador tf-apply.

  2. Haz clic en "MOSTRAR VISTA PREVIA DE LA URL" para ver la URL necesaria para invocar el webhook.

  3. Invoca el activador:

    curl "WEBHOOK_URL" -d '{}'

    En el ejemplo de código anterior:

    • Sustituye WEBHOOK_URL por la URL obtenida del activador.
  4. Comprueba si el flujo de trabajo tiene el activador tf-apply:

    Ve a la página Historial de Cloud Build.

    Hay una nueva canalización para el activador tf-apply. Espera a que se complete.

Este activador crea la infraestructura de la aplicación.

Revisa la infraestructura de la aplicación:

Revisa los distintos componentes de la infraestructura de la aplicación.

Zona de aterrizaje

  1. Ve a Cloud Shell y configura el proyecto.

    gcloud config set core/project PROJECT_ID

    Sustituye PROJECT_ID por el ID de tu proyecto. Google Cloud

  2. Obtén las credenciales del clúster de GKE de desarrollo.

    gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a
    
  3. Comprueba el espacio de nombres de la aplicación. El espacio de nombres se llama como la aplicación, sample.

    kubectl get namespaces sample
    

    La salida es similar a la siguiente:

    NAME     STATUS   AGE
    sample   Active   15m
    

  4. Comprueba la cuenta de servicio en el espacio de nombres.

    kubectl get serviceaccounts -n sample
    

    Hay una cuenta de servicio además de la predeterminada. La salida es similar a la siguiente:

    NAME         SECRETS   AGE
    default      0         15m
    sample-ksa   0         15m
    

Repositorio de infraestructura

En un navegador web, ve a GitHub e inicia sesión en tu cuenta. Haz clic en el icono de imagen. A continuación, haz clic en Your organizations. Elige tu organización y haz clic en el repositorio sample-infra.

Este repositorio tiene cuatro ramas: cicd-trigger, dev, staging y prod. También contiene cuatro carpetas: cicd-trigger, dev, staging y prod. La rama predeterminada es cicd-trigger y puedes enviar el código a ella, mientras que otras ramas tienen reglas de protección, por lo que no puedes enviar código directamente a esas ramas. Para enviar el código a esas ramas, debes crear una solicitud de extracción. La carpeta cicd-trigger contiene código para crear recursos de CI/CD para la aplicación, mientras que las carpetas dev, staging y prod contienen código para crear infraestructura para diferentes entornos de la aplicación.

Activador de infraestructura

  • En la consola: Google Cloud

    Ir a la página Cloud Build

    Hay un nuevo activador llamado deploy-infra-sample.

  • Este activador está conectado al repositorio sample-infra de forma que, cuando se envía código a este repositorio, se invoca el activador, que identifica la rama en la que se ha enviado el código, va a la carpeta correspondiente de esa rama y ejecuta Terraform allí. Por ejemplo, si el código se inserta en la rama cicd-trigger, el activador ejecuta Terraform en la carpeta cicd-trigger de la rama cicd-trigger. Del mismo modo, cuando se envía un push a la rama dev, el activador ejecuta Terraform en la carpeta de desarrollo de la rama de desarrollo, y así sucesivamente.

Repositorio de aplicaciones

  • Ve a GitHub y consulta los repositorios de tu organización. Hay un nuevo repositorio con el nombre sample. Este repositorio aloja el código fuente y los pasos para compilar contenedores en configuraciones Dockerfile y kustomize que describen las configuraciones necesarias de la aplicación, así como skaffold.yaml, que define los pasos de implementación que debe usar Cloud Deploy para la integración continua.

Crear recursos de CI/CD de aplicaciones

Ahora que has creado la estructura de la aplicación, ejecuta el activador deploy-infra-sample para crear sus recursos de CI/CD. Puedes invocar el activador manualmente mediante su URL de webhook o haciendo un commit en el repositorio de Git sample-infra.

  1. Para invocar el activador de Cloud Build, añade una línea a un archivo del repositorio. A continuación, envía los cambios:

    1. Si nunca has usado Git en Cloud Shell, configúralo con tu nombre y tu dirección de correo electrónico. Git usa esta información para identificarte como autor de las confirmaciones que creas en Cloud Shell:

      git config --global user.email "GITHUB_EMAIL_ADDRESS"
      git config --global user.name "GITHUB_USERNAME"

      Haz los cambios siguientes:

      • GITHUB_EMAIL_ADDRESS: la dirección de correo asociada a tu cuenta de GitHub
      • GITHUB_USERNAME: el nombre de usuario asociado a tu cuenta de GitHub
    2. Clona el repositorio de Git sample-infra:

      git clone https://github.com/GITHUB_ORG/sample-infra
      
      cd sample-infra

      Haz los cambios siguientes:

      • GITHUB_ORG con tu organización de GitHub.

      Se ha extraído la rama predeterminada cicd-trigger.

    3. Añade una línea al archivo env/cicd-trigger/main.tf, confirma el cambio y envíalo.

        echo "" >> env/cicd-trigger/main.tf
      
    4. Confirma e inserta los cambios:

      git add .
      git commit -m "A dummy commit to invoke the infrastrucutre trigger"
      git push
      cd ..
      

      En cuanto se envían los cambios, se inicia el activador de Cloud Deploy deploy-infra-sample.

  2. Monitoriza el estado del activador:

    Ve a la página del historial de Cloud Build para ver la canalización y espera a que se complete.

Revisar recursos de CICD de aplicaciones

Revisa los distintos recursos de CI/CD creados para la aplicación.

  1. En la Google Cloud consola:

    Ve a la página de Cloud Build y consulta el activador deploy-app-sample.

    Este es el activador del flujo de procesamiento de CI. Está conectado al repositorio de código de la aplicación sample. El activador se invoca cuando se envía un push al repositorio de la aplicación y realiza los pasos de compilación definidos en la configuración del activador. Para ver los pasos que realiza el activador cuando se invoca, haz clic en su nombre y, a continuación, en el botón ABRIR EDITOR.

  2. Ve a la página Artifact Registry y consulta el nuevo repositorio con el nombre sample.

    Este repositorio de artefactos almacena los artefactos de la aplicación.

  3. Ve a la página de la canalización de Cloud Deploy y consulta la canalización con el nombre sample. Este es el flujo de procesamiento de despliegue continuo que despliega la aplicación en los clústeres de GKE.

Desplegar la aplicación en el entorno de desarrollo

El activador deploy-app-sample está conectado al repositorio de la aplicación llamado sample. Puedes invocar el activador manualmente, mediante la URL del webhook, o enviando una notificación push al repositorio de la aplicación.

  1. Añade una línea nueva a un archivo del repositorio sample y envía los cambios para invocar el activador de Cloud Build:

    1. Clona el repositorio de Git sample:

      En Cloud Shell:

      git clone https://github.com/GITHUB_ORG/sample
      
      cd sample

      Sustituye GITHUB_ORG por tu organización de GitHub.

    2. Añade una línea al archivo skaffold.yaml.

        echo "" >> skaffold.yaml
      
    3. Confirma e inserta los cambios:

      git add .
      git commit -m "A dummy commit to invoke CI/CD trigger"
      git push
      
    4. En cuanto se envían los cambios, se inicia el activador de Cloud Deploy deploy-app-sample.

  2. Monitoriza el estado del activador:

    Ve a la página del historial de Cloud Build para ver la canalización y espera a que se complete.

    El activador ejecuta los pasos definidos en su configuración. El primer paso es crear una imagen de Docker a partir del código de la aplicación en el repositorio sample. El último paso es iniciar la canalización de Cloud Deploy que despliega la aplicación en el clúster de desarrollo de GKE.

  3. Comprueba el despliegue en el clúster de desarrollo:

    Ve a la página de la canalización de Cloud Deploy.

    Haz clic en la canalización sample. Se ha iniciado la implementación en el clúster de GKE de desarrollo. Espera a que se complete.

Verifica que la aplicación se haya implementado correctamente:

  1. Obtén las credenciales del clúster de desarrollo.

    gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a
    
  2. Accede al clúster de GKE mediante un túnel.

    gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080
    
  3. En la barra de herramientas de Cloud Shell, haz clic en

    Vista previa web y, a continuación, Obtener vista previa en el puerto 8080: Comandos de la barra de herramientas de Cloud Shell.

    El resultado es el siguiente:

    Hello World!
    
  4. En Cloud Shell, pulsa CTRL+C para finalizar el reenvío de puertos.

Añadir una nueva función a la aplicación

Cuando desarrollas una nueva función, debes implementar rápidamente los cambios en el entorno de desarrollo para probarlos y hacer iteraciones. En este tutorial, harás cambios en el repositorio de código de la aplicación y los desplegarás en el entorno de desarrollo.

  1. En Cloud Shell, cambia al directorio del repositorio sample que ya has clonado:

  2. Actualiza la aplicación para que muestre otro mensaje:

      sed -i "s/Hello World/My new feature/g" main.py
    
  3. Confirma e inserta los cambios:

    git add .
    git commit -m "Changed the message"
    git push
    

    En cuanto se inserte el código en el repositorio de GitHub, se activará el activador de webhook deploy-app-sample.

  4. Monitoriza el estado del activador en la página del historial de Cloud Build y espera a que se complete.

  5. Ir a la página de la canalización de Cloud Deploy

    Haz clic en la canalización sample. Se ha iniciado la implementación en el clúster de GKE de desarrollo. Espera a que se complete.

Verifica que la aplicación se haya implementado correctamente:

  1. Obtén las credenciales del clúster de desarrollo si has abierto un nuevo Cloud Shell:

    gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
    
  2. Crear un túnel en el clúster de GKE:

    gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080
    
  3. En la barra de herramientas de Cloud Shell, haz clic en

    Vista previa web y, a continuación, Obtener vista previa en el puerto 8080:

    Comandos de la barra de herramientas de Cloud Shell.

    El resultado es el siguiente:

    My new feature!
    
  4. En Cloud Shell, pulsa CTRL+C para finalizar el reenvío de puertos.

Promociona el cambio en los clústeres de staging y producción

Antes de promocionar la aplicación a los entornos de staging y producción, debes crear la zona de aterrizaje de la aplicación en los clústeres de GKE de esos entornos. Cuando incorporaste la aplicación, se creó automáticamente la zona de aterrizaje para desarrollo en el clúster de GKE de desarrollo añadiendo código a acm-gke-infrastructure-repo en la rama de desarrollo.

Crear una zona de aterrizaje en clústeres de GKE de staging y producción

  1. Crea una zona de aterrizaje en el clúster de GKE de staging: debes crear una solicitud de extracción de la rama de desarrollo a la de staging en acm-gke-infrastructure-repo y combinarla.

    1. Ve a GitHub y accede al repositorio acm-gke-infrastructure-repo. Haz clic en Pull requests y, a continuación, en el botón New pull request. En el menú Base, elige staging y, en el menú Comparar, elige dev. Haz clic en el botón Create pull request.

    2. Normalmente, un usuario con acceso al repositorio revisa los cambios y, a continuación, combina la solicitud de extracción para asegurarse de que solo se promuevan al entorno de preproducción los cambios previstos. Para que los usuarios puedan probar la arquitectura de referencia, se han flexibilizado las reglas de protección de ramas para que el administrador del repositorio pueda saltarse la revisión y combinar la solicitud de extracción. Si eres administrador del repositorio, combina la solicitud de obtención. De lo contrario, pídele al administrador que la combine.

    Config Sync sincroniza los cambios que llegan a la rama de staging del repositorio acm-gke-infrastructure-repo con el clúster de staging de GKE, lo que da como resultado la creación de una zona de aterrizaje para la aplicación en el clúster de staging de GKE.

  2. Crear una zona de aterrizaje en clústeres de GKE de producción: debes crear una solicitud de extracción de la rama de staging a la de producción y combinarla.

    1. Haz clic en Pull requests y, a continuación, en el botón New pull request. En el menú Base, elige prod y, en el menú Comparar, elige staging. Haz clic en el botón Create pull request.

    2. Si eres administrador del repositorio, combina la solicitud de obtención. De lo contrario, pídele al administrador que la combine.

    Config Sync sincroniza los cambios que llegan a la rama de producción del repositorio acm-gke-infrastructure-repo con los clústeres de GKE de producción, lo que da como resultado la creación de una zona de aterrizaje para la aplicación en los clústeres de GKE de producción.

Promocionar los cambios de desarrollo a staging

Ahora que has creado la zona de aterrizaje de la aplicación en los clústeres de GKE de staging y producción, promueve la aplicación del entorno de desarrollo al de staging.

  1. Busca el nombre de la última versión y guárdalo como variable de entorno:

      export RELEASE=$(gcloud deploy targets describe dev --region=us-central1 --format="json" | jq -r '."Active Pipeline"[0]."projects/PROJECT_ID/locations/us-central1/deliveryPipelines/sample"."Latest release"' | awk -F '/' '{print $NF}')
     

    Sustituye PROJECT_ID por el ID de tu proyecto. Google Cloud

    Comprueba que se haya definido la variable de entorno:

      echo $RELEASE
      

  2. En Cloud Shell, ejecuta el siguiente comando para activar la promoción de la versión del entorno de desarrollo al de staging:

     gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample  --region=us-central1 --to-target=staging --quiet
     

  3. Comprueba el despliegue de staging:

    Ir a la página de la canalización de Cloud Deploy

    Haz clic en la canalización sample. Se ha iniciado el despliegue en el clúster de GKE de staging. Espera a que se complete.

  4. Verifica que el despliegue de la versión de prueba se ha realizado correctamente:

    1. Obtén las credenciales del clúster de staging:

      gcloud container clusters get-credentials gke-staging-us-central1 --location us-central1-a
      
    2. Crear un túnel en el clúster de GKE:

      gcloud container clusters get-credentials gke-staging-us-central1 --location us-central1-a && kubectl port-forward --namespace sample $(kubectl get pod --namespace sample --selector="deploy.cloud.google.com/delivery-pipeline-id=sample" --output jsonpath='{.items[0].metadata.name}') 8080:8080
      
    3. En la barra de herramientas de Cloud Shell, haz clic en

      Vista previa web y, a continuación, Obtener vista previa en el puerto 8080:

      Comandos de la barra de herramientas de Cloud Shell.

      El resultado es el siguiente:

      My new feature!
      
    4. En Cloud Shell, pulsa CTRL+C para finalizar el reenvío de puertos.

Promocionar los cambios de staging a producción

Ahora, promociona la versión de staging a producción. Tienes dos clústeres de producción y Cloud Deploy tiene un destino para cada uno de ellos llamado prod1 y prod2, respectivamente.

  1. En Cloud Shell, ejecuta el siguiente comando para activar la promoción de la versión del clúster de staging al de producción:

     gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample  --region=us-central1 --to-target=prod1 --quiet
     

  2. El lanzamiento en clústeres de producción requiere aprobación, por lo que el lanzamiento espera hasta que lo apruebes. Para verlo, sigue estos pasos:

    Ir a la página de la canalización de Cloud Deploy

    Haz clic en la canalización sample. El lanzamiento a prod1 requiere aprobación y se necesita el rol clouddeploy.approver para aprobar el lanzamiento. Como eres el propietario del proyecto, tienes acceso para aprobar el lanzamiento.

  3. Aprobamos el lanzamiento en prod1:

    Ejecuta el siguiente comando para obtener el nombre del lanzamiento pendiente de aprobación y guárdalo en una variable de entorno:

     export ROLLOUT=$(gcloud deploy targets describe prod1 --region=us-central1 --format="json" | jq -r '."Pending Approvals"[]' | awk -F '/' '{print $NF}')
     

    Aprobar la retirada:

     gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
     

  4. Una vez que se haya dado la aprobación, se iniciará el lanzamiento de prod1. Monitoriza el progreso en la página de la canalización de Cloud Deploy.

  5. Una vez que se haya completado el despliegue de prod1, inicia el lanzamiento de prod2.

     gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample  --region=us-central1 --to-target=prod2 --quiet
     

  6. Para lanzar la versión en prod2, también se necesita aprobación. Aprueba el lanzamiento en el clúster prod2:

    Ejecuta el siguiente comando para obtener el nombre del lanzamiento pendiente de aprobación y guárdalo en una variable de entorno:

     export ROLLOUT=$(gcloud deploy targets describe prod2 --region=us-central1 --format="json" | jq -r '."Pending Approvals"[]' | awk -F '/' '{print $NF}')
     

    Aprobar la retirada:

     gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
     

  7. Una vez que se haya dado la aprobación, se iniciará el lanzamiento de prod2. Monitoriza el progreso en la página de la canalización de Cloud Deploy.

  8. Comprueba que el despliegue en el clúster de producción se haya realizado correctamente después de que se completen las canalizaciones de Cloud Deploy en prod1 y prod2.

    1. Se ha creado Ingress de varios clústeres en los clústeres de producción y usas un balanceador de carga para acceder a la aplicación de producción. Estas configuraciones de Multi Cluster Ingress se crean con los archivos YAML k8s/prod/mci.yaml y k8s/prod/mcs.yaml del repositorio sample. Cuando envías una solicitud a la dirección IP del balanceador de carga, Multi Cluster Ingress reenvía la solicitud a una de las dos instancias de la aplicación que se ejecutan en dos clústeres de GKE diferentes.

    2. Muestra la regla de reenvío asociada al balanceador de carga para encontrar la dirección IP.

      gcloud compute forwarding-rules list
    3. La salida es similar a la siguiente:

      NAME: mci-qqxs9x-fw-sample-sample-ingress
      REGION:
      IP_ADDRESS: 34.36.123.118
      IP_PROTOCOL: TCP
      TARGET: mci-qqxs9x-sample-sample-ingress
      

    4. Abre un navegador web e introduce lo siguiente en la URL:

      http://IP_ADDRESS:80

      Sustituye IP_ADDRESS por la dirección IP del balanceador de carga.

      El resultado es el siguiente:

      My new feature!
      

      De esta forma, se confirma que la aplicación se ha implementado correctamente en los clústeres de producción.

Probar la resiliencia de la aplicación

En esta sección, probarás la resiliencia de la aplicación que se ejecuta en producción reiniciando uno de los dos nodos del clúster de GKE de producción sin que esto afecte a la aplicación.

La aplicación en producción usa la entrada de varios clústeres y se puede acceder a ella a través de una IP de balanceador de carga. Cuando se accede a la aplicación a través de esa IP, el recurso Ingress multiclúster la dirige a una de las dos instancias de la aplicación que se ejecutan en dos clústeres de GKE diferentes. Cuando uno de los clústeres de GKE no está en buen estado y no se puede acceder a la instancia de la aplicación que se ejecuta en él, el recurso Ingress multiclúster sigue enviando el tráfico a la instancia en buen estado de la aplicación que se ejecuta en el otro clúster de GKE. De esta forma, la interrupción del clúster no afecta al usuario final y la aplicación sigue atendiendo las solicitudes.

Para probar la resiliencia, sigue estos pasos:

  1. Busca el grupo de nodos de los clústeres de GKE de producción que se ejecutan en us-west1.

     gcloud container clusters describe gke-prod-us-west1 --location=us-west1-a --format=json | jq ".nodePools[0].instanceGroupUrls[]" | tr '"' ' ' |  awk -F '/' '{for(i=NF-2; i<=NF; i=i+2) printf ("%s ",$i); print  ""}'

  2. La salida es similar a la siguiente:

    us-west1-b gke-gke-prod-us-west1-node-pool-01-6ad4e1ed-grp
    us-west1-c gke-gke-prod-us-west1-node-pool-01-98407373-grp
    

    La salida tiene dos columnas: la primera es la zona y la segunda es el nombre del grupo de instancias asociado al grupo de nodos del clúster de GKE de producción en la región us-west1.

  3. Reinicia el grupo de instancias correspondiente a los grupos de nodos:

     gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_1  --zone=ZONE_1 --max-unavailable=100%
    
     gcloud compute instance-groups managed rolling-action restart INSTANCE_GROUP_2  --zone=ZONE_2 --max-unavailable=100%

    Sustituye INSTANCE_GROUP_1 por el nombre del primer grupo de instancias.

    Sustituye ZONE_1 por la zona del primer grupo de instancias.

    Sustituye INSTANCE_GROUP_2 por el nombre del segundo grupo de instancias.

    Sustituye ZONE_2 por la zona del segundo grupo de instancias.

  4. Comprueba el estado del grupo de instancias.

    Ir a la página Grupos de instancias

    Los dos grupos de instancias se están reiniciando, mientras que los demás grupos tienen una marca de verificación verde.

    Estado de los grupos de instancias.

  5. Abre un navegador web e introduce lo siguiente en la URL:

    http://IP_ADDRESS:80

    Sustituye IP_ADDRESS por la dirección IP del balanceador de carga.

    Aunque uno de los dos clústeres de GKE esté inactivo, la aplicación estará disponible y el resultado será el siguiente:

     My new feature!
     

    Esto demuestra que tu aplicación es resistente y tiene una alta disponibilidad.

Gestionar la aplicación

Cuando creaste esta aplicación desde la fábrica de aplicaciones, obtuviste repositorios de Git, infraestructura y flujos de procesamiento de CI/CD independientes para la aplicación. Has usado estos recursos para implementar la aplicación y añadir una nueva función. Para gestionar la aplicación, solo tienes que interactuar con estos repositorios de Git y con la canalización sin necesidad de actualizar la fábrica de aplicaciones. Puedes personalizar las canalizaciones y los repositorios de Git de la aplicación según tus requisitos. Como propietario de una aplicación, puedes definir quién tiene acceso a las canalizaciones y a los repositorios de Git de tu aplicación para gestionarla.

Limpieza

Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en este tutorial.

Eliminar el proyecto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Siguientes pasos