Effectuer la migration d'un cluster interne vers un cluster géré, sur un nouveau cluster

Ce tutoriel explique comment migrer une application Cluster Google Kubernetes Engine (GKE) utilisant le maillage de services Cloud Service intégré au cluster vers un nouveau cluster à l'aide du service géré Cloud Service Mesh, le service entièrement géré et conforme à Istio de Google réseau maillé.

Dans ce tutoriel, vous allez :

  1. Créer un cluster Google Kubernetes Engine et installer Cloud Service Mesh dans le cluster et la passerelle d'entrée Cloud Service Mesh sur le cluster. Ce cluster agira du cluster existant à migrer.
  2. Déployez le Boutique en ligne exemple d'application sur le cluster avec le maillage de services Cloud Service intégré au cluster.
  3. Créer un autre cluster Google Kubernetes Engine dans le même projet Google Cloud
  4. Provisionnez le service Cloud Service Mesh géré sur le deuxième cluster et déployez le Passerelle d'entrée Cloud Service Mesh.
  5. Déployez Online Boutique sur le cluster avec le service géré Cloud Service Mesh pour : répliquer le déploiement à partir du cluster avec le maillage de services Cloud Service intégré au cluster.
  6. Déplacer 50% du trafic utilisateur du cluster avec le maillage de services Cloud Service intégré au cluster avec le service géré Cloud Service Mesh, en utilisant la répartition du trafic d'Istio sur le cluster grâce au maillage de services Cloud Service intégré au cluster.
  7. Terminez la migration de Cloud Service Mesh intégré 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.

Le trafic utilisateur est réparti de 50 à 50 entre un cluster avec Cloud Service Mesh intégré et un cluster avec Cloud Service Mesh géré. Chaque cluster contient son propre déploiement d'Online Boutique.

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 implique d'augmenter de manière incrémentielle le pourcentage de trafic envoyé 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 à partir du maillage de services Cloud Service intégré au cluster 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 des clusters 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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activez les API requises.

    Activer les API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  7. Activez les API requises.

    Activer les API

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 Google Cloud CLI, kubectl et istioctl d'outils de ligne de commande. La gcloud CLI fournit CLI principale pour Google Cloud.

Ouvrez une session Cloud Shell en haut à droite page, cliquez sur , 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 session.

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 le maillage de services Cloud Service intégré au cluster

Créer le cluster et installer Cloud Service Mesh dans le cluster

Dans cette section, vous allez créer un cluster qui utilise le maillage de services Cloud Service intégré au cluster. Dans il s'agit du ou des clusters que vous utilisez déjà.

  1. Remplacez PROJECT_ID par votre ID du projet et créez un Nouveau 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
    
  2. 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
    
  3. Vérifiez que le contexte du cluster a été renommé:

    kubectl config get-contexts --output="name"
    
  4. 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 invité à saisir "y". puis appuyez 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
    
  5. Rendez le script asmcli exécutable:

    chmod +x asmcli
    
  6. Installez Cloud 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 renvoie messages d'information afin 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

  1. 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-in-cluster-asm \
      create namespace asm-ingress
    
  2. Utilisez le libellé istio.io/rev=asm-1187-26 pour ajouter asm-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-1187-26
    

    Le résultat est semblable à :

    namespace/asm-ingress labeled
    
  3. 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

  1. Vous allez déployer Online Boutique dans un espace de noms distinct appelé onlineboutique Créez l'espace de noms:

    kubectl \
      --context cluster-with-in-cluster-asm \
      create namespace onlineboutique
    
  2. Utilisez le libellé istio.io/rev=asm-1187-26 pour ajouter onlineboutique. 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-1187-26
    

    Le résultat est semblable à :

    namespace/onlineboutique labeled
    
  3. 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
    
  4. Obtenez l'adresse IP externe de la passerelle d'entrée Cloud Service Mesh:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Copiez l'adresse IP externe de la passerelle d'entrée et accédez-y via votre navigateur Web. L'application exemple Online Boutique s'affiche.

Configurer le nouveau cluster avec le service géré Cloud Service Mesh

Créer le cluster et provisionner le service géré Cloud Service Mesh

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.

  1. 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
    
  2. Renommez le contexte du cluster pour qu'il soit plus facile à utiliser:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-csm \
      cluster-with-csm
    
  3. Vérifiez que le contexte du cluster a été renommé:

    kubectl config get-contexts --output="name"
    
  4. 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.
    
  5. 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.
    
  6. Activez le service géré Cloud Service Mesh 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.
    
  7. Vérifier que le service géré Cloud Service Mesh a été provisionné pour le cluster est prêt à être utilisé:

    gcloud container fleet mesh describe --project PROJECT_ID
    

    Le provisionnement et le déploiement de Cloud Service Mesh prêts à être utilisés sur le cluster. Si controlPlaneManagement.state: DISABLED ou controlPlaneManagement.state: PROVISIONING s'affiche, vous devez relancer la commande précédente toutes les deux ou trois minutes jusqu'à ce que controlPlaneManagement.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

  1. 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
    
  2. Utilisez le libellé istio.io/rev=asm-managed pour ajouter l'espace de noms asm-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'
    
  3. 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

  1. 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
    
  2. Utilisez le libellé istio.io/rev=asm-managed pour ajouter onlineboutique. 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'
    
  3. 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-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
    
  4. 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}'
    
  5. Copiez l'adresse IP externe du service asm-ingressgateway et accédez via votre navigateur Web. L'application exemple Online Boutique s'affiche. Dans la section suivante, vous utiliserez l'adresse IP externe. Copiez-la donc d&#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 Canary

Dans cette section, vous allez configurer le cluster avec le maillage de services Cloud Service intégré au cluster de sorte que : 50% du trafic utilisateur vers la boutique en ligne est transféré vers l'instance de 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 au maillage de services géré point de terminaison Boutique en ligne du cluster
  • un service virtuel pour indiquer à la passerelle d'entrée Cloud Service Mesh du cluster de diviser le un trafic compris entre 50 et 50.
  1. Définir 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
    
  2. 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
    
  3. 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
    
  4. 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 la boutique en ligne et vérifiez le pied de page de la page à chaque fois. Notez que 50% des requêtes sont traitées par un pod le cluster avec le service géré Cloud Service Mesh.

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).

  1. Ajoutez un enregistrement A aux paramètres DNS pour pointer le nom de domaine (comme 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.

  2. Accédez à Online Boutique en accédant au nom de domaine dans votre navigateur Web.

  3. Réduisez la valeur TTL (Time To Live) de l'enregistrement DNS pour pouvoir rétablir rapidement la valeur une entrée DNS si vous devez effectuer un rollback.

  4. 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.

  5. Une fois la migration effectuée, supprimez le cluster avec Cloud Service Mesh dans le 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 soient facturées sur votre compte Google Cloud, utilisées dans ce tutoriel, supprimez le projet qui contient les ressources ou conserver le projet et supprimer les ressources individuelles.

Supprimer le projet

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. 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 le service géré Cloud Service Mesh:

  gcloud container clusters delete cluster-with-managed-asm \
    --zone=us-central1-a \
    --project=PROJECT_ID

Étape suivante