Ce tutoriel explique comment mettre à niveau un environnement Google Kubernetes Engine (GKE) multicluster à l'aide de Multi Cluster Ingress. Ce tutoriel s'inscrit dans la continuité du document concernant les mises à niveau GKE multiclusters à l'aide de Multi Cluster Ingress, qui explique en détail le processus, l'architecture et les termes. Nous vous recommandons de lire le document conceptuel avant ce tutoriel.
Pour consulter une comparaison détaillée entre le service Multi Cluster Ingress (MCI), la passerelle multicluster (MCG) et un équilibreur de charge avec des groupes de points de terminaison du réseau autonomes (LB avec NEG autonomes), consultez la page Choisir votre API d'équilibrage de charge multicluster pour GKE.
Ce document est destiné aux administrateurs Google Cloud chargés de gérer les parcs de clusters GKE.
Nous vous recommandons de mettre à niveau automatiquement vos clusters GKE. La mise à niveau automatique est une façon entièrement gérée de mettre à niveau automatiquement vos clusters (plan de contrôle et nœuds) selon un calendrier de lancement déterminé parGoogle Cloud. Cela ne requiert aucune intervention de l'opérateur. Toutefois, si vous souhaitez mieux contrôler comment et quand les clusters sont mis à niveau, ce tutoriel décrit une méthode de mise à niveau de plusieurs clusters pour lesquels vos applications s'exécutent sur tous les clusters. Il utilise ensuite un objet Ingress multicluster pour drainer un cluster à la fois avant la mise à niveau.
Architecture
Ce tutoriel utilise l'architecture suivante. Trois clusters au total sont utilisés : deux clusters (blue et green) agissent comme des clusters identiques avec la même application déployée, et un cluster (ingress-config) sert de cluster de plan de contrôle qui configure l'objet Ingress multicluster. Dans ce tutoriel, vous allez déployer un exemple d'application sur deux clusters d'application (clusters blue et green).

