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:
- CI/CD modernas con GKE: un framework de distribución de software
- CI/CD modernas con GKE: crear un sistema de CI/CD (arquitectura de referencia)
- CI/CD modernas con GKE: aplicar el flujo de trabajo de desarrollo (este documento)
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 flujo de trabajo, que empieza en el repositorio de código de la integración continua, incluye los siguientes pasos:
Compartes el código fuente de tu aplicación a través de los repositorios de la aplicación.
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.
El proceso de integración continua también crea una versión de entrega continua para la aplicación en Cloud Deploy.
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.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.
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:
- Google Kubernetes Engine
- Google Kubernetes Engine (GKE) Enterprise edition for Config Sync
- Artifact Registry
- Cloud Build
- Cloud Deploy
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
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
- Para este tutorial, implementa la arquitectura de referencia de esta serie.
Prepara tu entorno
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:
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.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 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.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 Cloud Build de infraestructura que toma el código del repositorio de infraestructura y crea los recursos en función de su definición.
Un repositorio de aplicaciones del repositorio de inicio de aplicaciones que aloja el código fuente de la aplicación.
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.
En la Google Cloud consola, ve a la página Cloud Build:
Haz clic en
create-app
activador.Haga clic en MOSTRAR VISTA PREVIA DE LA URL para ver la URL necesaria para invocar el webhook.
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.
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á enapplication-factory-repo
.Revisa el archivo de definición de la aplicación:
En un navegador web, ve a GitHub e inicia sesión en tu cuenta.
Haz clic en el icono de imagen y, a continuación, 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 ha creado el activadorcreate-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.
En la consola: Google Cloud
Haz clic en el activador
tf-apply
.Haz clic en "MOSTRAR VISTA PREVIA DE LA URL" para ver la URL necesaria para invocar el webhook.
Invoca el activador:
curl "WEBHOOK_URL" -d '{}'
En el ejemplo de código anterior:
- Sustituye
WEBHOOK_URL
por la URL obtenida del activador.
- Sustituye
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
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 CloudObtén las credenciales del clúster de GKE de desarrollo.
gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a
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
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
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 ramacicd-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 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 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 configuracionesDockerfile
ykustomize
que describen las configuraciones necesarias de la aplicación, así comoskaffold.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
.
Para invocar el activador de Cloud Build, añade una línea a un archivo del repositorio. A continuación, envía los cambios:
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 GitHubGITHUB_USERNAME
: el nombre de usuario asociado a tu cuenta de GitHub
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.
Añade una línea al archivo env/cicd-trigger/main.tf, confirma el cambio y envíalo.
echo "" >> env/cicd-trigger/main.tf
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
.
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.
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.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.
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.
Añade una línea nueva a un archivo del 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
Sustituye
GITHUB_ORG
por tu organización de GitHub.Añade una línea al archivo
skaffold.yaml
.echo "" >> skaffold.yaml
Confirma e inserta 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
.
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.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:
Obtén las credenciales del clúster de desarrollo.
gcloud container clusters get-credentials gke-dev-us-central1 --location us-central1-a
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
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:El resultado es el siguiente:
Hello World!
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.
En Cloud Shell, cambia al directorio del repositorio
sample
que ya has clonado:Actualiza la aplicación para que muestre otro mensaje:
sed -i "s/Hello World/My new feature/g" main.py
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
.Monitoriza 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 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:
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
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
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:
El resultado es el siguiente:
My new feature!
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
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.Ve a GitHub y accede al repositorio
acm-gke-infrastructure-repo
. Haz clic enPull requests
y, a continuación, en el botónNew pull request
. En el menú Base, elige staging y, en el menú Comparar, elige dev. Haz clic en el botónCreate pull request
.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.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.
Haz clic en
Pull requests
y, a continuación, en el botónNew pull request
. En el menú Base, elige prod y, en el menú Comparar, elige staging. Haz clic en el botónCreate pull request
.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.
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 CloudComprueba que se haya definido la variable de entorno:
echo $RELEASE
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
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.Verifica que el despliegue de la versión de prueba se ha realizado correctamente:
Obtén las credenciales del clúster de staging:
gcloud container clusters get-credentials gke-staging-us-central1 --location us-central1-a
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
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:
El resultado es el siguiente:
My new feature!
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.
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
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.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
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.
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
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
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.
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.
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.Muestra la regla de reenvío asociada al balanceador de carga para encontrar la dirección IP.
gcloud compute forwarding-rules list
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
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:
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 ""}'
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.
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.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.
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
- 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.
Siguientes pasos
- Consulta las prácticas recomendadas para configurar la federación de identidades.
- Consulta el artículo Kubernetes y los retos del despliegue continuo de software.
- Consulta información sobre los patrones de almacenamiento de registros y monitorización para despliegues híbridos y multinube.
- Consulta arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.