Effectuer la migration d'un cluster interne vers un cluster géré, sur un nouveau cluster
Ce tutoriel explique comment migrer une application depuis un cluster Google Kubernetes Engine (GKE) à l'aide de Cloud Service Mesh dans le cluster vers un nouveau cluster à l'aide de Cloud Service Mesh géré, le maillage de services entièrement géré et conforme à Istio de Google.
Dans ce tutoriel, vous allez :
- Créez un cluster Google Kubernetes Engine, puis installez Cloud Service Mesh intégré au cluster et la passerelle d'entrée Cloud Service Mesh sur le cluster. Ce cluster agira du cluster existant à migrer.
- Déployez l'exemple d'application Boutique en ligne sur le cluster avec Cloud Service Mesh intégré au cluster.
- Créez un autre cluster Google Kubernetes Engine dans le même projet Google Cloud.
- Provisionnez Cloud Service Mesh géré sur le deuxième cluster et déployez la passerelle d'entrée de Cloud Service Mesh.
- Déployez Online Boutique sur le cluster avec Cloud Service Mesh géré pour répliquer le déploiement à partir du cluster avec Cloud Service Mesh intégré au cluster.
- Déplacez 50 % du trafic utilisateur du cluster avec Cloud Service Mesh intégré au cluster vers le cluster avec Cloud Service Mesh géré, en utilisant les fonctionnalités de fractionnement du trafic d'Istio sur le cluster avec Cloud Service Mesh intégré au cluster.
- Terminez la migration de Cloud Service Mesh interne au cluster vers le service géré Cloud Service Mesh en procédant comme suit : en pointant l'entrée du système de noms de domaine (DNS) du cluster avec Cloud Service Mesh dans le cluster vers le cluster avec le service géré Cloud Service Mesh.
Déploiement Canary
"Déploiement Canary" est une technique utilisée en développement logiciel pour tester une nouvelle version d'un logiciel avant de la publier pour tous les utilisateurs. Il consiste à augmenter progressivement le pourcentage de trafic envoyé à la nouvelle version. Dans ce tutoriel, vous allez configurer un nouveau cluster avec Cloud Service Mesh et y transférer progressivement le trafic utilisateur. Vous commencerez par en redirigeant 0% du trafic utilisateur vers le nouveau cluster, puis 50 % et, enfin, 100%. En production, vous devez utiliser des incréments plus petits et plus importants. Si, à un moment donné, notez que le nouveau cluster est incapable de gérer un pourcentage de trafic, vous pouvez effectuer un rollback en réduisant le pourcentage à 0%.
Plan de contrôle Canary par rapport à un cluster Canary
Il existe deux stratégies couramment utilisées pour les migrations de Cloud Service Mesh intégré au cluster vers Cloud Service Mesh géré :
- Migration du plan de contrôle Canary: dans cette stratégie, vous provisionnez Cloud Service Mesh géré sur le cluster dans lequel Cloud Service Mesh dans le cluster est installé.
- Migration de cluster Canary: dans cette stratégie, vous créez un cluster et puis de provisionner Cloud Service Mesh géré sur celui-ci.
Dans ce tutoriel, vous allez découvrir la stratégie de migration de cluster Canary.
Coûts
Ce tutoriel utilise les composants facturables suivants de Google Cloud :
Une fois que vous aurez terminé ce tutoriel, évitez de payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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.
-
Enable the required APIs.
-
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.
-
Enable the required APIs.
Lancer Cloud Shell
Dans ce tutoriel, vous allez utiliser Cloud Shell, un shell hébergé sur Google Cloud qui vous permet de gérer aux ressources Google Cloud.
Cloud Shell est préinstallé avec les outils de ligne de commande Google Cloud CLI, kubectl et istioctl. La CLI gcloud fournit la CLI principale pour Google Cloud.
Ouvrez une session Cloud Shell en haut à droite page, cliquez sur terminal, puis sur Confirmer. Une session Cloud Shell s'ouvre dans un cadre en bas sur la page. Exécutez les commandes suivantes dans cette session Cloud Shell.
Télécharger l'exemple de code
Clonez les dépôts Git contenant les ressources Kubernetes et Istio que vous utilisera:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Configurer le cluster avec Cloud Service Mesh intégré au cluster
Créer le cluster et installer Cloud Service Mesh dans le cluster
Dans cette section, vous allez créer votre cluster qui utilise Cloud Service Mesh intégré au cluster. Dans il s'agit du ou des clusters que vous utilisez déjà.
Remplacez
PROJECT_ID
par votre ID de projet et créez un cluster :gcloud container clusters create cluster-with-in-cluster-asm \ --project=PROJECT_ID \ --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool=PROJECT_ID.svc.id.goog
Renommez le contexte du cluster pour qu'il soit plus facile à utiliser:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \ cluster-with-in-cluster-asm
Vérifiez que le contexte du cluster a été renommé :
kubectl config get-contexts --output="name"
Téléchargez la version qui installe Cloud Service Mesh 1.18.7 dans le répertoire de travail actuel:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.18 > asmcli
Vous êtes alors invité à saisir "y", puis à appuyer sur Entrée.
Le résultat est semblable à :
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701k
Rendez le script
asmcli
exécutable :chmod +x asmcli
Installer Cloud Service Mesh intégré au cluster à l'aide de
asmcli
:./asmcli install \ --project_id PROJECT_ID \ --cluster_name cluster-with-in-cluster-asm \ --cluster_location us-central1-a \ --output_dir . \ --enable_all \ --ca mesh_ca
L'exécution de l'outil
asmcli
peut prendre plusieurs minutes. L'outil génère des messages d'information pour que vous puissiez suivre sa progression.En cas de réussite, le résultat ressemble à ceci:
... asmcli: Successfully installed ASM.
Déployer la passerelle d'entrée de Cloud Service Mesh
Vous allez déployer la passerelle d'entrée de Cloud Service Mesh dans un espace de noms distinct appelé
asm-ingress
. Créez l'espace de noms:kubectl \ --context cluster-with-in-cluster-asm \ create namespace asm-ingress
Utilisez le libellé
istio.io/rev=asm-1187-26
pour ajouter l'espace de nomsasm-ingress
au service mesh et activer l'injection automatique de proxys side-car.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1187-26
Le résultat est semblable à :
.namespace/asm-ingress labeled
Déployer le maillage de services Cloud passerelle d'entrée:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
Le résultat est semblable à :
serviceaccount/asm-ingressgateway created service/asm-ingressgateway created deployment.apps/asm-ingressgateway created gateway.networking.istio.io/asm-ingressgateway created
Déployer Online Boutique
Vous allez déployer la boutique en ligne dans un espace de noms distinct appelé
onlineboutique
. Créez l'espace de noms :kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutique
Utilisez le libellé
istio.io/rev=asm-1187-26
pour ajouter l'espace de nomsonlineboutique
au service mesh et activer l'injection automatique de proxys side-car.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1187-26
Le résultat est semblable à :
namespace/onlineboutique labeled
Déployez les 12 services d'Online Boutique, y compris le générateur de charge qui imite le trafic utilisateur :
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Récupérez l'adresse IP externe de la passerelle d'entrée de Cloud Service Mesh :
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copiez l'adresse IP externe de la passerelle d'entrée et accédez-y via votre navigateur Web. L'exemple d'application Online Boutique s'affiche.
Configurer le nouveau cluster avec Cloud Service Mesh géré
Créer le cluster et provisionner Cloud Service Mesh géré
Dans cette section, vous allez créer le cluster vers lequel vous allez migrer. Vous : provisionner Cloud Service Mesh géré et déployer Online Boutique répliquer les déploiements à partir du cluster qui utilise le maillage de services Cloud Service intégré au cluster.
Créez un cluster :
gcloud container clusters create cluster-with-csm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.goog
Renommez le contexte du cluster pour le rendre plus facile à utiliser :
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-csm \ cluster-with-csm
Vérifiez que le contexte du cluster a été renommé :
kubectl config get-contexts --output="name"
Activez Cloud Service Mesh dans le parc de votre projet. A fleet est un opérateur logique regroupement de clusters Kubernetes et d'autres ressources pouvant être gérées ensemble.
gcloud container fleet mesh enable --project PROJECT_ID
Le résultat est semblable à :
Waiting for Feature Service Mesh to be created...done.
Enregistrez le cluster dans le parc du projet :
gcloud container fleet memberships register cluster-with-csm-membership \ --gke-cluster=us-central1-a/cluster-with-csm \ --enable-workload-identity \ --project PROJECT_ID
Le résultat est semblable à :
Waiting for membership to be created...done. Finished registering to the Fleet.
Activez Cloud Service Mesh géré sur le cluster :
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_ID
Le résultat est semblable à :
Waiting for Feature Service Mesh to be updated...done.
Vérifiez que Cloud Service Mesh géré a été provisionné pour le cluster et qu'il est prêt à être utilisé :
gcloud container fleet mesh describe --project PROJECT_ID
Il peut s'écouler environ 10 minutes avant que Cloud Service Mesh ne soit provisionné et prêt à être utilisé sur le cluster. Si
controlPlaneManagement.state: DISABLED
oucontrolPlaneManagement.state: PROVISIONING
s'affiche, vous devez relancer la commande précédente toutes les deux ou trois minutes jusqu'à ce quecontrolPlaneManagement.state: ACTIVE
s'affiche.Le résultat est semblable à :
createTime: '2022-07-06T01:05:39.110120474Z' membershipSpecs: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. state: ACTIVE state: code: OK description: 'Revision(s) ready for use: asm-managed.' updateTime: '2022-07-06T01:19:24.243993678Z' name: projects/your-project-id/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-07-06T01:19:27.475885687Z'
Déployer la passerelle d'entrée de Cloud Service Mesh
Vous allez déployer la passerelle d'entrée de Cloud Service Mesh dans espace de noms appelé
asm-ingress
. Créez l'espace de noms :kubectl \ --context cluster-with-csm \ create namespace asm-ingress
Utilisez le libellé
istio.io/rev=asm-managed
pour ajouter l'espace de nomsasm-ingress
. au maillage de services et activer l'injection automatique du proxy side-car.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Déployer le maillage de services Cloud passerelle d'entrée:
kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
Le résultat est semblable à :
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Déployer Online Boutique
Vous allez déployer Online Boutique dans un espace de noms distinct appelé
onlineboutique
Créez l'espace de noms :kubectl \ --context cluster-with-csm \ create namespace onlineboutique
Utilisez le libellé
istio.io/rev=asm-managed
pour ajouter l'élémentonlineboutique
. au maillage de services et activer l'injection automatique du proxy side-car.kubectl \ --context cluster-with-csm \ label namespace onlineboutique 'istio.io/rev=asm-managed'
Déployez les 12 services d'Online Boutique, y compris le générateur de charge imite le trafic utilisateur:
kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Obtenez l'adresse IP externe de la passerelle d'entrée Cloud Service Mesh:
kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copiez l'adresse IP externe du service
asm-ingressgateway
, puis accédez-y via votre navigateur Web. L'application exemple Boutique en ligne s'affiche. Vous allez utiliser l'adresse IP externe dans la section suivante. Copiez-la donc dans une variable d'environnement :export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \ kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Tester le cluster avec Cloud Service Mesh à l'aide d'un déploiement canari
Dans cette section, vous allez configurer le cluster avec Cloud Service Mesh intégré au cluster de sorte que 50 % du trafic utilisateur vers Online Boutique soit transféré vers l'instance d'Online Boutique sur le cluster avec Cloud Service Mesh géré. Pour ce faire, vous déployez deux ressources Istio sur le cluster avec le maillage de services Cloud Service intégré au cluster:
- Une entrée ServiceEntry pour indiquer le maillage de services Cloud Service intégré au cluster à propos du maillage de services Cloud Service géré point de terminaison Boutique en ligne du cluster
- un VirtualService pour indiquer à la passerelle d'entrée Cloud Service Mesh intégrée au cluster de diviser le trafic en 50/50.
Définissez l'adresse IP de la passerelle d'entrée du cluster Cloud Service Mesh géré dans la ressource
ServiceEntry
:sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM}/" anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Déployez le
ServiceEntry
sur le cluster avec le maillage de services Cloud Service intégré au cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Déployez le
VirtualService
sur le cluster avec le maillage de services Cloud Service intégré au cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yaml
Accédez à l'adresse IP de la passerelle d'entrée du cluster avec Cloud Service Mesh intégré au cluster, dans votre navigateur Web:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service
Actualisez plusieurs fois la page d'accueil de l'application Online Boutique et vérifiez le pied de page à chaque fois. Notez que 50 % des requêtes sont gérées par un pod sur le cluster avec Cloud Service Mesh géré.
Migrer vers le cluster avec le service géré Cloud Service Mesh
Dans cette section, nous partons du principe que vous êtes propriétaire d'un nom de domaine et que vous avez accès à son (Domain Name Server).
Ajoutez un enregistrement A aux paramètres DNS pour pointer le nom de domaine (tel que example.com) à l'adresse IP de la passerelle d'entrée exécutée sur le cluster grâce au maillage de services Cloud Service intégré au cluster.
Accédez à Online Boutique en accédant au nom de domaine dans votre navigateur Web.
Réduisez la valeur TTL (Time To Live) des enregistrements DNS pour vous assurer de pouvoir rapidement annuler l'entrée DNS si vous devez effectuer un rollback.
Définissez l'enregistrement A de votre nom de domaine sur l'adresse IP externe du passerelle d'entrée du cluster avec le service géré Cloud Service Mesh.
Une fois la migration terminée, supprimez le cluster avec Cloud Service Mesh au sein du cluster :
gcloud container clusters delete cluster-with-in-cluster-asm \ --zone=us-central1-a \ --project=PROJECT_ID
Effectuer un nettoyage
Pour éviter que les ressources utilisées dans le cadre 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.
Supprimer le projet
- 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.
Supprimer les ressources
Supprimez le cluster avec le service géré Cloud Service Mesh:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Étape suivante
- Découvrez Cloud Service Mesh géré.
- En savoir plus Bonnes pratiques de sécurité pour Cloud Service Mesh