Migrer une VM monolithique – Présentation et configuration

Dans ce tutoriel, vous allez découvrir un exemple d'application non entièrement modernisée et suivre les étapes nécessaires à la migration de tous ses services vers GKE. Cette application exécute certains de ses services dans un cluster GKE et le reste en tant que monolithe dans une VM.

Ce tutoriel se divise en plusieurs sections :

  1. Présentation et configuration

    Dans cette section, vous allez examiner le contexte du tutoriel, puis vous allez configurer l'infrastructure et les outils requis pour continuer à utiliser ce tutoriel.

  2. Découverte et évaluation (jour 0)

    Vous allez ensuite utiliser des outils de détection pour évaluer votre VM afin de déterminer si elle est adaptée à la migration, ainsi que pour créer un cluster de traitement en préparation de la migration.

  3. Migration et déploiement (jour 1)

    Enfin, vous pouvez à présent créer un plan de migration pour votre VM monolithique, procéder à une migration complète des images et des données, et déployer dans Kubernetes les artefacts que vous venez de créer.

Context

Aujourd'hui encore, une grande partie des anciennes applications des grandes entreprises sont monolithiques et s'exécutent sur des piles technologiques propriétaires ou sur des machines virtuelles (VM) gourmandes en ressources de calcul. Ces services sont souvent essentiels pour le fonctionnement d'une application plus volumineuse, mais engendrent de nombreux coûts d'exploitation, tels que les frais de fonctionnement et de licence. Néanmoins, en raison de leur nature, les VM peuvent être difficiles à migrer vers une solution plus légère, telle que les conteneurs d'un cluster GKE.

Dans ce tutoriel, vous allez apprendre à exploiter Migrate for Anthos and GKE pour déplacer facilement et sans modifier le code un service monolithique et sa base de données d'une VM vers un environnement GKE, en réduisant ainsi les frais d'exploitation et les obstacles au développement.

L'exemple d'application utilisé est celui de Bank of Anthos, une simulation de service de banque de détail, dotée de son propre réseau de traitement des transactions et de ses propres bases de données.

Les services d'interface Web, d'utilisateur et de contact de Bank of Anthos, ainsi que la base de données de compte, sont déjà des microservices conteneurisés s'exécutant dans des conteneurs sur GKE. Cependant, leur registre de transactions monolithiques et leur base de données de transactions s'exécutent toujours sur une seule machine virtuelle. Pour réduire les coûts d'exploitation sans interrompre votre workflow actuel, vous devez pouvoir migrer facilement cette VM vers GKE.

Schéma de l'architecture de Bank of Anthos

Coûts

Ce tutoriel utilise les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Consultez la page Effectuer un nettoyage pour en savoir plus.

Outils requis

Vous pouvez suivre ce tutoriel avec Cloud Shell, où sont préinstallés les outils de ligne de commande gcloud, kubectl, git et migctl utilisés ici. Grâce à Cloud Shell, vous n'avez pas besoin d'installer ces outils de ligne de commande sur votre poste de travail.

Pour utiliser Cloud Shell, procédez comme suit :

  1. Accédez à Google Cloud Console.
  2. Cliquez sur le bouton Activer Cloud Shell Bouton d'activation de Cloud Shell en haut de la fenêtre de Cloud Console.

    Une session Cloud Shell s'ouvre dans un nouveau cadre en bas de Cloud Console et affiche une invite de ligne de commande.

    Session Cloud Shell

API requises

Activer la compatibilité avec Compute Engine

  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. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  5. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  6. Activez l'API Compute Engine.

    Activer l'API

Activer et configurer GKE

Avant de commencer, effectuez les tâches suivantes :

Configurez les paramètres gcloud par défaut à l'aide de l'une des méthodes suivantes :

  • Utilisez gcloud init pour suivre les instructions permettant de définir les paramètres par défaut.
  • Utilisez gcloud config pour définir individuellement l'ID, la zone et la région de votre projet.

Utiliser gcloud init

Si le message d'erreur One of [--zone, --region] must be supplied: Please specify location s'affiche, effectuez les tâches ci-dessous.

  1. Exécutez gcloud init et suivez les instructions :

    gcloud init

    Si vous utilisez SSH sur un serveur distant, utilisez l'option --console-only pour empêcher la commande d'ouvrir un navigateur :

    gcloud init --console-only
  2. Suivez les instructions pour autoriser gcloud à utiliser votre compte Google Cloud.
  3. Créez ou sélectionnez une configuration.
  4. Choisissez un projet Google Cloud.
  5. Choisissez une zone Compute Engine par défaut pour les clusters zonaux ou une région pour les clusters régionaux ou Autopilot.

Utiliser gcloud config

  • Définissez votre ID de projet par défaut :
    gcloud config set project PROJECT_ID
  • Si vous utilisez des clusters zonaux, définissez votre zone de calcul par défaut :
    gcloud config set compute/zone COMPUTE_ZONE
  • Si vous utilisez des clusters Autopilot ou régionaux, définissez votre région de calcul par défaut :
    gcloud config set compute/region COMPUTE_REGION
  • Mettez à jour gcloud vers la dernière version :
    gcloud components update

Déployer Bank of Anthos

