Migrer dans le cluster vers le cluster géré, sur un nouveau cluster
Ce tutoriel explique comment migrer une application depuis un cluster Google Kubernetes Engine (GKE) à l'aide d'Anthos Service Mesh dans un cluster vers un nouveau cluster à l'aide d'Anthos Service Mesh géré, le maillage de services entièrement géré conforme à Istio d'Istio.
Dans ce tutoriel, vous allez :
- Créer un cluster Google Kubernetes Engine et installer Anthos Service Mesh dans le cluster et la passerelle d'entrée Anthos Service Mesh sur le cluster Ce cluster agira en tant que cluster existant à partir duquel vous souhaitez migrer.
- Déployez l'exemple d'application Online Boutique sur le cluster avec Anthos Service Mesh intégré au cluster.
- Créez un autre cluster Google Kubernetes Engine dans le même projet Google Cloud.
- Provisionnez le service Anthos Service Mesh géré sur le deuxième cluster et déployez la passerelle d'entrée Anthos Service Mesh.
- Déployez Online Boutique sur le cluster avec Anthos Service Mesh géré pour répliquer le déploiement à partir du cluster avec Anthos Service Mesh dans le cluster.
- Transférez 50% du trafic utilisateur du cluster avec Anthos Service Mesh intégré au cluster vers le cluster disposant d'Anthos Service Mesh géré à l'aide des fonctionnalités de répartition du trafic d'Istio sur le cluster avec Anthos Service Mesh intégré au cluster.
- Terminez la migration d'Anthos Service Mesh dans le cluster vers Anthos Service Mesh géré en pointant l'entrée du système de noms de domaine (DNS) du cluster avec Anthos Service Mesh géré dans le cluster vers le cluster avec Anthos Service Mesh géré.
Déploiement Canary
Le "déploiement Canary" est une technique utilisée dans le développement de logiciels pour tester une nouvelle version d'un logiciel avant de la proposer à tous les utilisateurs. Elle implique une augmentation incrémentale du pourcentage de trafic envoyé à la nouvelle version. Dans ce tutoriel, vous allez configurer un nouveau cluster avec Anthos Service Mesh géré et y transférer progressivement le trafic utilisateur. Vous commencerez par diriger 0% du trafic utilisateur vers le nouveau cluster, puis 50%, et enfin 100%. En production, utilisez des incréments plus petits et plus nombreux. Si vous remarquez que le nouveau cluster ne peut pas gérer un pourcentage du trafic, vous pouvez effectuer un rollback en réduisant le pourcentage à 0%.
Plan de contrôle Canary et cluster Canary
Il existe deux stratégies couramment utilisées pour les migrations d'Anthos Service Mesh dans un cluster vers Anthos Service Mesh géré:
- Migration du plan de contrôle Canary: dans cette stratégie, vous provisionnez Anthos Service Mesh géré sur le même cluster que celui dans lequel vous avez actuellement installé Anthos Service Mesh.
- Migration de cluster Canary: dans cette stratégie, vous créez un cluster, puis vous y provisionnez Anthos Service Mesh géré.
Dans ce tutoriel, vous allez découvrir la stratégie de migration d'un 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
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
-
Activez les API requises.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
-
Activez les API requises.
Lancer Cloud Shell
Dans ce tutoriel, vous allez utiliser Cloud Shell, un environnement shell hébergé sur Google Cloud qui vous permet de gérer vos ressources Google Cloud.
Cloud Shell est préinstallé avec les outils de ligne de commande Google Cloud CLI, kubectl et istioctl. La gcloud CLI fournit la CLI principale pour Google Cloud.
Ouvrez une session Cloud Shell dans l'angle supérieur droit de cette page, cliquez sur terminal, puis sur Confirmer. Une session Cloud Shell s'ouvre dans un cadre situé plus 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 allez utiliser:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Configurer le cluster avec Anthos Service Mesh intégré au cluster
Créer le cluster et installer Anthos Service Mesh dans le cluster
Dans la section, vous allez créer votre cluster qui utilise Anthos Service Mesh au sein du cluster. En pratique, 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 afin de faciliter son travail:
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 Anthos Service Mesh 1.15.4 dans le répertoire de travail actuel :
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.15 > asmcli
Vous êtes 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
Installez Anthos Service Mesh dans le 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 d'Anthos Service Mesh
Vous allez déployer la passerelle d'entrée d'Anthos Service Mesh dans un espace de noms distinct nommé
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-1154-2
pour ajouter l'espace de nomsasm-ingress
au maillage de services et activer l'injection automatique du proxy side-car.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1154-2
Le résultat est semblable à :
namespace/asm-ingress labeled
Déployez la passerelle d'entrée Anthos Service Mesh:
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 Online Boutique dans un espace de noms distinct nommé
onlineboutique
. Créez l'espace de noms:kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutique
Utilisez le libellé
istio.io/rev=asm-1154-2
pour ajouter l'espace de nomsonlineboutique
au maillage de services et activer l'injection automatique du proxy side-car.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1154-2
Le résultat est semblable à :
namespace/onlineboutique labeled
Déployez les 12 services de Online Boutique, dont 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
Obtenez l'adresse IP publique de la passerelle d'entrée Anthos 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 publique de la passerelle d'entrée et accédez-y via votre navigateur Web. L'exemple d'application Boutique en ligne s'affiche.
Configurer le nouveau cluster avec Anthos Service Mesh géré
Créer le cluster et provisionner Anthos Service Mesh géré
Dans cette section, vous allez créer le cluster vers lequel vous allez effectuer la migration. Vous allez provisionner Anthos Service Mesh géré et déployer Online Boutique afin de répliquer les déploiements depuis le cluster qui utilise Anthos Service Mesh dans le cluster.
Stockez votre numéro de projet dans une variable d'environnement:
export PROJECT_NUMBER=$(gcloud projects \ describe PROJECT_ID --format='get(projectNumber)')
Créez un cluster :
gcloud container clusters create cluster-with-managed-asm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.goog \ --labels mesh_id=proj-${PROJECT_NUMBER}
Renommez le contexte du cluster afin de faciliter son travail:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-managed-asm \ cluster-with-managed-asm
Vérifiez que le contexte du cluster a été renommé:
kubectl config get-contexts --output="name"
Activez Anthos Service Mesh sur le parc de votre projet. Une flotte est un regroupement logique de clusters Kubernetes et d'autres ressources pouvant être gérés 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-managed-asm-membership \ --gke-cluster=us-central1-a/cluster-with-managed-asm \ --enable-workload-identity \ --project PROJECT_ID
Le résultat est semblable à :
Waiting for membership to be created...done. Created a new membership [projects/your-project-id/locations/global/memberships/cluster-with-gke-membership] for the cluster [cluster-with-gke-membership] Generating the Connect Agent manifest... Deploying the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect]... Deployed the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect]. Finished registering the cluster [cluster-with-gke-membership] with the Fleet.
Activez Anthos Service Mesh géré sur le cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-managed-asm-membership \ --project PROJECT_ID
Le résultat est semblable à :
Waiting for Feature Service Mesh to be updated...done.
Vérifiez qu'Anthos Service Mesh géré a été provisionné pour le cluster et prêt à être utilisé:
gcloud container fleet mesh describe --project PROJECT_ID
Il peut s'écouler environ 10 minutes avant qu'Anthos 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-managed-asm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-managed-asm-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 d'Anthos Service Mesh
Vous allez déployer la passerelle d'entrée d'Anthos Service Mesh dans un espace de noms distinct nommé
asm-ingress
. Créez l'espace de noms:kubectl \ --context cluster-with-managed-asm \ 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-managed-asm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Déployez la passerelle d'entrée Anthos Service Mesh :
kubectl \ --context cluster-with-managed-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-managed-asm \ --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 nommé
onlineboutique
. Créez l'espace de noms:kubectl \ --context cluster-with-managed-asm \ create namespace onlineboutique
Utilisez le libellé
istio.io/rev=asm-managed
pour ajouter l'espace de nomsonlineboutique
au maillage de services et activer l'injection automatique du proxy side-car.kubectl \ --context cluster-with-managed-asm \ label namespace onlineboutique 'istio.io/rev=asm-managed'
Déployez les 12 services de Online Boutique, dont le générateur de charge qui imite le trafic utilisateur:
kubectl \ --context cluster-with-managed-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-managed-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Obtenez l'adresse IP publique de la passerelle d'entrée Anthos Service Mesh:
kubectl \ --context cluster-with-managed-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Copiez l'adresse IP publique du service
asm-ingressgateway
et accédez-y via votre navigateur Web. L'exemple d'application Online Boutique s'affiche. Vous allez utiliser l'adresse IP publique dans la section suivante, donc copiez-la dans une variable d'environnement:export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \ kubectl \ --context cluster-with-managed-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Tester le cluster avec Anthos Service Mesh à l'aide d'un déploiement Canary
Dans cette section, vous allez configurer le cluster avec Anthos Service Mesh au sein du cluster, de sorte que 50% du trafic utilisateur vers la boutique en ligne soit transféré vers l'instance d'Online Boutique sur le cluster avec Anthos Service Mesh géré. Pour ce faire, vous allez déployer deux ressources Istio sur le cluster avec Anthos Service Mesh intégré au cluster:
- une entrée ServiceEntry pour indiquer à Anthos Service Mesh du cluster que le point de terminaison de la boutique en ligne du cluster Anthos Service Mesh est géré ;
- un service virtuel pour indiquer à la passerelle d'entrée Anthos Service Mesh du cluster de répartir le trafic 50 et 50.
Définissez l'adresse IP de la passerelle d'entrée du cluster Anthos 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
ServiceEntry
sur le cluster avec Anthos Service Mesh 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
VirtualService
sur le cluster avec Anthos Service Mesh 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 Anthos Service Mesh intégré au cluster dans votre navigateur Web:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service
Actualisez la page d'accueil de la boutique en ligne à plusieurs reprises et vérifiez le pied de page à chaque fois. Notez que 50% des requêtes sont traitées par un pod du cluster avec Anthos Service Mesh géré.
Migrer vers le cluster avec Anthos Service Mesh géré
Cette section suppose que vous possédez un nom de domaine et que vous avez accès à ses paramètres DNS (Domain Name Server).
Ajoutez un enregistrement A aux paramètres DNS pour faire pointer le nom de domaine (par exemple, example.com) vers l'adresse IP de la passerelle d'entrée exécutée sur le cluster avec Anthos Service Mesh intégré au cluster.
Accédez à Boutique en ligne en saisissant le nom de domaine dans votre navigateur Web.
Minimisez la valeur TTL (Time To Live) des enregistrements DNS pour pouvoir revenir rapidement à l'entrée DNS si vous devez effectuer un rollback.
Définissez l'enregistrement A de votre nom de domaine sur l'adresse IP publique de la passerelle d'entrée du cluster avec Anthos Service Mesh géré.
Une fois la migration réussie, supprimez le cluster avec Anthos Service Mesh intégré au 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 ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.
Supprimer le projet
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les ressources
Supprimez le cluster avec Anthos Service Mesh géré:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Étapes suivantes
- Découvrez Anthos Service Mesh géré.
- Découvrez les bonnes pratiques de sécurité Anthos Service Mesh.