Questo tutorial mostra come eseguire l'upgrade di un ambiente Google Kubernetes Engine (GKE) multi-cluster utilizzando Ingress multi-cluster . Questo tutorial è la continuazione del documento sugli upgrade GKE multi-cluster con Ingress multi-cluster che spiega la procedura, l'architettura e i termini in modo più dettagliato. Ti consigliamo di leggere il documento sui concetti prima di questo tutorial.
Per un confronto dettagliato tra Ingress multi-cluster (MCI), gateway multi-cluster (MCG) e bilanciatore del carico con gruppi di endpoint di rete autonomi (LB e NEG autonomi), consulta Scegliere l'API di bilanciamento del carico multi-cluster per GKE.
Questo documento è rivolto agli Google Cloud amministratori responsabili della gestione dei fleet per i cluster GKE.
Ti consigliamo di eseguire l'upgrade automatico dei cluster GKE. L'upgrade automatico è un modo completamente gestito per aggiornare automaticamente i cluster (piano di controllo e nodi) in base a una pianificazione delle release stabilita daGoogle Cloud. Non è richiesto alcun intervento da parte dell'operatore. Tuttavia, se vuoi un maggiore controllo su come e quando eseguire l'upgrade dei cluster, questo tutorial illustra un metodo per eseguire l'upgrade di più cluster in cui le tue app vengono eseguite su tutti i cluster. Utilizza quindi Ingress multi-cluster per svuotare un cluster alla volta prima dell'upgrade.
Architettura
Questo tutorial utilizza la seguente architettura. Esistono in totale tre
cluster: due cluster (blue
e green
) fungono da cluster identici con la stessa app di cui è stato eseguito il deployment e un cluster (ingress-config
) funge da cluster del piano di controllo
che configura Ingress multi-cluster. In questo tutorial esegui il deployment di un'app di esempio in due cluster di app (cluster blue
e green
).
Obiettivi
- Crea tre cluster GKE e registrali come parco risorse.
- Configura un cluster GKE (
ingress-config
) come cluster di configurazione centrale. - Esegui il deployment di un'app di esempio negli altri cluster GKE.
- Configura Ingress multi-cluster per inviare il traffico client all'app in esecuzione su entrambi i cluster di app.
- Configura un generatore di carico per l'app e configura il monitoraggio.
- Rimuovi (svuota) un cluster di app dall'Ingress multi-cluster e esegui l'upgrade del cluster svuotato.
- Sposta il traffico di nuovo nel cluster di cui è stato eseguito l'upgrade utilizzando Ingress multi-cluster.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Prima di iniziare
- Per questo tutorial devi configurare Ingress multi-cluster in modo che siano configurati i seguenti elementi:
- Due o più cluster con le stesse app, ad esempio spazi dei nomi, deployment e servizi, in esecuzione su tutti i cluster.
- L'upgrade automatico è disattivato per tutti i cluster.
- I cluster sono cluster VPC nativi che utilizzano intervalli di indirizzi IP alias
- Il bilanciamento del carico HTTP deve essere abilitato (è abilitato per impostazione predefinita).
gcloud --version
deve essere pari o superiore a 369. I passaggi per la registrazione del cluster GKE dipendono da questa versione o versioni successive.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate Cloud Shell.
Imposta il progetto predefinito:
export PROJECT=$(gcloud info --format='value(config.project)') gcloud config set project ${PROJECT}
Abilita le API GKE, Hub e
multiclusteringress
:gcloud services enable container.googleapis.com \ gkehub.googleapis.com \ multiclusteringress.googleapis.com \ multiclusterservicediscovery.googleapis.com
Configura l'ambiente
In Cloud Shell, clona il repository per recuperare i file di questo tutorial:
cd ${HOME} git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Crea una directory
WORKDIR
:cd kubernetes-engine-samples/networking/gke-multicluster-upgrade-mci/ export WORKDIR=`pwd`
Crea e registra i cluster GKE in Hub
In questa sezione crei tre cluster GKE e li registri in GKE Enterprise Hub.
Creare cluster GKE
In Cloud Shell, crea tre cluster GKE:
gcloud container clusters create ingress-config --zone 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 --zone 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 --zone us-west1-c --num-nodes=3 \ --release-channel=None --no-enable-autoupgrade --enable-ip-alias \ --workload-pool=${PROJECT}.svc.id.goog --quiet
Ai fini di questo tutorial, crea i cluster in un'unica regione, in tre zone diverse:
us-west1-a
,us-west1-b
eus-west1-c
. Per saperne di più su regioni e zone, consulta Geografia e regioni.Attendi qualche minuto fino al completamento della creazione di tutti i cluster. Assicurati che i cluster siano in esecuzione:
gcloud container clusters list
L'output è simile al seguente:
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: RUNNING
Crea un file
kubeconfig
e connettiti a tutti i cluster per generare voci nel filekubeconfig
:touch gke-upgrade-kubeconfig export KUBECONFIG=gke-upgrade-kubeconfig gcloud container clusters get-credentials ingress-config \ --zone us-west1-a --project ${PROJECT} gcloud container clusters get-credentials blue --zone us-west1-b \ --project ${PROJECT} gcloud container clusters get-credentials green --zone us-west1-c \ --project ${PROJECT}
Utilizza il file
kubeconfig
per creare l'autenticazione ai cluster creando un utente e un contesto per ciascun cluster. Dopo aver creato il filekubeconfig
, puoi cambiare rapidamente il contesto tra i cluster.Verifica di avere tre cluster nel file
kubeconfig
:kubectl config view -ojson | jq -r '.clusters[].name'
L'output è il seguente:
gke_gke-multicluster-upgrades_us-west1-a_ingress-config gke_gke-multicluster-upgrades_us-west1-b_blue gke_gke-multicluster-upgrades_us-west1-c_green
Recupera il contesto per i tre cluster per utilizzarlo in un secondo momento:
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}"
L'output è il seguente:
gke_gke-multicluster-upgrades_us-west1-a_ingress-config gke_gke-multicluster-upgrades_us-west1-b_blue gke_gke-multicluster-upgrades_us-west1-c_green
Registra i cluster GKE in un parco risorse
La registrazione dei cluster in un parco risorse ti consente di gestire i cluster Kubernetes in ambienti ibridi. I cluster registrati nei parchi risorse possono utilizzare le funzionalità GKE avanzate come Ingress multi-cluster. Per registrare un cluster GKE a un parco risorse, puoi utilizzare direttamente un Google Cloud account di servizio o l'approccio consigliato della federazione delle identità per i carichi di lavoro per GKE, che consente a un account di servizio Kubernetes nel cluster GKE di fungere da account di servizio Identity and Access Management.
Registra i tre cluster come parco risorse:
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-identity
Verifica che i cluster siano registrati:
gcloud container fleet memberships list
L'output è simile al seguente:
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-944754a0d725
Configura il cluster
ingress-config
come cluster di configurazione per Ingress multi-cluster attivando la funzionalitàmulticlusteringress
tramite Hub:gcloud container fleet ingress enable --config-membership=ingress-config
Il comando precedente aggiunge le definizioni di risorse personalizzate
MulticlusterIngress
eMulticlusterService
al clusteringress-config
. Il completamento di questo comando richiede alcuni minuti. Attendi prima di procedere con il passaggio successivo.Verifica che il cluster
ingress-cluster
sia stato configurato correttamente per Ingress multi-cluster:watch gcloud container fleet ingress describe
Attendi che l'output sia simile al seguente:
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'
Per uscire dal comando
watch
, premi Ctrl+C.
Esegui il deployment di un'applicazione di esempio nei cluster blu e verde
In Cloud Shell, esegui il deployment dell'app di esempio
whereami
nei clusterblue
egreen
:kubectl --context ${BLUE_CLUSTER} apply -f ${WORKDIR}/application-manifests kubectl --context ${GREEN_CLUSTER} apply -f ${WORKDIR}/application-manifests
Attendi qualche minuto e assicurati che tutti i pod nei cluster
blue
egreen
abbiano lo statoRunning
:kubectl --context ${BLUE_CLUSTER} get pods kubectl --context ${GREEN_CLUSTER} get pods
L'output è simile al seguente:
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.
Configura Ingress multi-cluster
In questa sezione, creerai un Ingress multi-cluster che invia traffico all'applicazione in esecuzione sui cluster blue
e green
. Utilizzi
Cloud Load Balancing
per creare un bilanciatore del carico che utilizzi l'app whereami
sia nei cluster blue
sia
green
come backend. Per creare il bilanciatore del carico, hai bisogno di due risorse: un MultiClusterIngress
e uno o più MultiClusterServices
.
Gli oggetti MultiClusterIngress
e MultiClusterService
sono analoghi multi-cluster per le risorse Ingress e Service Kubernetes esistenti utilizzate nel contesto di un singolo cluster.
In Cloud Shell, esegui il deployment della risorsa
MulticlusterIngress
nel clusteringress-config
:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mci.yaml
L'output è il seguente:
multiclusteringress.networking.gke.io/whereami-mci created
Esegui il deployment della risorsa
MulticlusterService
nel clusteringress-config
:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yaml
L'output è il seguente:
multiclusterservice.networking.gke.io/whereami-mcs created
Per confrontare le due risorse:
Controlla la risorsa
MulticlusterIngress
:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusteringress -o yaml
L'output contiene quanto segue:
spec: template: spec: backend: serviceName: whereami-mcs servicePort: 8080
La risorsa
MulticlusterIngress
è simile alla risorsa Kubernetes Ingress, tranne per il fatto che la specificaserviceName
rimanda a una risorsaMulticlusterService
.Controlla la risorsa
MulticlusterService
:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice -o yaml
L'output contiene quanto segue:
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: whereami
La risorsa
MulticlusterService
è simile a una risorsa di servizio Kubernetes, tranne per il fatto che ha una specificaclusters
. Il valoreclusters
è l'elenco dei cluster registrati in cui viene creata la risorsaMulticlusterService
.Verifica che la risorsa
MulticlusterIngress
abbia creato un bilanciatore del carico con un servizio di backend che rimandi alla risorsaMulticlusterService
:watch kubectl --context ${INGRESS_CONFIG_CLUSTER} \ get multiclusteringress -o jsonpath="{.items[].status.VIP}"
L'operazione potrebbe richiedere fino a 10 minuti Attendi che l'output sia simile al seguente:
34.107.246.9
Per uscire dal comando
watch
, premiControl+C
.
In Cloud Shell, ottieni l'IP virtuale di Cloud Load Balancing:
export GCLB_VIP=$(kubectl --context ${INGRESS_CONFIG_CLUSTER} \ get multiclusteringress -o json | jq -r '.items[].status.VIP') \ && echo ${GCLB_VIP}
L'output è simile al seguente:
34.107.246.9
Utilizza
curl
per accedere al bilanciatore del carico e all'applicazione di cui è stato eseguito il deployment:curl ${GCLB_VIP}
L'output è simile al seguente:
{ "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" }
Esegui il comando
curl
più volte. Tieni presente che le richieste vengono bilanciate in base al carico tra l'applicazionewhereami
di cui è stato eseguito il deployment in due cluster,blue
egreen
.
Configura il generatore di carico
In questa sezione, configuri un servizio loadgenerator
che genera traffico client verso il VIP di Cloud Load Balancing. Innanzitutto, il traffico viene inviato ai cluster blue
e green
perché la risorsa MulticlusterService
è configurata per inviare traffico a entrambi i cluster. In un secondo momento, configuri la risorsa MulticlusterService
per inviare traffico a un singolo cluster.
Configura il manifest
loadgenerator
per inviare il traffico client a Cloud Load Balancing:TEMPLATE=loadgen-manifests/loadgenerator.yaml.templ && envsubst < ${TEMPLATE} > ${TEMPLATE%.*}
Esegui il deployment di
loadgenerator
nel clusteringress-config
:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/loadgen-manifests
Verifica che tutti i pod
loadgenerator
nel clusteringress-config
abbiano lo statoRunning
:kubectl --context ${INGRESS_CONFIG_CLUSTER} get pods
L'output è simile al seguente:
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 53s
Se uno dei pod non ha lo stato
Running
, attendi qualche minuto e poi esegui di nuovo il comando.
Monitorare il traffico
In questa sezione, monitori il traffico verso l'app whereami
utilizzando la console Google Cloud.
Nella sezione precedente hai configurato un deployment di loadgenerator
che simula il traffico dei client accedendo all'app whereami
tramite l'IP virtuale di Cloud Load Balancing. Puoi monitorare queste metriche tramite la console Google Cloud. Devi prima configurare il monitoraggio in modo da poter monitorare il processo di svuotamento dei cluster per gli upgrade (descritto nella sezione successiva).
Crea una dashboard per mostrare il traffico che raggiunge Ingress multi-cluster:
export DASH_ID=$(gcloud monitoring dashboards create \ --config-from-file=dashboards/cloud-ops-dashboard.json \ --format=json | jq -r ".name" | awk -F '/' '{print $4}')
L'output è simile al seguente:
Created [721b6c83-8f9b-409b-a009-9fdf3afb82f8]
Le metriche di Cloud Load Balancing sono disponibili nella console Google Cloud. Genera l'URL:
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
L'output è simile al seguente:
https://console.cloud.google.com/monitoring/dashboards/builder/721b6c83-8f9b-409b-a009-9fdf3afb82f8/?project=gke-multicluster-upgrades&timeDomain=1h"
In un browser, vai all'URL generato dal comando precedente.
Il traffico verso l'applicazione di esempio passa dal generatore di carico ai cluster
blue
egreen
(indicati dalle due zone in cui si trovano i cluster). Il grafico delle metriche della cronologia mostra il traffico in entrata in entrambi i backend.I valori del passaggio del mouse soprak8s1-
indicano che i gruppi di endpoint di rete (NEG) per i due frontendMulticlusterServices
sono in esecuzione nei clusterblue
egreen
.
Svuota ed esegui l'upgrade del cluster blue
In questa sezione, svuoti il cluster blue
. Lo svuotamento di un cluster comporta la sua rimozione dal pool di bilanciamento del carico. Dopo aver svuotato il cluster blue
, tutto il traffico client destinato all'applicazione viene indirizzato al cluster green
.
Puoi monitorare questa procedura come descritto nella sezione precedente. Dopo aver svuotato il cluster, puoi eseguirne l'upgrade. Dopo l'upgrade, puoi inserirlo nuovamente nel pool di bilanciamento del carico. Ripeti questi passaggi per eseguire l'upgrade dell'altro cluster (non mostrato in questo tutorial).
Per svuotare il cluster blue
, aggiorna la risorsa MulticlusterService
nel cluster ingress-cluster
e rimuovi il cluster blue
dalla specifica clusters
.
Scarica il cluster blu
In Cloud Shell, aggiorna la risorsa
MulticlusterService
nel clusteringress-config
:kubectl --context ${INGRESS_CONFIG_CLUSTER} \ apply -f ${WORKDIR}/multicluster-manifests/mcs-green.yaml
Verifica di avere solo il cluster
green
nella specificaclusters
:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \ -o json | jq '.items[].spec.clusters'
L'output è il seguente:
[ { "link": "us-west1-c/green" } ]
Nella specifica
clusters
è elencato solo il clustergreen
, pertanto solo il clustergreen
è nel pool di bilanciamento del carico.Puoi visualizzare le metriche delle metriche di Cloud Load Balancing nella console Google Cloud. Genera l'URL:
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
In un browser, vai all'URL generato dal comando precedente.
Il grafico mostra che solo il cluster
green
riceve traffico.
Esegui l'upgrade del cluster blue
Ora che il cluster blue
non riceve più traffico client, puoi eseguire l'upgrade del cluster (piano di controllo e nodi).
In Cloud Shell, ottieni la versione corrente dei cluster:
gcloud container clusters list
L'output è simile al seguente:
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: RUNNING
Le versioni del cluster potrebbero essere diverse a seconda di quando completi questo tutorial.
Visualizza l'elenco delle versioni di
MasterVersions
disponibili nella zona:gcloud container get-server-config --zone us-west1-b --format=json | jq \ '.validMasterVersions[0:20]'
L'output è simile al seguente:
[ "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" ]
Visualizza un elenco delle versioni di
NodeVersions
disponibili nella zona:gcloud container get-server-config --zone us-west1-b --format=json | jq \ '.validNodeVersions[0:20]'
L'output è simile al seguente:
[ "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" ]
Imposta una variabile di ambiente per una versione
MasterVersion
eNodeVersion
che si trovi negli elenchiMasterVersions
eNodeVersions
ed è superiore alla versione corrente per il clusterblue
, ad esempio:export UPGRADE_VERSION="1.22.10-gke.600"
Questo tutorial utilizza la versione
1.22.10-gke.600
. Le versioni del cluster potrebbero essere diverse a seconda di quelle disponibili al momento del completamento di questo tutorial. Per ulteriori informazioni sull'upgrade, consulta Eseguire l'upgrade di cluster e node pool.Esegui l'upgrade del nodo
control plane
per il clusterblue
:gcloud container clusters upgrade blue \ --zone us-west1-b --master --cluster-version ${UPGRADE_VERSION}
Per confermare l'upgrade, premi
Y
.Il completamento della procedura richiede alcuni minuti. Attendi il completamento dell'upgrade prima di procedere.
Al termine dell'aggiornamento, l'output è il seguente:
Updated [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].
Esegui l'upgrade dei nodi nel cluster
blue
:gcloud container clusters upgrade blue \ --zone=us-west1-b --node-pool=default-pool \ --cluster-version ${UPGRADE_VERSION}
Per confermare l'aggiornamento, premi
Y
.Il completamento della procedura richiede alcuni minuti. Attendi il completamento dell'upgrade del nodo prima di procedere.
Al termine dell'upgrade, l'output è il seguente:
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 che sia stato eseguito l'upgrade del cluster
blue
:gcloud container clusters list
L'output è simile al seguente:
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: RUNNING
Aggiungi di nuovo il cluster blue
al pool di bilanciamento del carico
In questa sezione, aggiungi di nuovo il cluster blue
al pool di bilanciamento del carico.
In Cloud Shell, verifica che il deployment dell'applicazione sia in esecuzione sul cluster
blue
prima di aggiungerlo di nuovo al pool di bilanciamento del carico:kubectl --context ${BLUE_CLUSTER} get pods
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE whereami-deployment-756c7dc74c-xdnb6 1/1 Running 0 17m
Aggiorna la risorsa
MutliclusterService
per aggiungere nuovamente il clusterblue
al pool di bilanciamento del carico:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply \ -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yaml
Verifica di avere sia i cluster
blue
chegreen
nella specifica dei cluster:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \ -o json | jq '.items[].spec.clusters'
L'output è il seguente:
[ { "link": "us-west1-b/blue" }, { "link": "us-west1-c/green" } ]
I cluster
blue
egreen
sono ora inclusi nella specificaclusters
.Le metriche di Cloud Load Balancing sono disponibili nella console Google Cloud. Genera l'URL:
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"
In un browser, vai all'URL generato dal comando precedente.
Il grafico mostra che entrambi i cluster blu e verdi ricevono traffico dal generatore di carico utilizzando il bilanciatore del carico.
Complimenti. Hai eseguito correttamente l'upgrade di un cluster GKE in un'architettura multi-cluster utilizzando Ingress multi-cluster.
Per eseguire l'upgrade del cluster
green
, ripeti la procedura per svuotare e eseguire l'upgrade del cluster blu, sostituendoblue
congreen
.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Il modo più semplice per eliminare la fatturazione è eliminare il progetto Google Cloud che hai creato per il tutorial. In alternativa, puoi eliminare le singole risorse.
Elimina i cluster
In Cloud Shell, annulla la registrazione ed elimina i cluster
blue
egreen
:gcloud container fleet memberships unregister blue --gke-cluster=us-west1-b/blue gcloud container clusters delete blue --zone us-west1-b --quiet gcloud container fleet memberships unregister green --gke-cluster=us-west1-c/green gcloud container clusters delete green --zone us-west1-c --quiet
Elimina la risorsa
MuticlusterIngress
dal clusteringress-config
:kubectl --context ${INGRESS_CONFIG_CLUSTER} delete -f ${WORKDIR}/multicluster-manifests/mci.yaml
Questo comando elimina le risorse di Cloud Load Balancing dal progetto.
Annullare la registrazione ed eliminare il cluster
ingress-config
:gcloud container fleet memberships unregister ingress-config --gke-cluster=us-west1-a/ingress-config gcloud container clusters delete ingress-config --zone us-west1-a --quiet
Verifica che tutti i cluster siano stati eliminati:
gcloud container clusters list
L'output è il seguente:
*<null>*
Reimposta il file
kubeconfig
:unset KUBECONFIG
Rimuovi la cartella
WORKDIR
:cd ${HOME} rm -rf ${WORKDIR}
Elimina il progetto
- 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.
Passaggi successivi
- Scopri di più su Ingress multi-cluster.
- Scopri come eseguire il deployment di Ingress multi-cluster in più cluster.
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.