En este tutorial se muestra cómo actualizar un entorno de Google Kubernetes Engine (GKE) con varios clústeres mediante Multi Cluster Ingress. Este tutorial es una continuación del documento sobre las actualizaciones de GKE multiclúster con Multi Cluster Ingress, que explica el proceso, la arquitectura y los términos con más detalle. Te recomendamos que leas el documento de conceptos antes de este tutorial.
Para ver una comparación detallada entre Multi Cluster Ingress (MCI), Multi-cluster Gateway (MCG) y el balanceador de carga con grupos de endpoints de red independientes (LB y Standalone NEGs), consulta Elegir la API de balanceo de carga multiclúster para GKE.
Este documento está dirigido a los administradores que se encargan de mantener las flotas de clústeres de GKE. Google Cloud
Te recomendamos que actualices automáticamente tus clústeres de GKE. La actualización automática es una forma totalmente gestionada de actualizar automáticamente los clústeres (plano de control y nodos) según una programación de lanzamientos determinada porGoogle Cloud. No requiere ninguna intervención por parte del operador. Sin embargo, si quieres tener más control sobre cómo y cuándo se actualizan los clústeres, en este tutorial se explica un método para actualizar varios clústeres en los que tus aplicaciones se ejecutan en todos los clústeres. A continuación, usa Ingress de varios clústeres para vaciar un clúster a la vez antes de actualizarlo.
Arquitectura
En este tutorial se usa la siguiente arquitectura. Hay un total de tres clústeres: dos clústeres (blue y green) actúan como clústeres idénticos con la misma aplicación desplegada y un clúster (ingress-config) actúa como clúster de plano de control que configura Multi Cluster Ingress. En este tutorial, desplegarás una aplicación de ejemplo en dos clústeres de aplicaciones (clústeres blue y green).