Dans cette section, vous allez déployer votre VM monolithique de registre dans Compute Engine et créer le cluster GKE où résideront les autres services de Bank of Anthos.

  1. Définissez les variables d'environnement requises pour le déploiement monolithique de Bank of Anthos.

    export PROJECT_ID=PROJECT_ID
    export ZONE=COMPUTE_ZONE
    
  2. Clonez le dépôt Bank of Anthos dans votre répertoire d'accueil.

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos ${HOME}/bank-of-anthos
    
  3. Déployez le monolithe du registre de Bank of Anthos sur Compute Engine.

    cd ${HOME}/bank-of-anthos
    make monolith-deploy
    

    Cette commande garantit que vous n'avez pas de VM en conflit de noms. Elle créera ensuite une VM dans Compute Engine à l'aide de l'image de registre BanK of Anthos.

  4. Créez une règle de pare-feu qui autorise les requêtes adressées à l'instance de VM sur le port 8080, utilisée par le service d'interface pour communiquer avec le monolithe de registre.

    gcloud compute --project=PROJECT_ID firewall-rules create default-allow-http \
      --direction=INGRESS --priority=1000 --network=default --action=ALLOW \
      --rules=tcp:8080 --source-ranges=0.0.0.0/0 --target-tags=monolith
    
  5. Créez un cluster GKE qui héberge le reste des services de Bank of Anthos.

    gcloud container clusters create boa-cluster \
      --project=PROJECT_ID --zone=COMPUTE_ZONE \
      --machine-type=e2-standard-4 --num-nodes=4 \
      --enable-stackdriver-kubernetes --subnetwork=default
    
  6. Une fois le cluster créé, récupérez ses identifiants et définissez le contexte Kubernetes de sorte qu'il pointe vers lui.

    gcloud container clusters get-credentials boa-cluster --zone COMPUTE_ZONE
    
  7. Remplacez l'ID du projet dans le ConfigMap utilisé pour décrire comment les services GKE peuvent communiquer avec la VM monolithique de registre.

    sed -i 's/\[PROJECT_ID\]/'PROJECT_ID'/g' ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml
    

    Consultez ce fichier pour vous assurer que les modifications ont bien été appliquées.

    cat ${HOME}/bank-of-anthos/src/ledgermonolith/config.yaml | grep ADDR
    

    Vous devriez voir que l'ID du projet a été interpolé dans les hôtes du service de registre.

    TRANSACTIONS_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    BALANCES_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    HISTORY_API_ADDR: "ledgermonolith-service.c.PROJECT_ID.internal:8080"
    CONTACTS_API_ADDR: "contacts:8080"
    USERSERVICE_API_ADDR: "userservice:8080
    
  8. Appliquez les différents services de Bank of Anthos sur votre cluster.

    cd ${HOME}/bank-of-anthos/
    kubectl apply -f src/ledgermonolith/config.yaml
    kubectl apply -f extras/jwt/jwt-secret.yaml
    kubectl apply -f kubernetes-manifests/accounts-db.yaml
    kubectl apply -f kubernetes-manifests/userservice.yaml
    kubectl apply -f kubernetes-manifests/contacts.yaml
    kubectl apply -f kubernetes-manifests/frontend.yaml
    kubectl apply -f kubernetes-manifests/loadgenerator.yaml
    

    Vous pouvez vérifier les états des pods à l'aide de la commande suivante :

    kubectl get pods
    

    Quelques minutes peuvent être nécessaires pour que tous les pods soient opérationnels.

    NAME                           READY   STATUS    RESTARTS   AGE
    accounts-db-0                  1/1     Running   0          51s
    contacts-d5dcdc87c-5l9xf       1/1     Running   0          50s
    frontend-5768bd978-s6vkq       1/1     Running   0          50s
    loadgenerator-8485dfd-wjvst    1/1     Running   0          50s
    userservice-8477dfcb46-htw96   1/1     Running   0          51s
    
  9. Une fois que tous les pods sont définis sur Running, vous pouvez trouver l'adresse IP externe du service LoadBalancer frontend.

    kubectl get service frontend
    
    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    frontend   LoadBalancer   10.79.248.161   ##.##.##.##.    80:31304/TCP   4m
    
  10. Enfin, vous pouvez ouvrir un navigateur et visiter la page Web à l'adresse IP externe ci-dessus (veillez à utiliser HTTP plutôt que HTTPS).

    http://EXTERNAL_IP
    

    Vous devriez pouvoir vous connecter avec les identifiants par défaut et voir les transactions sur le tableau de bord. Les transactions répertoriées proviennent du monolithe du registre actuellement hébergé dans une VM.

    Capture d'écran de Bank of Anthos

Étapes suivantes

Maintenant que vous avez activé les API nécessaires et déployé votre configuration de Bank of Anthos, vous pouvez passer à la section suivante du tutoriel, Découverte et évaluation, où vous apprendrez comment vous pouvez utiliser les outils de détection de migration pour déterminer si votre VM est adaptée à la migration à l'aide des outils Migrate for Anthos and GKE.

Si vous terminez le tutoriel après cette section, n'oubliez pas de nettoyer votre projet et vos ressources Google Cloud.

Nettoyer

Pour éviter des frais Google Cloud inutiles, vous devez supprimer les ressources utilisées pour ce tutoriel dès que vous avez terminé. Voici les ressources :

  • Le cluster GKE boa-cluster
  • La VM Compute Engine ledgermonolith-service

Vous pouvez supprimer ces ressources manuellement ou suivre les étapes ci-dessous pour supprimer votre projet, ce qui supprimera également toutes les ressources.

  • Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à 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.