Objectifs
- Créer trois clusters GKE et les enregistrer en tant que parc.
- Configurer un cluster GKE (
ingress-config) en tant que cluster de configuration central. - Déployer un exemple d'application sur les autres clusters GKE.
- Configurer Multi Cluster Ingress de manière à envoyer le trafic client vers l'application qui s'exécute sur les deux clusters d'application.
- Configurer un générateur de charge dans l'application et configurer la surveillance.
- Supprimer (drainer) un cluster d'application de l'objet Ingress multicluster et mettre à jour le cluster drainé.
- Rediriger le trafic vers le cluster mis à niveau à l'aide de l'objet Ingress multicluster.
Coûts
Dans ce document, vous utilisez les composants facturables de Google Cloudsuivants :
Vous pouvez obtenir une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, supprimez les ressources que vous avez créées pour éviter que des frais vous soient facturés. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Pour suivre ce tutoriel, vous devez configurer Ingress multicluster de façon à obtenir la configuration suivante :
- Deux clusters ou plus avec les mêmes applications, tels que les espaces de noms, les Déploiements et les Services, exécutées sur tous les clusters.
- La mise à niveau automatique est désactivée pour tous les clusters.
- Les clusters sont des clusters de VPC natif qui utilisent des plages d'adresses IP d'alias.
- L'équilibrage de charge HTTP doit être activé (activé par défaut).
gcloud --versiondoit être au minimum en version 369. Les étapes d'enregistrement du cluster GKE s'appuient sur cette version ou une version ultérieure.
-
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.
Définissez le projet par défaut :
export PROJECT=$(gcloud info --format='value(config.project)') gcloud config set project ${PROJECT}Activez les API GKE, Hub et
multiclusteringress:gcloud services enable container.googleapis.com \ gkehub.googleapis.com \ multiclusteringress.googleapis.com \ multiclusterservicediscovery.googleapis.comDans Cloud Shell, clonez le dépôt pour obtenir les fichiers de ce tutoriel :
cd ${HOME} git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesCréez un répertoire
WORKDIR:cd kubernetes-engine-samples/networking/gke-multicluster-upgrade-mci/ export WORKDIR=`pwd`Dans Cloud Shell, créez trois clusters 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 --quietPour les besoins de ce tutoriel, vous allez créer les clusters dans trois zones différentes au sein d'une même région :
us-west1-a,us-west1-betus-west1-c. Pour en savoir plus sur les régions et les zones, consultez la section Zones géographiques et régions.Attendez quelques minutes jusqu'à ce que tous les clusters soient créés. Assurez-vous que les clusters sont en cours d'exécution :
gcloud container clusters listLe résultat ressemble à ce qui suit :
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: RUNNINGCréez un fichier
kubeconfiget connectez-vous à tous les clusters pour générer des entrées dans le fichierkubeconfig: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}Le fichier
kubeconfigvous permet de créer une authentification pour les clusters en créant un utilisateur et un contexte pour chaque cluster. Une fois que vous avez créé le fichierkubeconfig, vous pouvez rapidement basculer entre différents contextes pour les clusters.Vérifiez que le fichier
kubeconfigcomporte trois clusters :kubectl config view -ojson | jq -r '.clusters[].name'Le résultat est le suivant :
gke_gke-multicluster-upgrades_us-west1-a_ingress-config gke_gke-multicluster-upgrades_us-west1-b_blue gke_gke-multicluster-upgrades_us-west1-c_greenObtenez le contexte des trois clusters pour une utilisation ultérieure :
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}"Le résultat est le suivant :
gke_gke-multicluster-upgrades_us-west1-a_ingress-config gke_gke-multicluster-upgrades_us-west1-b_blue gke_gke-multicluster-upgrades_us-west1-c_greenEnregistrez les trois clusters en tant que parc :
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-identityVérifiez que les clusters sont enregistrés :
gcloud container fleet memberships listLe résultat ressemble à ce qui suit :
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-944754a0d725Configurez le cluster
ingress-configen tant que cluster de configuration pour Multi Cluster Ingress en activant la fonctionnalitémulticlusteringressvia le Hub :gcloud container fleet ingress enable --config-membership=ingress-configLa commande précédente ajoute les CRD (Définitions de ressources personnalisées)
MulticlusterIngressetMulticlusterServiceau clusteringress-config. Cette opération prend quelques minutes. Attendez la fin de l'opération avant de passer à l'étape suivante.Vérifiez que le cluster
ingress-clustera bien été configuré pour Multi Cluster Ingress :watch gcloud container fleet ingress describeAttendez jusqu'à obtenir un résultat semblable à ce qui suit :
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'Pour quitter la commande
watch, appuyez sur les touches Ctrl+C.Dans Cloud Shell, déployez l'exemple d'application
whereamisur les clustersblueetgreen:kubectl --context ${BLUE_CLUSTER} apply -f ${WORKDIR}/application-manifests kubectl --context ${GREEN_CLUSTER} apply -f ${WORKDIR}/application-manifestsAttendez quelques minutes et assurez-vous que tous les Pods des clusters
blueetgreenont l'étatRunning:kubectl --context ${BLUE_CLUSTER} get pods kubectl --context ${GREEN_CLUSTER} get podsLe résultat ressemble à ce qui suit :
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.Dans Cloud Shell, déployez la ressource
MulticlusterIngresssur le clusteringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mci.yamlLe résultat est le suivant :
multiclusteringress.networking.gke.io/whereami-mci createdDéployez la ressource
MulticlusterServicesur le clusteringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yamlLe résultat est le suivant :
multiclusterservice.networking.gke.io/whereami-mcs createdPour comparer les deux ressources, procédez comme suit :
Inspectez la ressource
MulticlusterIngress:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusteringress -o yamlLe résultat contient les éléments suivants :
spec: template: spec: backend: serviceName: whereami-mcs servicePort: 8080La ressource
MulticlusterIngressest semblable à la ressource Ingress Kubernetes, à la différence que la spécificationserviceNamepointe vers une ressourceMulticlusterService.Inspectez la ressource
MulticlusterService:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice -o yamlLe résultat contient les éléments suivants :
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: whereamiLa ressource
MulticlusterServiceest semblable à une ressource de Service Kubernetes, à la différence qu'elle comporte une spécificationclusters. La valeurclusterscorrespond à la liste des clusters enregistrés où la ressourceMulticlusterServiceest créée.Vérifiez que la ressource
MulticlusterIngressa créé un équilibreur de charge avec un service de backend pointant vers la ressourceMulticlusterService:watch kubectl --context ${INGRESS_CONFIG_CLUSTER} \ get multiclusteringress -o jsonpath="{.items[].status.VIP}"Cette opération peut prendre jusqu'à 10 minutes. Attendez jusqu'à obtenir un résultat semblable à ce qui suit :
34.107.246.9Pour quitter la commande
watch, appuyez surControl+C.
Dans Cloud Shell, obtenez l'adresse IP virtuelle de Cloud Load Balancing :
export GCLB_VIP=$(kubectl --context ${INGRESS_CONFIG_CLUSTER} \ get multiclusteringress -o json | jq -r '.items[].status.VIP') \ && echo ${GCLB_VIP}Le résultat ressemble à ce qui suit :
34.107.246.9Utilisez
curlpour accéder à l'équilibreur de charge et à l'application déployée :curl ${GCLB_VIP}Le résultat ressemble à ce qui suit :
{ "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" }Exécutez la commande
curlà plusieurs reprises. Notez que la charge des requêtes est équilibrée entre l'applicationwhereamidéployée sur deux clusters,blueetgreen.Configurez le fichier manifeste
loadgeneratorpour envoyer le trafic client vers Cloud Load Balancing :TEMPLATE=loadgen-manifests/loadgenerator.yaml.templ && envsubst < ${TEMPLATE} > ${TEMPLATE%.*}Déployez
loadgeneratordans le clusteringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} apply -f ${WORKDIR}/loadgen-manifestsVérifiez que les pods
loadgeneratordu clusteringress-configprésentent tous l'étatRunning:kubectl --context ${INGRESS_CONFIG_CLUSTER} get podsLe résultat ressemble à ce qui suit :
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 l'un des Pods n'est pas à l'état
Running, attendez quelques minutes, puis exécutez à nouveau la commande.Créez un tableau de bord pour afficher le trafic atteignant Multi Cluster Ingress :
export DASH_ID=$(gcloud monitoring dashboards create \ --config-from-file=dashboards/cloud-ops-dashboard.json \ --format=json | jq -r ".name" | awk -F '/' '{print $4}')Le résultat ressemble à ce qui suit :
Created [721b6c83-8f9b-409b-a009-9fdf3afb82f8]Les métriques de Cloud Load Balancing sont disponibles dans la consoleGoogle Cloud . Générez l'URL :
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"Le résultat ressemble à ce qui suit :
https://console.cloud.google.com/monitoring/dashboards/builder/721b6c83-8f9b-409b-a009-9fdf3afb82f8/?project=gke-multicluster-upgrades&timeDomain=1h"Dans un navigateur, accédez à l'URL générée par la commande précédente.
Le trafic vers l'exemple d'application passe du générateur de charge aux clusters
blueetgreen(notés par les deux zones dans lesquelles se trouvent les clusters). Le graphique des métriques chronologiques montre le trafic allant aux deux backends. Les valeurs de survol avec la sourisk8s1-indiquent que le groupe de points de terminaison du réseau (NEG) pour les deux ressourcesMulticlusterServicesde l'interface s'exécute dans les clustersblueetgreen.
Dans Cloud Shell, mettez à jour la ressource
MulticlusterServicedans le clusteringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} \ apply -f ${WORKDIR}/multicluster-manifests/mcs-green.yamlVérifiez que vous ne disposez que du cluster
greendans la spécificationclusters:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \ -o json | jq '.items[].spec.clusters'Le résultat est le suivant :
[ { "link": "us-west1-c/green" } ]Seul le cluster
greenest répertorié dans la spécificationclusters, de sorte que seul le clustergreense trouve dans le pool d'équilibrage de charge.Vous pouvez consulter les métriques à partir des métriques Cloud Load Balancing dans la consoleGoogle Cloud . Générez l'URL :
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"Dans un navigateur, accédez à l'URL générée à partir de la commande précédente.
Le graphique montre que seul le cluster
greenreçoit du trafic.
Dans Cloud Shell, obtenez la version actuelle des clusters :
gcloud container clusters listLe résultat ressemble à ce qui suit :
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: RUNNINGVos versions de cluster peuvent varier selon la date à laquelle vous suivez ce tutoriel.
Obtenez la liste des versions
MasterVersionsdisponibles dans la zone :gcloud container get-server-config --location us-west1-b --format=json | jq \ '.validMasterVersions[0:20]'Le résultat ressemble à ce qui suit :
[ "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" ]Obtenez une liste des versions
NodeVersionsdisponibles dans la zone :gcloud container get-server-config --location us-west1-b --format=json | jq \ '.validNodeVersions[0:20]'Le résultat ressemble à ce qui suit :
[ "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" ]Définissez une variable d'environnement pour une version
MasterVersionet une versionNodeVersion, parmi celles figurant dans les listesMasterVersionsetNodeVersions, qui soit supérieure à la version actuelle du clusterblue, par exemple :export UPGRADE_VERSION="1.22.10-gke.600"Ce tutoriel utilise la version
1.22.10-gke.600. Vos versions de cluster peuvent varier en fonction des versions disponibles au moment où vous suivez ce tutoriel. Pour en savoir plus sur la mise à niveau, consultez la section Mettre à niveau des clusters et des pools de nœuds.Mettez à jour le nœud
control planedu clusterblue:gcloud container clusters upgrade blue \ --location us-west1-b --master --cluster-version ${UPGRADE_VERSION}Pour confirmer la mise à niveau, appuyez sur
Y.Cela prend quelques minutes. Attendez la fin de la mise à niveau avant de continuer.
Une fois la mise à jour terminée, le résultat est le suivant :
Updated [https://container.googleapis.com/v1/projects/gke-multicluster-upgrades/zones/us-west1-b/clusters/blue].Mettez à niveau les nœuds du cluster
blue:gcloud container clusters upgrade blue \ --location=us-west1-b --node-pool=default-pool \ --cluster-version ${UPGRADE_VERSION}Pour confirmer la mise à jour, appuyez sur
Y.Cela prend quelques minutes. Attendez la fin de la mise à niveau des nœuds avant de continuer.
Une fois la mise à niveau terminée, le résultat est le suivant :
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].Vérifiez que le cluster
blueest mis à niveau :gcloud container clusters listLe résultat ressemble à ce qui suit :
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: RUNNINGDans Cloud Shell, vérifiez que le déploiement de l'application s'exécute sur le cluster
blueavant de le replacer dans le pool d'équilibrage de charge :kubectl --context ${BLUE_CLUSTER} get podsLe résultat ressemble à ce qui suit :
NAME READY STATUS RESTARTS AGE whereami-deployment-756c7dc74c-xdnb6 1/1 Running 0 17mMettez à jour la ressource
MutliclusterServicepour ajouter de nouveau le clusterblueau pool d'équilibrage de charge :kubectl --context ${INGRESS_CONFIG_CLUSTER} apply \ -f ${WORKDIR}/multicluster-manifests/mcs-blue-green.yamlVérifiez que la spécification des clusters contient à la fois les clusters
blueetgreen:kubectl --context ${INGRESS_CONFIG_CLUSTER} get multiclusterservice \ -o json | jq '.items[].spec.clusters'Le résultat est le suivant :
[ { "link": "us-west1-b/blue" }, { "link": "us-west1-c/green" } ]Les clusters
blueetgreenfigurent maintenant dans la spécificationclusters.Les métriques issues de Cloud Load Balancing sont disponibles dans la consoleGoogle Cloud . Générez l'URL :
echo "https://console.cloud.google.com/monitoring/dashboards/builder/${DASH_ID}/?project=${PROJECT}&timeDomain=1h"Dans un navigateur, accédez à l'URL générée par la commande précédente.
Le graphique montre que les clusters blue et green reçoivent le trafic du générateur de charge utilisant l'équilibreur de charge.
Félicitations ! Vous avez mis à niveau un cluster GKE dans une architecture multicluster à l'aide d'un objet Ingress multicluster.
Pour mettre à jour le cluster
green, répétez la procédure appliquée pour drainer et mettre à jour le cluster blue, en remplaçantbluepargreen.Dans Cloud Shell, annulez l'enregistrement et supprimez les clusters
blueetgreen: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 --quietSupprimez la ressource
MuticlusterIngressdu clusteringress-config:kubectl --context ${INGRESS_CONFIG_CLUSTER} delete -f ${WORKDIR}/multicluster-manifests/mci.yamlCette commande supprime les ressources Cloud Load Balancing du projet.
Annuler l'enregistrement et supprimer le cluster
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 --quietVérifiez que tous les clusters sont supprimés :
gcloud container clusters listLe résultat est le suivant :
*<null>*Réinitialisez le fichier
kubeconfig:unset KUBECONFIGSupprimez le dossier
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.
- En savoir plus sur l'objet Ingress multicluster.
- Découvrez comment déployer un objet Ingress multicluster sur plusieurs clusters.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Cloud Architecture Center.
Configurer l'environnement
Créer et enregistrer des clusters GKE dans Hub
Dans cette section, vous allez créer trois clusters GKE et les enregistrer dans GKE Hub.
Créer des clusters GKE
Enregistrer des clusters GKE dans un parc
L'enregistrement de vos clusters dans un parc vous permet de faire fonctionner vos clusters Kubernetes dans des environnements hybrides. Les clusters enregistrés dans des parcs peuvent utiliser des fonctionnalités GKE avancées, telles que le service Multi Cluster Ingress. Pour enregistrer un cluster GKE dans un parc, vous pouvez utiliser directement un compte de service Google Cloud, ou utiliser l'approche recommandée, Workload Identity Federation for GKE, qui permet à un compte de service Kubernetes de votre cluster GKE d'agir en tant que compte de service Identity and Access Management.
Déployer un exemple d'application sur les clusters blue et green
Configurer un objet Ingress multicluster
Dans cette section, vous allez créer un objet Ingress multicluster qui envoie le trafic à l'application s'exécutant sur les clusters blue et green. Vous utilisez Cloud Load Balancing pour créer un équilibreur de charge qui utilise l'application whereami dans les clusters blue et green en tant que backends. Pour créer l'équilibreur de charge, vous avez besoin de deux types de ressources : une ressource MultiClusterIngress et une ou plusieurs ressources MultiClusterServices.
Les objets MultiClusterIngress et MultiClusterService sont des ressources multiclusters correspondant aux ressources Kubernetes "Ingress" et "Service" utilisées dans le contexte d'un cluster unique.
Configurer le générateur de charge
Dans cette section, vous allez configurer un Service loadgenerator qui génère du trafic client vers l'adresse IP virtuelle de Cloud Load Balancing. Tout d'abord, le trafic est envoyé vers les clusters blue et green, car la ressource MulticlusterService est configurée pour envoyer du trafic vers les deux clusters. Par la suite, vous allez configurer la ressource MulticlusterService pour envoyer du trafic vers un seul cluster.
Surveiller le trafic
Dans cette section, vous allez surveiller le trafic vers l'application whereami à l'aide de la consoleGoogle Cloud .
Dans la section précédente, vous avez configuré un déploiement loadgenerator qui simule le trafic client en accédant à l'application whereami via l'adresse IP virtuelle de Cloud Load Balancing. Vous pouvez surveiller ces métriques dans la consoleGoogle Cloud . Configurez d'abord la surveillance afin de pouvoir surveiller lorsque vous drainez des clusters pour les mises à niveau (comme décrit dans la section suivante).
Drainer et mettre à niveau le cluster blue
Dans cette section, vous drainez le cluster blue. Le drainage d'un cluster signifie que vous le supprimez du pool d'équilibrage de charge. Après avoir drainé le cluster blue, tout le trafic client destiné à l'application est dirigé vers le cluster green.
Vous pouvez surveiller ce processus comme décrit dans la section précédente. Une fois le cluster drainé, vous pouvez mettre à jour le cluster drainé. Après la mise à niveau, vous pouvez le réinstaller dans le pool d'équilibrage de charge. Répétez ces étapes pour mettre à niveau l'autre cluster (non illustré dans ce tutoriel).
Pour drainer le cluster blue, mettez à jour la ressource MulticlusterService dans le cluster ingress-cluster et supprimez le cluster blue de la spécification clusters.
Drainer le cluster blue
Mettre à niveau le cluster blue :
Maintenant que le cluster blue ne reçoit plus de trafic client, vous pouvez le mettre à niveau (plan de contrôle et nœuds).
Replacer le cluster blue dans le pool d'équilibrage de charge
Dans cette section, vous ajoutez le cluster blue au pool d'équilibrage de charge.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet Google Cloud que vous avez créé pour ce tutoriel. Vous pouvez également supprimer les différentes ressources.