Objetivos
- Crea tres clústeres de GKE y regístralos como una flota.
- Configura un clúster de GKE (
ingress-config) como clúster de configuración central. - Despliega una aplicación de ejemplo en los otros clústeres de GKE.
- Configura Ingress con varios clústeres para enviar el tráfico de clientes a la aplicación que se ejecuta en ambos clústeres de aplicaciones.
- Configura un generador de carga en la aplicación y configura la monitorización.
- Quita (drena) un clúster de aplicaciones de la entrada de varios clústeres y actualiza el clúster drenado.
- Redirige el tráfico al clúster actualizado mediante Ingress de varios clústeres.
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.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que hayas creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
- Para seguir este tutorial, debes configurar Ingress con varios clústeres para que se cumplan los siguientes requisitos:
- Dos o más clústeres con las mismas aplicaciones, como espacios de nombres, implementaciones y servicios, que se ejecutan en todos los clústeres.
- La actualización automática está desactivada en todos los clústeres.
- Los clústeres son clústeres nativos de VPC que usan intervalos de direcciones IP con alias.
- Tener habilitado el balanceo de carga de HTTP (habilitado de forma predeterminada).
gcloud --versiondebe ser 369 o superior. Los pasos para registrar un clúster de GKE dependen de esta versión o de una posterior.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate Cloud Shell.
Configura tu proyecto predeterminado:
export PROJECT=$(gcloud info --format='value(config.project)') gcloud config set project ${PROJECT}Habilita las APIs de GKE, Hub y
multiclusteringress:gcloud services enable container.googleapis.com \ gkehub.googleapis.com \ multiclusteringress.googleapis.com \ multiclusterservicediscovery.googleapis.comEn Cloud Shell, clona el repositorio para obtener los archivos de este tutorial:
cd ${HOME} git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesCrea un directorio
WORKDIR:cd kubernetes-engine-samples/networking/gke-multicluster-upgrade-mci/ export WORKDIR=`pwd`En Cloud Shell, crea tres clústeres de GKE:
gcloud container clusters create ingress-config --location us-west1-a \ --release-channel=None --no-enable-autoupgrade --num-nodes=4 \ --enable-ip-alias --workload-pool=${PROJECT}.svc.id.goog --quiet --async gcloud container clusters create blue --location us-west1-b --num-nodes=3 \ --release-channel=None --no-enable-autoupgrade --enable-ip-alias \ --workload-pool=${PROJECT}.svc.id.goog --quiet --async gcloud container clusters create green --location us-west1-c --num-nodes=3 \ --release-channel=None --no-enable-autoupgrade --enable-ip-alias \ --workload-pool=${PROJECT}.svc.id.goog --quietEn este tutorial, crearás los clústeres en una sola región, en tres zonas diferentes:
us-west1-a,us-west1-byus-west1-c. Para obtener más información sobre las regiones y las zonas, consulta el artículo sobre geografía y regiones.Espera unos minutos hasta que se hayan creado todos los clústeres correctamente. Asegúrate de que los clústeres se estén ejecutando:
gcloud container clusters listEl resultado debería ser similar al siguiente:
NAME: ingress-config LOCATION: us-west1-a MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.233.186.135 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 4 STATUS: RUNNING NAME: blue LOCATION: us-west1-b MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 34.82.35.222 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNING NAME: green LOCATION: us-west1-c MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.185.204.26 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNINGCrea un archivo
kubeconfigy conéctalo a todos los clústeres para generar entradas en el archivokubeconfig:touch gke-upgrade-kubeconfig export KUBECONFIG=gke-upgrade-kubeconfig gcloud container clusters get-credentials ingress-config \ --location us-west1-a --project ${PROJECT} gcloud container clusters get-credentials blue --location us-west1-b \ --project ${PROJECT} gcloud container clusters get-credentials green --location us-west1-c \ --project ${PROJECT}El archivo
kubeconfigse usa para crear la autenticación en los clústeres. Para ello, se crea un usuario y un contexto para cada clúster. Después de crear el archivokubeconfig, puedes cambiar rápidamente de contexto entre clústeres.Comprueba que haya tres clústeres en el archivo
kubeconfig:kubectl config view -ojson | jq -r '.clusters[].name'El resultado es el siguiente:
gke_gke-multicluster-upgrades_us-west1-a_ingress-config gke_gke-multicluster-upgrades_us-west1-b_blue gke_gke-multicluster-upgrades_us-west1-c_greenObtén el contexto de los tres clústeres para usarlos más adelante:
export INGRESS_CONFIG_CLUSTER=$(kubectl config view -ojson | jq \ -r '.clusters[].name' | grep ingress-config) export BLUE_CLUSTER=$(kubectl config view -ojson | jq \ -r '.clusters[].name' | grep blue) export GREEN_CLUSTER=$(kubectl config view -ojson | jq \ -r '.clusters[].name' | grep green) echo -e "${INGRESS_CONFIG_CLUSTER}\n${BLUE_CLUSTER}\n${GREEN_CLUSTER}"El resultado es el siguiente:
gke_gke-multicluster-upgrades_us-west1-a_ingress-config gke_gke-multicluster-upgrades_us-west1-b_blue gke_gke-multicluster-upgrades_us-west1-c_greenRegistra los tres clústeres como una flota:
gcloud container fleet memberships register ingress-config \ --gke-cluster=us-west1-a/ingress-config \ --enable-workload-identity gcloud container fleet memberships register blue \ --gke-cluster=us-west1-b/blue \ --enable-workload-identity gcloud container fleet memberships register green \ --gke-cluster=us-west1-c/green \ --enable-workload-identityVerifica que los clústeres estén registrados:
gcloud container fleet memberships listEl resultado debería ser similar al siguiente:
NAME: blue EXTERNAL_ID: 401b4f08-8246-4f97-a6d8-cf1b78c2a91d NAME: green EXTERNAL_ID: 8041c36a-9d42-40c8-a67f-54fcfd84956e NAME: ingress-config EXTERNAL_ID: 65ac48fe-5043-42db-8b1e-944754a0d725Configura el clúster
ingress-configcomo clúster de configuración de Ingress de varios clústeres habilitando la funciónmulticlusteringressa través del Hub:gcloud container fleet ingress enable --config-membership=ingress-configEl comando anterior añade los
MulticlusterIngressyMulticlusterServiceCRDs (Custom Resource Definitions) al clústeringress-config. Este comando tarda unos minutos en completarse. Espera antes de continuar con el siguiente paso.Verifica que el clúster
ingress-clusterse ha configurado correctamente para Ingress con varios clústeres:watch gcloud container fleet ingress describeEspera hasta que el resultado sea similar al siguiente:
createTime: '2022-07-05T10:21:40.383536315Z' membershipStates: projects/662189189487/locations/global/memberships/blue: state: code: OK updateTime: '2022-07-08T10:59:44.230329189Z' projects/662189189487/locations/global/memberships/green: state: code: OK updateTime: '2022-07-08T10:59:44.230329950Z' projects/662189189487/locations/global/memberships/ingress-config: state: code: OK updateTime: '2022-07-08T10:59:44.230328520Z' name: projects/gke-multicluster-upgrades/locations/global/features/multiclusteringress resourceState: state: ACTIVE spec: multiclusteringress: configMembership: projects/gke-multicluster-upgrades/locations/global/memberships/ingress-config state: state: code: OK description: Ready to use updateTime: '2022-07-08T10:57:33.303543609Z' updateTime: '2022-07-08T10:59:45.247576318Z'Para salir del comando
watch, pulsa Control+C.En Cloud Shell, despliega la aplicación de ejemplo
whereamien los clústeresblueygreen:kubectl --context ${BLUE_CLUSTER} apply -f ${WORKDIR}/application-manifests kubectl --context ${GREEN_CLUSTER} apply -f ${WORKDIR}/application-manifestsEspera unos minutos y comprueba que todos los pods de los clústeres
blueygreentengan el estadoRunning:kubectl --context ${BLUE_CLUSTER} get pods kubectl --context ${GREEN_CLUSTER} get podsEl resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE whereami-deployment-756c7dc74c-zsmr6 1/1 Running 0 74s NAME READY STATUS RESTARTS AGE whereami-deployment-756c7dc74c-sndz7 1/1 Running 0 68s.En Cloud Shell, despliega el recurso
MulticlusterIngressen el clústeringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mci.yamlEl resultado es el siguiente:
multiclusteringress.networking.gke.io/whereami-mci createdDespliega el recurso
MulticlusterServiceen el clústeringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yamlEl resultado es el siguiente:
multiclusterservice.networking.gke.io/whereami-mcs createdPara comparar los dos recursos, sigue estos pasos:
Inspecciona el recurso
MulticlusterIngress:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusteringress -o yamlLa salida contiene lo siguiente:
spec: template: spec: backend: serviceName: whereami-mcs servicePort: 8080El recurso
MulticlusterIngresses similar al recurso Ingress de Kubernetes, excepto que la especificaciónserviceNameapunta a un recursoMulticlusterService.Inspecciona el recurso
MulticlusterService:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice -o yamlLa salida contiene lo siguiente:
spec: clusters: - link: us-west1-b/blue - link: us-west1-c/green template: spec: ports: - name: web port: 8080 protocol: TCP targetPort: 8080 selector: app: whereamiEl recurso
MulticlusterServicees similar a un recurso de servicio de Kubernetes, pero tiene una especificaciónclusters. El valor declusterses la lista de clústeres registrados en los que se crea el recursoMulticlusterService.Verifica que el recurso
MulticlusterIngresshaya creado un balanceador de carga con un servicio de backend que apunte al recursoMulticlusterService:watch kubectl --context ${INGRESS_CONFIG_CLUSTER} \ get multiclusteringress -o jsonpath="{.items[].status.VIP}"Esta operación puede tardar hasta 10 minutos. Espera hasta que el resultado sea similar al siguiente:
34.107.246.9Para salir del comando
watch, pulsaControl+C.
En Cloud Shell, obtén la dirección IP virtual de Cloud Load Balancing:
export GCLB_VIP=$(kubectl --context ${INGRESS_CONFIG_CLUSTER} \ get multiclusteringress -o json | jq -r '.items[].status.VIP') \ && echo ${GCLB_VIP}El resultado debería ser similar al siguiente:
34.107.246.9Usa
curlpara acceder al balanceador de carga y a la aplicación implementada:curl ${GCLB_VIP}El resultado debería ser similar al siguiente:
{ "cluster_name": "green", "host_header": "34.107.246.9", "pod_name": "whereami-deployment-756c7dc74c-sndz7", "pod_name_emoji": "😇", "project_id": "gke-multicluster-upgrades", "timestamp": "2022-07-08T14:26:07", "zone": "us-west1-c" }Ejecuta el comando
curlrepetidamente. Observa que las solicitudes se están equilibrando entre la aplicaciónwhereami, que se ha implementado en dos clústeres,blueygreen.Configura el manifiesto
loadgeneratorpara enviar el tráfico de clientes a Cloud Load Balancing:TEMPLATE=loadgen-manifests/loadgenerator.yaml.templ && envsubst < ${TEMPLATE} > ${TEMPLATE%.*}Despliega el
loadgeneratoren el clústeringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/loadgen-manifestsVerifica que todos los pods
loadgeneratordel clústeringress-configtengan el estadoRunning:kubectl --context ${INGRESS_CONFIG_CLUSTER} get podsEl resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE loadgenerator-5498cbcb86-hqscp 1/1 Running 0 53s loadgenerator-5498cbcb86-m2z2z 1/1 Running 0 53s loadgenerator-5498cbcb86-p56qb 1/1 Running 0 53sSi alguno de los pods no tiene el estado
Running, espera unos minutos y vuelve a ejecutar el comando.Crea un panel de control para mostrar el tráfico que llega a Ingress con varios clústeres:
export DASH_ID=$(gcloud monitoring dashboards create \ --config-from-file=dashboards/cloud-ops-dashboard.json \ --format=json | jq -r ".name" | awk -F '/' '{print $4}')El resultado debería ser similar al siguiente:
Created [721b6c83-8f9b-409b-a009-9fdf3afb82f8]Las métricas de Cloud Load Balancing están disponibles en la consola deGoogle Cloud . Genera la URL:
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"El resultado debería ser similar al siguiente:
https://console.cloud.google.com/monitoring/dashboards/builder/721b6c83-8f9b-409b-a009-9fdf3afb82f8/?project=gke-multicluster-upgrades&timeDomain=1h"En un navegador, ve a la URL generada por el comando anterior.
El tráfico a la aplicación de ejemplo va del generador de carga a los clústeres
blueygreen(indicados por las dos zonas en las que se encuentran los clústeres). El gráfico de métricas de la cronología muestra el tráfico que va a ambos backends.Los valores al colocar el cursor sobrek8s1-indican que el grupo de puntos finales de red (NEG) de los dos frontendMulticlusterServicesse está ejecutando en los clústeresblueygreen.
En Cloud Shell, actualiza el recurso
MulticlusterServiceen el clústeringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} \ apply -f ${WORKDIR}/multicluster-manifests/mcs-green.yamlVerifica que solo tengas el clúster
greenen la especificaciónclusters:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \ -o json | jq '.items[].spec.clusters'El resultado es el siguiente:
[ { "link": "us-west1-c/green" } ]Solo el clúster
greense incluye en la especificaciónclusters, por lo que solo el clústergreenestá en el grupo de balanceo de carga.Puedes ver las métricas de Cloud Load Balancing en laGoogle Cloud consola. Genera la URL:
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"En un navegador, ve a la URL generada a partir del comando anterior.
El gráfico muestra que solo el clúster
greenestá recibiendo tráfico.
En Cloud Shell, obtén la versión actual de los clústeres:
gcloud container clusters listEl resultado debería ser similar al siguiente:
NAME: ingress-config LOCATION: us-west1-a MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.233.186.135 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 4 STATUS: RUNNING NAME: blue LOCATION: us-west1-b MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 34.82.35.222 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNING NAME: green LOCATION: us-west1-c MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.185.204.26 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNINGLas versiones de tu clúster pueden ser diferentes en función de cuándo completes este tutorial.
Obtén la lista de versiones de
MasterVersionsdisponibles en la zona:gcloud container get-server-config --location us-west1-b --format=json | jq \ '.validMasterVersions[0:20]'El resultado debería ser similar al siguiente:
[ "1.24.1-gke.1400", "1.23.7-gke.1400", "1.23.6-gke.2200", "1.23.6-gke.1700", "1.23.6-gke.1501", "1.23.6-gke.1500", "1.23.5-gke.2400", "1.23.5-gke.1503", "1.23.5-gke.1501", "1.22.10-gke.600", "1.22.9-gke.2000", "1.22.9-gke.1500", "1.22.9-gke.1300", "1.22.8-gke.2200", "1.22.8-gke.202", "1.22.8-gke.201", "1.22.8-gke.200", "1.21.13-gke.900", "1.21.12-gke.2200", "1.21.12-gke.1700" ]Obtén una lista de las versiones de
NodeVersionsdisponibles en la zona:gcloud container get-server-config --location us-west1-b --format=json | jq \ '.validNodeVersions[0:20]'El resultado debería ser similar al siguiente:
[ "1.24.1-gke.1400", "1.23.7-gke.1400", "1.23.6-gke.2200", "1.23.6-gke.1700", "1.23.6-gke.1501", "1.23.6-gke.1500", "1.23.5-gke.2400", "1.23.5-gke.1503", "1.23.5-gke.1501", "1.22.10-gke.600", "1.22.9-gke.2000", "1.22.9-gke.1500", "1.22.9-gke.1300", "1.22.8-gke.2200", "1.22.8-gke.202", "1.22.8-gke.201", "1.22.8-gke.200", "1.22.7-gke.1500", "1.22.7-gke.1300", "1.22.7-gke.900" ]Define una variable de entorno para una versión
MasterVersionyNodeVersionque esté en las listasMasterVersionsyNodeVersions, y que sea superior a la versión actual del clústerblue. Por ejemplo:export UPGRADE_VERSION="1.22.10-gke.600"En este tutorial se usa la versión
1.22.10-gke.600. Las versiones de tu clúster pueden ser diferentes en función de las versiones que estén disponibles cuando completes este tutorial. Para obtener más información sobre cómo actualizar, consulta Actualizar clústeres y grupos de nodos.Actualiza el nodo
control planedel clústerblue:gcloud container clusters upgrade blue \ --location us-west1-b --master --cluster-version ${UPGRADE_VERSION}Para confirmar la actualización, pulsa
Y.Este proceso tarda unos minutos en completarse. Espera a que se complete la actualización antes de continuar.
Una vez completada la actualización, el resultado es el siguiente:
Updated [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].Actualiza los nodos del clúster
blue:gcloud container clusters upgrade blue \ --location=us-west1-b --node-pool=default-pool \ --cluster-version ${UPGRADE_VERSION}Para confirmar la actualización, pulsa
Y.Este proceso tarda unos minutos en completarse. Espera a que se complete la actualización del nodo antes de continuar.
Una vez completada la actualización, el resultado es el siguiente:
Upgrading blue... Done with 3 out of 3 nodes (100.0%): 3 succeeded...done. Updated [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].Verifica que el clúster
bluese haya actualizado:gcloud container clusters listEl resultado debería ser similar al siguiente:
NAME: ingress-config LOCATION: us-west1-a MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.233.186.135 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 4 STATUS: RUNNING NAME: blue LOCATION: us-west1-b MASTER_VERSION: 1.22.10-gke.600 MASTER_IP: 34.82.35.222 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.10-gke.600 NUM_NODES: 3 STATUS: RUNNING NAME: green LOCATION: us-west1-c MASTER_VERSION: 1.22.8-gke.202 MASTER_IP: 35.185.204.26 MACHINE_TYPE: e2-medium NODE_VERSION: 1.22.8-gke.202 NUM_NODES: 3 STATUS: RUNNINGEn Cloud Shell, comprueba que el despliegue de la aplicación se esté ejecutando en el clúster
blueantes de volver a añadirlo al pool de balanceo de carga:kubectl --context ${BLUE_CLUSTER} get podsEl resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE whereami-deployment-756c7dc74c-xdnb6 1/1 Running 0 17mActualiza el recurso
MutliclusterServicepara volver a añadir el clústerblueal grupo de balanceo de carga:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply \ -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yamlVerifica que tienes los clústeres
blueygreenen la especificación de clústeres:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \ -o json | jq '.items[].spec.clusters'El resultado es el siguiente:
[ { "link": "us-west1-b/blue" }, { "link": "us-west1-c/green" } ]Los clústeres
blueygreenahora están en la especificaciónclusters.Las métricas de Cloud Load Balancing están disponibles en laGoogle Cloud consola. Genera la URL:
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"En un navegador, ve a la URL generada por el comando anterior.
El gráfico muestra que tanto los clústeres azules como los verdes reciben tráfico del generador de carga mediante el balanceador de carga.
Enhorabuena. Has actualizado correctamente un clúster de GKE en una arquitectura de varios clústeres mediante Multi Cluster Ingress.
Para actualizar el clúster
green, repite el proceso para vaciar y actualizar el clúster azul, sustituyendoblueporgreen.En Cloud Shell, da de baja y elimina los clústeres
blueygreen:gcloud container fleet memberships unregister blue --gke-cluster=us-west1-b/blue gcloud container clusters delete blue --location us-west1-b --quiet gcloud container fleet memberships unregister green --gke-cluster=us-west1-c/green gcloud container clusters delete green --location us-west1-c --quietElimina el recurso
MuticlusterIngressdel clústeringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} delete -f ${WORKDIR}/multicluster-manifests/mci.yamlEste comando elimina los recursos de Cloud Load Balancing del proyecto.
Da de baja y elimina el clúster
ingress-config:gcloud container fleet memberships unregister ingress-config --gke-cluster=us-west1-a/ingress-config gcloud container clusters delete ingress-config --location us-west1-a --quietVerifica que se hayan eliminado todos los clústeres:
gcloud container clusters listEl resultado es el siguiente:
*<null>*Restablece el archivo
kubeconfig:unset KUBECONFIGElimina la carpeta
WORKDIR:cd ${HOME} rm -rf ${WORKDIR}- 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.
- Consulta más información sobre Multi Cluster Ingress.
- Consulta cómo desplegar Ingress de varios clústeres en clústeres.
- Consulta arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.
Configurar el entorno
Crear y registrar clústeres de GKE en Hub
En esta sección, crearás tres clústeres de GKE y los registrarás en GKE Hub.
Crear clústeres de GKE
Registrar clústeres de GKE en una flota
Registrar tus clústeres en una flota te permite operar tus clústeres de Kubernetes en entornos híbridos. Los clústeres registrados en flotas pueden usar funciones avanzadas de GKE, como la entrada multi-clúster. Para registrar un clúster de GKE en una flota, puedes usar una Google Cloud cuenta de servicio directamente o usar el enfoque recomendado de federación de Workload Identity para GKE , que permite que una cuenta de servicio de Kubernetes de tu clúster de GKE actúe como cuenta de servicio de gestión de identidades y accesos.
Desplegar una aplicación de ejemplo en los clústeres azul y verde
Configurar Ingress de varios clústeres
En esta sección, crearás un recurso Ingress multiclúster que envíe tráfico a la aplicación que se ejecuta en los clústeres blue y green. Usas Cloud Load Balancing para crear un balanceador de carga que utilice la aplicación whereami en los clústeres blue y green como back-ends. Para crear el balanceador de carga, necesitas dos recursos: un MultiClusterIngress y uno o varios MultiClusterServices.
Los objetos MultiClusterIngress y MultiClusterService son análogos multiclúster de los recursos Ingress y Service de Kubernetes que se usan en el contexto de un solo clúster.
Configurar el generador de carga
En esta sección, configurarás un loadgenerator servicio que genere tráfico de cliente a la dirección IP virtual de Cloud Load Balancing. En primer lugar, el tráfico se envía a los clústeres blue y green, ya que el recurso MulticlusterService está configurado para enviar tráfico a ambos clústeres. Más adelante, configurará el MulticlusterService
recurso para que envíe tráfico a un solo clúster.
Supervisar el tráfico
En esta sección, monitorizarás el tráfico de la aplicación whereami mediante la consolaGoogle Cloud .
En la sección anterior, has configurado una implementación de loadgenerator que simula el tráfico de clientes accediendo a la aplicación whereami a través de la dirección IP virtual de Cloud Load Balancing. Puedes monitorizar estas métricas a través de la consolaGoogle Cloud . Primero debes configurar la monitorización para poder monitorizar los clústeres mientras los vacías para realizar las actualizaciones (se describe en la siguiente sección).
Drenar y actualizar el clúster blue
En esta sección, vaciarás el clúster blue. Drenar un clúster significa eliminarlo del grupo de balanceo de carga. Una vez que hayas vaciado el clúster blue, todo el tráfico de clientes destinado a la aplicación se dirigirá al clúster green.
Puedes monitorizar este proceso como se describe en la sección anterior. Una vez que se haya vaciado el clúster, puedes actualizarlo. Después de la actualización, puedes volver a añadirlo al grupo de balanceo de carga. Repite estos pasos para actualizar el otro clúster (no se muestra en este tutorial).
Para vaciar el clúster blue, actualiza el recurso MulticlusterService en el clúster ingress-cluster y elimina el clúster blue de la especificación clusters.
Vacía el clúster azul
Actualizar el clúster blue
Ahora que el clúster blue ya no recibe tráfico de clientes, puedes actualizarlo (plano de control y nodos).
Vuelve a añadir el clúster blue al pool de balanceo de carga
En esta sección, volverá a añadir el clúster blue al pool de balanceo de carga.
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
La forma más fácil de evitar que te cobren es eliminar el Google Cloud proyecto que has creado para el tutorial. También puedes eliminar los recursos de forma individual.