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, incorporarás una aplicación nueva. Luego, desarrollarás una función nueva y, luego, implementarás la aplicación en 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 desarrollo mediante
skaffold
y los implementa en el clúster de desarrollo de GKE.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.
Objetivos
Integrar una aplicación nueva.
Implementa la aplicación en el entorno de desarrollo.
Desarrollar una función nueva y, luego, implementarla en el entorno de desarrollo.
Promover la función nueva a la etapa de pruebas y, luego, lanzarla en producción.
Prueba la resiliencia de la aplicación.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Google Kubernetes Engine
- Google Kubernetes Engine (GKE) Enterprise edition for Config Sync
- Artifact Registry
- Cloud Build
- Cloud Deploy
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
- Para este instructivo, implementa la arquitectura de referencia en esta serie.
Prepare el entorno
Si continúas directamente desde CI/CD moderna con GKE: compila un sistema de CI/CD, ve a la siguiente sección. Sin embargo, si tienes una sesión nueva o una vencida, abre Cloud Shell y configura el proyecto en el que instalaste la infraestructura de arquitectura de referencia:
gcloud config set core/project PROJECT_ID
Reemplaza
PROJECT_ID
por el ID del proyecto de Google Cloud.
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
Usa la fábrica de aplicaciones para incorporar una aplicación nueva desde los repositorios de inicio. La integración de aplicaciones consta de los siguientes pasos:
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 la aplicación.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 aplicaciones 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 mientras se integra 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 de 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 aplicaciones 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 de Google Cloud, ve a la página 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:
Reemplaza
WEBHOOK_URL
por la URL que se obtuvo 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. Debido a que aún no creaste un equipo de GitHub, pásalo como una string vacía.
Verifica la canalización para el activador
create-app
:Ir a la página Historial de Cloud Build
Existe una canalización nueva para el activador
create-app
. Cuando se completa, la definición de la aplicación se crea 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
. Selecciona 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 aplicaciones:
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 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:
- Reemplaza
WEBHOOK_URL
por la URL que se obtuvo del activador.
- Reemplaza
Verifica la canalización para el activador
tf-apply
:Ir a la página Historial de Cloud Build
Existe una canalización nueva 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 ID del proyecto de Google Cloud.Obtén credenciales para el clúster de GKE de desarrollo.
gcloud container clusters get-credentials gke-dev-us-central1 --zone us-central1-a
Verifica el espacio de nombres de la aplicación. El espacio de nombres recibe el nombre de la aplicación, ejemplo.
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 enviarle el código, mientras que otras ramas tienen reglas de protección, por lo que no puedes enviar el 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:
Hay un activador nuevo llamado
deploy-infra-sample
.Este activador se conecta al repositorio
sample-infra
de modo que cuando se envía un código a este repositorio, se invoca el activador y se identifica la rama en la que se realizó el envío y se dirige a la carpeta correspondiente en 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. De manera similar, cuando se produce un envío a la ramadev
, el activador ejecuta Terraform en la carpeta de desarrollo de la rama de desarrollo y así sucesivamente.
Repositorio de aplicaciones
- Ve a GitHub y busca los repositorios de tu organización. Hay un repositorio nuevo 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 aplicaciones
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 mediante 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.
La rama predeterminada cicd-trigger se reserva.
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íen los cambios, se iniciará 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:
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 un envío al repositorio de la aplicación y realiza los pasos de compilación como se define 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 visualiza el repositorio nuevo con el nombre
sample
.Este Artifact Repository almacena los artefactos de la aplicación.
Ve a la página de canalización de Cloud Deploy y visualiza 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 aplicaciones llamado sample
. Puedes invocar el activador de forma manual, con la URL de webhook, o a través de un envío al repositorio de aplicaciones.
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íen los cambios, se iniciará 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 desarrollo de GKE.Verifica la implementación en el clúster de desarrollo:
Ir a la página de canalización de Cloud Deploy.
Haz clic en la canalización
sample
. Se inició la implementación en el clúster de desarrollo de GKE. 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 --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:
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, usarás cambios en el repositorio del código de la aplicación y, luego, 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 inicia el activador de 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 canalización de Cloud Deploy
Haz clic en la canalización
sample
. Se inició la implementación en el clúster de desarrollo de GKE. 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 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 desde el desarrollo a la rama de etapa de pruebas en
acm-gke-infrastructure-repo
y combinarla.Ve a GitHub y pasa 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 ID del proyecto de Google Cloud.Verifica si se configuró 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 de la etapa de pruebas:
Ir a la página de 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 de forma correcta:
Obtén credenciales para el clúster de etapa de pruebas:
gcloud container clusters get-credentials gke-staging-us-central1 --zone us-central1-a
Crea un túnel para el clúster de GKE:
gcloud container clusters get-credentials gke-staging-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.
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 verlo, haz lo siguiente:
Ir a la página de 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. Dado que eres el propietario del proyecto, tienes acceso para aprobar la versión.Aprueba la versión a 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}')
Aprueba la versión:
gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
Una vez otorgada la aprobación, se iniciará la versión prod1. Supervisa el progreso en la página de 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}')
Aprueba la versión:
gcloud deploy rollouts approve $ROLLOUT --delivery-pipeline=sample --region=us-central1 --release=$RELEASE --quiet
Una vez otorgada la aprobación, comenzará la versión prod2. Supervisa el progreso en la página de canalización de Cloud Deploy.
Verifica que la implementación en el clúster de producción se haya realizado de forma correcta después de que se completen las canalizaciones de Cloud Deploy en prod1 y prod2.
Hay Ingress de varios clústeres creado en los clústeres de producción y debes usar un balanceador de cargas para acceder a la aplicación de producción. Esta configuración de Ingress de varios clústeres se crea 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 ejecuta en dos clústeres de GKE diferentes.Enumera la regla de reenvío asociada con el 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 e ingresa lo siguiente en la URL:
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 implementa como se espera en los clústeres de producción.
Prueba la resiliencia de la aplicación
En esta sección, probarás la resiliencia de la aplicación que se ejecuta en producción mediante el reinicio de uno de los nodos de los dos clústeres de GKE de producción sin afectar 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 del balanceador de cargas. Cuando se accede a la aplicación a través de esa IP, la entrada de varios clústeres la enruta a una de las dos instancias de la aplicación que se ejecuta 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, la entrada de varios clústeres sigue enviando el tráfico a la instancia en buen estado de la aplicación que se está ejecutando en el otro clúster de GKE. Esto hace que la interrupción del clúster sea invisible para el usuario final y la aplicación entrega 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 --zone=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, el nombre del grupo de instancias asociado con el grupo de nodos del clúster de producción de GKE 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 tienen una marca verde en su lugar.
Abre un navegador web e ingresa lo siguiente en la URL:
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 característica nueva. Para administrar aún más la aplicación, solo debes 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 obtiene acceso a las canalizaciones y los repositorios de Git de tu aplicación para administrarla.
Limpia
Para evitar que se generen costos en tu cuenta de Google Cloud por los recursos que se usaron en este instructivo, sigue estos pasos.
Borra el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
¿Qué sigue?
- Obtén más información sobre las prácticas recomendadas para configurar la federación de identidades.
- Lee sobre Kubernetes y los desafíos de la implementación continua de software.
- Lee sobre patrones de registro y supervisión para nubes híbridas y múltiples.
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.