En este instructivo, se muestra cómo incorporar una aplicación nueva, desarrollar una característica para la aplicación y también implementar la aplicación en producción mediante técnicas modernas de integración continua/entrega continua (CI/CD) con Google Kubernetes Engine (GKE).
Este documento forma parte de una serie:
- CI/CD moderna con GKE: un framework de entrega de software
- CI/CD moderna con GKE: Compila un sistema de CI/CD (arquitectura de referencia)
- CI/CD moderna con GKE: aplica el flujo de trabajo de los desarrolladores (este documento)
En este instructivo, usarás herramientas como Skaffold, kustomize
, Artifact Registry, Sincronizador de configuración, Cloud Build y Cloud Deploy para desarrollar, compilar e implementar tu aplicación.
Este documento está dirigido a arquitectos empresariales y desarrolladores de aplicaciones, así como a los equipos de ingeniería de confiabilidad de sitios, DevOps y seguridad de TI. Es útil tener experiencia en herramientas y procesos de implementación automatizados para comprender los conceptos de este documento.
Arquitectura
En este instructivo, integrarás una aplicación nueva. Luego, desarrollas una función nueva y, luego, implementas la aplicación en los entornos de desarrollo, etapa de pruebas y producción. La arquitectura de referencia contiene la infraestructura y las herramientas necesarias para incorporar y lanzar una aplicación nueva con el flujo de trabajo que se muestra en el siguiente diagrama:
A partir del repositorio de códigos para la CI, el flujo de trabajo incluye los siguientes pasos:
Compartes el código fuente de la aplicación a través de los repositorios de tu aplicación.
Cuando confirma y envía el código al repositorio de la aplicación, se activa automáticamente una canalización de CI en Cloud Build. El proceso de CI crea y envía una imagen de contenedor a Artifact Registry.
El proceso de CI también crea una versión de CD para la aplicación en Cloud Deploy.
La versión de CD genera manifiestos de Kubernetes completamente renderizados para el desarrollo con
skaffold
y los implementa en el clúster de GKE de desarrollo.La versión de la CD asciende desde el desarrollo a un destino de etapa de pruebas, que genera manifiestos de etapa de pruebas completamente renderizados y los implementa en el clúster de GKE de etapa de pruebas.
Luego, la versión de CD asciende desde la etapa de pruebas a la de producción, que genera manifiestos de producción completamente renderizados y los implementa en clústeres de GKE de producción.
Para obtener más información sobre las herramientas y la infraestructura utilizadas en este flujo de trabajo, consulta CI/CD moderna con GKE: Compila un sistema de CI/CD.
Integra 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
Usas la fábrica de aplicaciones para incorporar una aplicación nueva desde repositorios de inicio. La integración de la aplicación consta de los siguientes pasos:
Crea la definición de la aplicación: Creas la definición de la aplicación en un archivo de Terraform y la almacenas en
application-factory-repo
, que actúa como catálogo de aplicaciones.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:
Una zona de destino para la aplicación nueva 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 destino solo se crea en un clúster de GKE de desarrollo durante la incorporación de una aplicación nueva. Esto se hace para desbloquear a los desarrolladores para que puedan usar el entorno de desarrollo y comenzar a iterar en él. La zona de destino en los clústeres de etapa de pruebas y producción se crea con el enfoque de GitOps. Este enfoque se demuestra más adelante en este documento, cuando estés listo para ascender la versión en esos clústeres.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.
Un activador de infraestructura de Cloud Build que toma el código en el repositorio de infraestructura y crea los recursos según su definición.
Un repositorio de la aplicación del repositorio de inicio de la aplicación que aloja el código fuente de la aplicación
Crea 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 la definición de la aplicación:
Ejecuta el activador create-app
para generar un archivo de definición de la 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.
En la consola Google Cloud , ve a la página de Cloud Build:
Haz clic en e Activador
create-app
.Haz clic en MOSTRAR VISTA PREVIA DE LA URL para mostrar la URL necesaria para invocar el webhook.
En Cloud Shell, invoca el activador mediante una solicitud curl en la URL que se obtuvo del paso anterior y pásale los parámetros como una carga útil.
curl "WEBHOOK_URL" -d '{"message": {"app": "sample","runtime": "python","trigger_type": "webhook","github_team": ""}}'
En la muestra de código anterior, ocurre lo siguiente:
Reemplaza
WEBHOOK_URL
por la URL obtenida del activador."app": "sample"
especifica el nombre de la aplicación."runtime": "python"
le 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 canalizaciones de CI/CD para la aplicación."github_team": ""
es un equipo en GitHub que se asociará con los repositorios que se creen para la aplicación. Como aún no creaste un equipo de GitHub, pásalo como una cadena vacía.
Verifica si la canalización tiene el activador
create-app
:Ir a la página Historial de Cloud Build
Hay una nueva canalización para el activador
create-app
. Cuando se complete, se creará la definición de la aplicación enapplication-factory-repo
.Revisa el archivo de definición de la aplicación:
En un navegador web, ve a GitHub y accede a tu cuenta.
Haz clic en el ícono de foto y, luego, en
Your organizations
. Elige tu organización.Haz clic en el repositorio
application-factory-repo
, ve a la carpetaapps/python
y abre el archivo nuevo llamadosample.tf
que creó el activadorcreate-app
. Inspecciona el archivo. Este contiene código de Terraform para crear una aplicación nueva.
Crea la infraestructura de la aplicación:
Ahora que creaste la definición de la aplicación, ejecuta el activador tf-apply
para crear la infraestructura de la aplicación.
En la consola de Google Cloud , haz lo siguiente:
Haz clic en el activador
tf-apply
.Haz clic en “MOSTRAR VISTA PREVIA DE LA URL” para mostrar la URL necesaria para invocar el webhook.
Invoca el activador:
curl "WEBHOOK_URL" -d '{}'
En la muestra de código anterior, ocurre lo siguiente:
- Reemplaza
WEBHOOK_URL
por la URL obtenida del activador.
- Reemplaza
Verifica si la canalización tiene el activador
tf-apply
:Ir 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 diversos componentes de la infraestructura de la aplicación.
Zona de destino
Ve a Cloud Shell y configura el proyecto.
gcloud config set core/project PROJECT_ID
Reemplaza
PROJECT_ID
por el Google Cloud ID del proyecto.Obtén credenciales para el clúster de GKE de desarrollo.
gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a
Verifica el espacio de nombres de la aplicación. El espacio de nombres se llama igual que la aplicación, sample.
kubectl get namespaces sample
El resultado se ve de la manera siguiente:
NAME STATUS AGE sample Active 15m
Verifica la cuenta de servicio en el espacio de nombres.
kubectl get serviceaccounts -n sample
Hay una cuenta de servicio además de la predeterminada. El resultado se ve de la manera siguiente:
NAME SECRETS AGE default 0 15m sample-ksa 0 15m
Repositorio de infraestructura
En un navegador web, ve a GitHub y accede a tu cuenta. Haz clic en el ícono de foto. Luego, 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
tiene código para crear recursos de CI/CD para la aplicación, mientras que las carpetas dev
, staging
y prod
tienen código para crear infraestructura para diferentes entornos de la aplicación.
Activador de infraestructura
En la consola de Google Cloud , haz lo siguiente:
Hay un nuevo activador llamado
deploy-infra-sample
.Este activador está conectado al repositorio
sample-infra
, de modo que, cuando se realiza un envío de código a este repositorio, se invoca el activador, se identifica la rama en la que se realizó el envío, se va a la carpeta correspondiente de esa rama y se ejecuta Terraform allí. Por ejemplo, si el código se envía a la ramacicd-trigger
, el activador ejecuta Terraform en la carpeta cicd-trigger de la rama cicd-trigger. Del mismo modo, cuando se realiza una confirmación en la ramadev
, el activador ejecuta Terraform en la carpeta dev de la rama dev, y así sucesivamente.
Repositorio de aplicaciones
- Ve a GitHub y abre 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 archivos de configuraciónDockerfile
,kustomize
que describen la configuración necesaria de la aplicación, yskaffold.yaml
, que define los pasos de implementación que Cloud Deploy usará para la CD.
Crea recursos de CI/CD de la aplicación
Ahora que creaste el esqueleto de la aplicación, ejecuta el activador deploy-infra-sample
para crear sus recursos de CI/CD. Puedes invocar el activador de forma manual con su URL de webhook o realizando una confirmación en el repositorio de Git sample-infra
.
Para invocar el activador de Cloud Build, agrega una línea nueva en un archivo en el repositorio. Luego, envía los cambios:
Si nunca usaste Git en Cloud Shell, configúralo con tu nombre y dirección de correo electrónico: Git usa esta información para identificarte como el autor de las confirmaciones que creas en Cloud Shell:
git config --global user.email "GITHUB_EMAIL_ADDRESS" git config --global user.name "GITHUB_USERNAME"
Reemplaza lo siguiente:
GITHUB_EMAIL_ADDRESS
: La dirección de correo electrónico asociada a tu cuenta de GitHubGITHUB_USERNAME
: El nombre de usuario asociado con tu cuenta de GitHub
Clona el repositorio de Git
sample-infra
:git clone https://github.com/GITHUB_ORG/sample-infra cd sample-infra
Reemplaza lo siguiente:
GITHUB_ORG
por tu organización de GitHub.
Se extrae la rama predeterminada cicd-trigger.
Agrega una línea nueva al archivo env/cicd-trigger/main.tf, confirma el cambio y envíalo.
echo "" >> env/cicd-trigger/main.tf
Confirma y envía 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
.
Supervisa el estado del activador:
Ir a la página Historial de Cloud Build para ver la canalización y esperar a que se complete.
Revisa los recursos de CICD de la aplicación
Revisa los diversos recursos de CI/CD creados para la aplicación.
En la consola de Google Cloud , haz lo siguiente:
Ir a la página de Cloud Build y ve el activador
deploy-app-sample
.Este es el activador de la canalización de CI. Está conectado al repositorio de código de la aplicación
sample
. El activador se invoca cuando se realiza una inserción en el repositorio de la aplicación y ejecuta los pasos de compilación según se definen en la configuración del activador. Para ver los pasos que realiza el activador cuando se invoca, haz clic en el nombre del activador y, luego, en el botón ABRIR EDITOR.Ve a la página de Artifact Registry y consulta el nuevo repositorio con el nombre
sample
.Este repositorio de artefactos almacena los artefactos de la aplicación.
Ve a la página de la canalización de Cloud Deploy y consulta la canalización con el nombre
sample
. Esta es la canalización de implementación continua que implementa la aplicación en los clústeres de GKE.
Implementa 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 de forma manual, con la URL del webhook, o mediante una inserción en el repositorio de la aplicación.
Agrega una línea nueva en un archivo en el repositorio
sample
y envía los cambios para invocar el activador de Cloud Build:Clona el repositorio de Git
sample
:En Cloud Shell:
git clone https://github.com/GITHUB_ORG/sample cd sample
Reemplaza
GITHUB_ORG
por tu organización de GitHub.Agrega una línea nueva al archivo
skaffold.yaml
.echo "" >> skaffold.yaml
Confirma y envía los cambios:
git add . git commit -m "A dummy commit to invoke CI/CD trigger" git push
En cuanto se envían los cambios, se inicia el activador de Cloud Deploy
deploy-app-sample
.
Supervisa el estado del activador:
Ir a la página Historial de Cloud Build para ver la canalización y esperar a que se complete.
El activador ejecuta los pasos definidos en su configuración. El primer paso es compilar 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 implementa la aplicación en el clúster de GKE de desarrollo.Verifica la implementación 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 inició 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:
Obtén credenciales para el clúster de desarrollo.
gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a
Crea un túnel para el clúster de GKE.
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
En la barra de herramientas de Cloud Shell, haz clic en
Vista previa en la Web y, luego, haz clic en Vista previa en el puerto 8080:Esta es la salida:
Hello World!
En Cloud Shell, presiona
CTRL+C
para finalizar la redirección de puertos.
Agrega una nueva función a la aplicación
Cuando desarrollas una función nueva, debes implementar rápidamente los cambios en una zona de pruebas de desarrollo para probar e iterar en ellos. En este instructivo, realizarás cambios en el repositorio de código de la aplicación y los implementarás en el entorno de desarrollo.
En Cloud Shell, cambia el directorio a un repositorio
sample
ya clonado:Actualiza la aplicación para que genere un mensaje diferente:
sed -i "s/Hello World/My new feature/g" main.py
Confirma y envía los cambios:
git add . git commit -m "Changed the message" git push
En cuanto se envía el código al repositorio de GitHub, se activa el webhook
deploy-app-sample
.Supervisa el estado del activador en la página del historial de Cloud Build y espera a que se complete.
Ir a la página de la canalización de Cloud Deploy
Haz clic en la canalización
sample
. Se inició 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:
Obtén credenciales en el clúster de desarrollo si abriste un nuevo Cloud Shell:
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
Crea un túnel para 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
En la barra de herramientas de Cloud Shell, haz clic en
Vista previa en la Web y, luego, haz clic en Vista previa en el puerto 8080:
Esta es la salida:
My new feature!
En Cloud Shell, presiona
CTRL+C
para finalizar la redirección de puertos.
Promueve el cambio en los clústeres de etapa de pruebas y de producción
Antes de ascender la aplicación a entornos de etapa de pruebas y producción, debes crear la zona de destino para la aplicación en los clústeres de GKE de esos entornos. Cuando incorporaste la aplicación, la zona de destino para desarrollo se creó de forma automática en el clúster de desarrollo de GKE mediante la adición de código a acm-gke-infrastructure-repo
en la rama de desarrollo.
Crea una zona de destino en los clústeres de GKE de etapa de pruebas y producción
Crea una zona de destino en el clúster de GKE de etapa de pruebas: Debes crear una solicitud de extracción de la rama de desarrollo a la de etapa de pruebas en
acm-gke-infrastructure-repo
y combinarla.Ve a GitHub y navega al repositorio
acm-gke-infrastructure-repo
. Haz clic enPull requests
y, luego, en el botónNew pull request
. En el menú Base, elige etapa de pruebas y, en el menú Comparar, elige dev. Haz clic en el botónCreate pull request
.Por lo general, alguien que tiene acceso al repositorio revisa los cambios y, luego, combina la PR para asegurarse de que solo los cambios previstos ascienden al entorno de etapa de pruebas. Para permitir que las personas prueben la arquitectura de referencia, se reduce la rigurosidad de las reglas de protección de ramas para que el administrador del repositorio pueda omitir la revisión y combinar la PR. Si eres administrador del repositorio, combina la solicitud de extracción. De lo contrario, pídele al administrador que lo combine.
El Sincronizador de configuración sincroniza los cambios que llegan a la rama de etapa de pruebas del repositorio
acm-gke-infrastructure-repo
con el clúster de GKE de etapa de pruebas que da como resultado la creación de la zona de destino para la aplicación en el clúster de GKE de etapa de pruebas.Crea una zona de destino en los clústeres de GKE de producción: debes crear una solicitud de extracción de la etapa de pruebas a la rama de producción y combinarla.
Haz clic en
Pull requests
y, luego, en el botónNew pull request
. En el menú Base, elige prod y, en el menú Comparar, elige etapa de pruebas. Haz clic en el botónCreate pull request
.Si eres administrador del repositorio, combina la solicitud de extracción. De lo contrario, pídele al administrador que lo combine.
El Sincronizador de configuración 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 la zona de destino para la aplicación en clústeres de GKE de producción.
Promueve los cambios de la etapa de desarrollo a la de etapa de pruebas
Ahora que creaste la zona de destino para la aplicación en los clústeres de etapa de pruebas y de producción de GKE, asciende la aplicación del entorno de desarrollo a la de etapa de pruebas.
Busca el nombre de la versión más reciente y guárdalo como una 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}')
Reemplaza
PROJECT_ID
por el Google Cloud ID del proyecto.Verifica que se haya configurado la variable de entorno:
echo $RELEASE
En Cloud Shell, ejecuta el siguiente comando para activar la promoción del lanzamiento del entorno de desarrollo a etapa de pruebas:
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=staging --quiet
Verifica la implementación en la etapa de pruebas:
Ir a la página de la canalización de Cloud Deploy
Haz clic en la canalización
sample
. Se inició la implementación en el clúster de GKE de etapa de pruebas. Espera a que se complete.Verifica que la implementación de la etapa de pruebas se haya realizado correctamente:
Obtén credenciales para el clúster de etapa de pruebas:
gcloud container clusters get-credentials gke-staging-us-central1 --location us-central1-a
Crea un túnel para 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
En la barra de herramientas de Cloud Shell, haz clic en
Vista previa en la Web y, luego, haz clic en Vista previa en el puerto 8080:
Esta es la salida:
My new feature!
En Cloud Shell, presiona
CTRL+C
para finalizar la redirección de puertos.
Asciende los cambios de la etapa de pruebas a la de producción
Ahora, asciende el lanzamiento de la etapa de pruebas a producción. Tienes dos clústeres de producción y Cloud Deploy tiene un destino para cada uno de ellos, llamados prod1 y prod2, respectivamente.
En Cloud Shell, ejecuta el siguiente comando para activar la promoción de la versión de la etapa de pruebas al clúster prod1:
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=prod1 --quiet
El lanzamiento a clústeres de producción requiere aprobación, por lo que el lanzamiento espera hasta que lo apruebes. Para verla, haz lo siguiente:
Ir a la página de la canalización de Cloud Deploy
Haz clic en la canalización
sample
. El lanzamiento a prod1 requiere la aprobación y se necesita el rol clouddeploy.approver para aprobarlo. Como eres el propietario del proyecto, tienes acceso para aprobar la versión.Aprueba la versión en prod1:
Ejecuta el siguiente comando para recuperar 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 versión:
gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
Después de que se otorga la aprobación, comienza el lanzamiento de prod1. Supervisa el progreso en la página de la canalización de Cloud Deploy.
Una vez que se complete la implementación de prod1, inicia el lanzamiento de prod2.
gcloud deploy releases promote --release=$RELEASE --delivery-pipeline=sample --region=us-central1 --to-target=prod2 --quiet
El lanzamiento a prod2 también requiere aprobación. Aprueba la versión en el clúster prod2:
Ejecuta el siguiente comando para recuperar 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 versión:
gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
Una vez que se otorga la aprobación, comienza el lanzamiento de prod2. Supervisa el progreso en la página de la canalización de Cloud Deploy.
Verifica que la implementación 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.
Se creó Ingress de varios clústeres en clústeres de producción, y usas un balanceador de cargas 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 en el repositorio
sample
. Cuando envías una solicitud a la dirección IP del balanceador de cargas, Ingress de varios clústeres reenvía la solicitud a una de las dos instancias de la aplicación que se ejecutan en dos clústeres de GKE diferentes.Enumera la regla de reenvío asociada al balanceador de cargas para encontrar la dirección IP.
gcloud compute forwarding-rules list
El resultado se ve de la manera siguiente:
NAME: mci-qqxs9x-fw-sample-sample-ingress REGION: IP_ADDRESS: 34.36.123.118 IP_PROTOCOL: TCP TARGET: mci-qqxs9x-sample-sample-ingress
Abre un navegador web y, en la URL, ingresa lo siguiente:
http://IP_ADDRESS:80
Reemplaza
IP_ADDRESS
por la dirección IP del balanceador de cargas.Esta es la salida:
My new feature!
Esto confirma que la aplicación se implementó según lo previsto en los clústeres de producción.
Prueba la resiliencia de la aplicación
En esta sección, probarás la capacidad de recuperación de la aplicación que se ejecuta en producción reiniciando uno de los dos nodos de los clústeres de GKE de producción sin afectar la aplicación.
La aplicación en producción usa Ingress de varios clústeres y se puede acceder a ella a través de una IP del balanceador de cargas. Cuando se accede a la aplicación a través de esa IP, el Ingress de varios clústeres la enruta 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 está en mal estado y no se puede acceder a la instancia de la aplicación que se ejecuta en él, el Ingress de varios clústeres 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. Esto hace que la interrupción del clúster sea invisible para el usuario final y que la aplicación siga atendiendo las solicitudes de forma continua.
Para probar la resiliencia, haz lo siguiente:
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 ""}'
El resultado se ve de la manera 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
El resultado 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.
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%
Reemplaza
INSTANCE_GROUP_1
por el nombre del primer grupo de instancias.Reemplaza
ZONE_1
por la zona del primer grupo de instancias.Reemplaza
INSTANCE_GROUP_2
por el nombre del segundo grupo de instancias.Reemplaza
ZONE_2
por la zona del segundo grupo de instancias.Verifica 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 otros grupos tienen una marca de verificación verde.
Abre un navegador web y, en la URL, ingresa lo siguiente:
http://IP_ADDRESS:80
Reemplaza
IP_ADDRESS
por la dirección IP del balanceador de cargas.Incluso cuando uno de los dos clústeres de GKE está inactivo, la aplicación está disponible y el resultado es el siguiente:
My new feature!
Esto demuestra que tu aplicación es resiliente y tiene alta disponibilidad.
Administra la aplicación
Cuando creó esta aplicación a partir de la fábrica de aplicaciones, obtuvo repositorios de Git independientes, canalizaciones de CI/CD y de infraestructura para la aplicación. Usaste estos recursos para implementar la aplicación y agregar una función nueva. Para administrar aún más la aplicación, solo necesitas interactuar con estos repositorios de Git y 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 la aplicación, puedes definir quién tiene acceso a las canalizaciones y los repositorios de Git de tu aplicación para administrarla.