Le Cloud sur votre PC - Partie 1 : Créer vos VMs autrement avec Multipass
Quand vous achetez un VPS (Virtual Private Server) chez un fournisseur cloud, cela prend environ 5min et votre VPS est tout configuré, tout prêt pour usage ; alors pourquoi dès que vous avez besoin d'une VM (Virtual Machine) sur votre PC, pour un lab, ou juste un petit test, cela doit prendre au moins une heure avec des étapes interminables de configurations, de confirmations, de oui-oui-non-oui-etc?
Dans cet article, nous allons aborder les points suivants :
- Installer & configurer multipass ;
- Utiliser les clouds images & les cloud-configs ;
- Créer des machines virtuelles reproductibles & disposables.
Les pré-requis
- Une machine
- Une connexion internet
- L'accès au repo github the-labs (Les configurations & instructions utilisées dans cet articles y sont disponibles)
Dans cet article, les termes VM et instance seront utilisés de façon interchangeable à plusieurs reprises; Le but étant de vous familiariser avec les deux termes, le second (instance) étant beaucoup plus cloud-style que le premier (VM).
Multipass
C'est quoi réllement multipass
Multipass se definit comme un outil permettant de créer rapidement des VM Ubuntu à la façon du cloud tout en etant sur votre machine Linux, macOS ou Windows. Pour faire court, avec multipass, vous pourrez créer des VM, et en disposer depuis votre terminal avec rapidité et une facilité déconcertante.
Que se passe t-il en vrai ?
Pour plus les curieux (que nous sommes tous ici), Multipass utilise
- cloud image : C’est un modèle de système d’exploitation préconfiguré, prêt à être déployé. Un peu comme les machines OOBE de Windows : tout est presque prêt, il ne reste plus qu’au premier utilisateur de finaliser la configuration. c'est le secret derrière la vitesse à laquelle les fournisseurs cloud vous créer vos VPS.
- cloud-init : C'est un programme qui s'exécute au premier lancement de votre VM pour configurer automatiquement utilisateurs, réseau et logiciels. C’est lui qui fait d’une simple cloud-image une machine prête à l’emploi.
- cloud-config : Vouyez-vous le moment où l’on vous demande d’entrer votre clé SSH afin de valider la création de votre VPS ? C’est là que vous utilisez le cloud-config sans vous en rendre compte. C’est le fichier que cloud-init utilise pour personnaliser l’instance.
- virtualiseur natif: multipass utilise derrière par défaut sous capot l'outil de virtualisation natif de votre système d'exploitation. il est bien possible d'utiliser un outil tiers (pour l'instant, je n'ai tester que VirtualBox); mais l'outil natif de votre système est le plus recommandé: HyperV pour Windows, kvm/qemu pour Linux. nous reviendrons plus tard sur l'avantage d'utilser le virtualiseur natif de l'OS.
Installation de multipass
Multipass est un outil cross-platform disponible sur Linux, macos & Windows. Il est installable via les binaires de vos OS ou via les packages manager.
- Linux
snap install multipass- Windows
winget install Canonical.MultipassJe vous recommande de voir la documentation pour plus de détails. nous allons passer à la création des VMs.
Creer vos VM
Une vois que vous avez completé l'installation de multipass, tout est fin prêt pour commencer par créer vos VMs. Vérfifier votre installation.
multipass versionJe l'ai annoncé plus tôt, la création d’une VM avec Multipass prend généralement moins de 2 minutes. À noter que la première fois que vous utilisez une cloud-image spécifique, si elle n’est pas encore disponible localement, Multipass la téléchargera d'abord. Mis à part ce détail, vos VM seront prêtes en moins de 2 minutes.
Créer vos instances (Niveau 1)
Création des instances
La commande pour créer une instance avec multipass est la suivante:
multipass launchSi vous lancer juste cette commande, multipass utilisera les paramètres par défault pour vous créer votre instance. Un peu comme avec docker, multipass a le chic pour choisir automatiquement des noms plutôt originaux pour vos instances si aucun nom n'est fourni.
Ajoutons un peu de personnalité à notre instance, lancer la commande ci-après :
multipass --disk 10G --memory 2G --cpus 2 launch --name srv-demoLe cli de multipass est assez intuitive. je vous invite à lancer cette commande dans votre terminal et à voir par vous même le resultat.
Utilisation
Une fois l'instance créée, ulisez la commande ci-dessous vous voir les instances actuellement disponibles.
multipass lsNous avons précedement créer l'instance srv-demo. essayer cette commande et observer le résultat.
ping srv-demoAlors, surpris ???, olala, rien ne se passe, et c'est normal (garder ceci bien en mémoire, nous allons revoir cela bientôt).
Deux principaux moyens existent pour interagir avec votre nouvelle instance depuis votre host:
- Lancer les commandes dans la VM directement depuis votre hosts:
multipass exec srv-demo -- uname -a- Ouvrir un shell direcement dans la VM :
multipass shell srv-demoFelicitations, vous venez d'ouvrir un shell dans votre VM via multipass (En arrière-plan, Multipass utilise une connexion SSH configurée automatiquement entre votre hôte et l’instance.). Amusez-vous un peu avec quelques commandes linux, pourquoi pas la fameuse commande de la mort (sudo rm -rf --no-preserve-root /) ?
Pour disposer de la VM une fois vos tests terminés, utilisez la commande suivante :
multipass delete --purge srv-demoVous venez de librer la place, essayer la commande multiapss ls...vous ne voyez plus rien, vous avez supprimer cette instance. vous pourez toujours la recréer identiquement, l'utiliser puis vous en débarasser, et recommencer. (à ce niveau, l'on se demande surtout les première fois comment est-ce si facile de créer une VM, supprimer et recommancer aussi facilement et aussi rapidement ??)
Créer vos instances (Niveau 2)
Quand vous acheter un VPS, vous avez la possibilité de choisir la version de l'OS, definir certaines configurations clé, passer une clé ssh, etc... C'est justement ce que nous allons voir à cette étape.
Nous avons précédement parlé de cloud-init & de cloud-config. Le cloud-config est un fichier yaml qui permet de définir des instructions sur les caracteristiques de l'instance à créer. les fichiers de configurations qui seront utilsées dans cette section sont disponibles sur ce repo github. voici un exemple de cloud-config :
hostname: srv-01
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
locale: fr_FR.UTF-8
packages:
- build-essential
- gpg
- zsh
groups:
- devops
users:
- name: demo
groups: sudo,docker,devops
shell: /bin/zsh
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh-authorized-keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFuqfhaycTfJKPVZsao0+3YUqEB2SGgnGPr3xlMKmq5r
runcmd:
- systemctl enable ssh
- systemctl start sshCette configuration donne des instructions sur les configurations suivant: le hostname de la VM, les packages à installer, les groupes et les utilisateurs à créer, les commandes à lancer par défaut (ici pour activer les services ssh), et surtout le plus important, passer la clé publique d'une paire de clé ssh pour établir une connection ssh plus tard; vous pouvez bien-sûr passer plusieurs clé ssh.
La documentation de cloud-init vous donnera plus détails sur tout ce qu'il est possible de faire avec les cloud-configs et que nous ne pouvons pas aborder ici.
Créer les instances à présent (les fichiers de configuration se trouver sur le repo :
multipass launch --disk 10G --memory 1G --cpus 1 --name srv-01 --cloud-init ./srv-01.yml 24.04
multipass launch --disk 10G --memory 1G --cpus 1 --name srv-02 --cloud-init ./srv-02.yml 24.04Cette fois, il y a deux paramètres en plus:
- le
--cloud-initpour passer le cloud-config - le 24.04 : il s'agit ici de la version du cloud-image ubuntu que l'on shouhaite utiliser pour la VM. la command
multipass findpermet de voir la liste de toutes les versions disponibles.
Utilisez toujours comme hostname dans le cloud-config le --name que vous avez donné à votre instance.
Customiser l'utilsateur à créer et ajouter dans ses instructions votre clé publique ssh (de préference celle que utiliser pour vos test en local).
Félicitations!!!, vous venez de créer une votre première VM qui n'a rien à envier une serveur en ligne (à part le fait qu'il ne soit pas accessible sur internet bien-sûr). Les cloud-provider n'utilisent certes pas multipass, mais voilà globalement comment vos VPS sont créés; et vous le faites aisement sur votre PC.
L'atout ultime de multipass
L'on ne vas pas s'arrêter en si bon chemin, explorons à présent l'atout ultime de multipass. continuons avec les deux instances créées plutôt: srv-01 & srv-02.
Le réseau interne entre les instances
Ouvrez une session shell interactive dans les deux VMs (la commande étant: multipass shell instance-name)
le srv-01 résoud srv-02 et peut comminiquer avec lui; la réciproque est valable. Oui, multipass crée un réseau entre les instances que vous créez leurs permettant ainsi de communiquer entre-elles.
Le réseau entre les instances et votre host (PC)
Lorsque vous créez plusieurs instances avec Multipass, celles-ci sont automatiquement placées sur un réseau privé commun.
Concrètement :
- Les instances peuvent communiquer entre elles.
- Le host (votre PC) peut communiquer avec les instances.
- Un mécanisme de résolution DNS local permet d’utiliser les noms des machines plutôt que leurs adresses IP.
Autrement dit, Multipass recrée une petite topologie réseau similaire à celle d’un environnement cloud.
Sur windows
Lorsque Multipass utilise Hyper-V, un réseau virtuel interne est automatiquement configuré. Multipass exploite ce réseau. le domaine local utilisé est generalement mshome.net. Le host et les instances peuvent se joindre sans configuration supplémentaire.
Vous pouvez tester :
ping srv-01.mshome.net
ping srv-02.mshome.netSur linux
Sous Linux, Multipass s’appuie généralement sur QEMU / KVM et crée une interface réseau dédiée (souvent mpqemubr0). Le domain à utiliser est multipass.
Vous pouvez donc tester :
ping srv-01.multipass
ping srv-02.multipass(image des tests sous linux)
Si la résolution fonctionne entre les VMs mais pas depuis le host, il peut être nécessaire d’ajuster la configuration de systemd-resolved pour pointer vers l’IP du bridge Multipass ; et rassurez-vous, pour avoir eu le même soucis, j'ai une solution pour vous.
- Assurez vous le service
systemd-resolvedest actif sur votre PC - Identifier l'interface réseau utiliser par multipass: par default, il créer et utiliser l'interface
mpqemubr0et l'IP par défaut devrait être10.92.134.1. si cette addresse IP est différente, passez à l'étape 3. - Creez le fichier de configuration qui permettrait à la résolution du domain multipass depuis votre host egalement.
sudo mkdir -p /etc/systemd/resolved.conf.d
echo -e "[Resolve]\nDNS=10.92.134.1\nDomains=~multipass" | sudo tee /etc/systemd/resolved.conf.d/multipass.confCette fois-ci, vous l'avez eu, plus rien ne peut vous arrêter.
La communication distante simulée
A présent, nous créeons des VMs, les communications VMs-VMs & host-VMs fonctionnement correctement graces aux noms de domains disponible selon l'OS. faisons comme cela se fait normalement quand l'on veut communiquer avec un server distant fournit par un cloud-provider : le ssh
Vous avez passé dans le cloud-config votre clé ssh publique pour votre utlisateur; vous pouvez donc établir une connexion ssh et ouvrir un terminal dans vos VMs.
ssh -i ~/.ssh/local_key demo@srv-01.mshome.netÀ présent, vous avez tout en main, vous pouvez tout faire avec multipass à present, avec un peu de pratique, vous ne vous en passerez.
Si vous envisagez héberger un service web sur vos instances, le nom de domaine rataché aux instances est résolvable dans un navigateur web; (uniquement le domain) srv-01.mshome.net passe; mains app1.srv-01.mshome.net ne passera pas!!!)
Conclusion
Au final, ce qui distingue un VPS cloud d’une VM sur votre PC, ce n’est pas de la magie, mais l’automatisation et les modèles prêts à l’emploi. Avec Multipass, les cloud images, cloud-init et vos propres configurations, vous pouvez créer des instances reproductibles et configurées automatiquement, que vous pouvez détruire et recréer en quelques minutes.
Désormais, créer un lab pour tester votre prochain projet ne devrait plus être une corvée d’une heure, mais bien une opération de quelques minutes.