Cloud Init

Cloud-Init et VM

Cloud-Init et VM
L'article suivant parle un peu du cloud-init et des problèmes qu'il rencontre, et comment l'open source ne signifie pas nécessairement la liberté. Si vous souhaitez utiliser cloud-init pour configurer des images cloud, faites simplement défiler jusqu'au point numéro 3.

1. Ce qu'il fait?

Vous êtes-vous déjà demandé comment les fournisseurs de VPS configurent vos machines virtuelles, ajoutent vos clés SSH, créent des utilisateurs et installent des packages chaque fois que vous lancez une nouvelle machine virtuelle dans le « cloud »? Eh bien, la réponse pour la plupart des fournisseurs est cloud-init. La plupart des systèmes d'exploitation et des distributions fournissent des images de disques virtuels avec leurs systèmes d'exploitation respectifs installés dans l'image. L'installation est très minime et peut servir de modèle pour le système de fichiers racine du système d'exploitation. Les responsables du système d'exploitation ont également la gentillesse de fournir l'image de disque virtuel pour tous les différents formats, des images de disque brutes à qcow2 et même vmdk, vdi et vhd.

L'image a également un package supplémentaire pré-installé et c'est cloud-init. C'est le travail de cloud-init de initialiser la VM (généralement au sein d'un service d'hébergement cloud comme DigitalOcean, AWS ou Azure) communique avec le fournisseur d'hébergement la source de données et obtenir les informations de configuration qu'il utilise ensuite pour configurer la VM.

Les informations de configuration peuvent inclure données d'utilisateur comme les clés SSH, le nom d'hôte de l'instance, les utilisateurs et les mots de passe ainsi que toute autre commande arbitraire que l'utilisateur souhaite exécuter.

2. Le problème avec Cloud-Init

Cloud-init est un excellent outil si vous êtes un utilisateur de cloud, si vous faites tourner des machines virtuelles ou des conteneurs et que votre fournisseur de cloud a la gentillesse de vous demander une configuration cloud, c'est génial! Avec un fichier de configuration cloud, c'est-à-dire vos données utilisateur, vous pouvez ajouter des utilisateurs, exécuter des commandes arbitraires, installer des packages dès la création de la machine virtuelle. Le processus peut être répété encore et encore sans que des commandes fastidieuses soient tapées encore et encore. Bientôt vous disposez d'un parc de VM, toutes avec une configuration identique.

Cependant, si vous creusez un peu plus et voyez comment la saucisse est fabriquée, vous commencerez à remettre en question certains aspects du cloud-init. Par exemple, par défaut, la source de données est comme un point de terminaison REST, et ceux-ci sont essentiellement codés en dur dans le package cloud-init lui-même. Bien sûr, vous pouvez configurer vous-même une source de données, mais le processus est fastidieux et prend beaucoup de temps. La documentation pour ce faire est presque inexistante.

La documentation officielle n'est rien d'autre qu'un manuel d'utilisation pour les utilisateurs finaux s'appuyant sur des services cloud préexistants. Il ne vous dit pas comment configurer votre propre source de données cloud-init, au cas où vous seriez un futur fournisseur. Même la documentation de l'utilisateur final est médiocre, et je recommanderais plutôt aux personnes d'utiliser l'excellent didacticiel de DigitalOcean.

Pour aggraver les choses, les utilisateurs disposant de laboratoires de virtualisation à domicile et de petites startups VPS ont du mal à tirer parti de ces images cloud légères. Vous ne pouvez pas vraiment démarrer une machine virtuelle à partir de ces modèles sans une source de données cloud-init ou un hack difficile à automatiser et à faire évoluer. En d'autres termes, vous ne pouvez même pas choisir d'ignorer cloud-init à moins que vous ne vouliez créer vos propres modèles.

D'une manière systemd classique, il se libère de ses rôles prédéfinis et commence à perturber le réseau et d'autres parties du système d'exploitation, ce qui déstabilise les utilisateurs. Il est regroupé dans Ubuntu 18.04 serveur ISO qui n'a absolument aucun sens (du moins pas pour moi).

3. Solution de contournement pour les laboratoires à domicile

Tous les délires mis à part, je dois toujours faire face à cloud-init dans mon utilisation quotidienne. J'ai une installation Debian 9 très minimale sur du matériel x86_64, que j'utilise comme hyperviseur KVM. Je voulais vraiment utiliser les images disque qcow2 fournies par Ubuntu et CentOS. Ces images disque contiennent le système d'exploitation préinstallé et pour les utiliser, il vous suffit de :

  1. Copiez-les en tant qu'image de disque dur virtuel de votre machine virtuelle.
  2. Redimensionnez la taille virtuelle du système de fichiers racine à la taille souhaitée (au moins 10 Go sont recommandés). Cela n'augmentera pas la taille physique de votre machine virtuelle, mais l'image disque peut croître avec le temps à mesure que la machine virtuelle y ajoute plus de données.
  3. Configurer les VM à l'aide de cloud-init. Le strict minimum est de définir le mot de passe de l'utilisateur root ou les clés SSH, mais vous pouvez faire à peu près tout ce que cloud-init est capable.

Les étapes suivantes sont suivies :

  1. Téléchargez l'image cloud de votre système d'exploitation préféré et enregistrez-la dans le répertoire /var/lib/libvirt/boot :
$ cd /var/lib/libvirt/boot
$ curl -O https://cloud-images.Ubuntu.com/xenial/current/xenial-server-cloudimg-
amd64-disque1.img
$ cd /var/lib/libvirt/images
  1. Créez un disque dur virtuel vide de la taille souhaitée et développez-y l'image qcow2 téléchargée. J'aime stocker les disques durs de la VM dans le répertoire /var/lib/libvirt/images/, vous pouvez choisir un autre répertoire. Quoi que vous choisissiez, exécutez les commandes ci-dessous dans le même répertoire :
$ qemu-img create -f qcow2 maVM.qcow2 8G ## Créer un disque dur avec
taille du disque virtuel de 8 Go
$ virt-resize --expand /dev/sda1 /var/lib/libvirt/boot/xenial-server-
cloudimg-amd64-disk1.img
./maVM.qvache2
  1. Créer des fichiers cloud-init. Il s'agit de fichiers de données utilisateur et de métadonnées :
$ méta-données vim
ID d'instance : maVM
nom d'hôte local : myVM

$ vim données utilisateur
#cloud-config
utilisateurs:
- nom : racine
chpasswd :
liste : |
racine:monmotdepasse
expirer : Faux

Le seul utilisateur que j'ai ici est l'utilisateur root. Si vous ne mentionnez aucun utilisateur, alors l'utilisateur par défaut avec le nom Ubuntu est créé. Le nom d'utilisateur par défaut, diffère d'un système d'exploitation à l'autre, c'est pourquoi je recommande de spécifier un utilisateur, même s'il s'agit simplement racine. La partie suivante du fichier de données utilisateur indique à cloud-init de configurer le mot de passe pour tous les utilisateurs auxquels vous souhaitez attribuer un mot de passe. Encore une fois, je ne fais que définir le mot de passe pour l'utilisateur root, et c'est mon mot de passe. Assurez-vous qu'il n'y a pas d'espace entre les deux points et la chaîne de mot de passe.

Mieux encore, vous pouvez utiliser des clés SSH au lieu d'avoir des mots de passe codés en dur qui traînent.

$ vim données utilisateur
#cloud-config
utilisateurs:
- nom : racine
ssh_pwauth : vrai
ssh_authorized_keys :
- ssh-rsa
  1. Intégrer les fichiers de données utilisateur et de métadonnées dans un iso.
$ genisoimage -output cidata-myVM.iso -volid cidata -joliet -rock méta-données des données utilisateur

Assurez-vous que le fichier cidata-myVM.iso se trouve dans /var/lib/libvirt/images/

  1. Allez dans le répertoire /var/lib/libvirt/images et initialisez la VM avec la commande virt-install : $ virt-install --import --name myVM --memory 2048 --vcpus 2 --cpu host
    --disque maVM.qcow2,format=qcow2,bus=virtio --disk myVM-cidata.iso, appareil=cdrom
    --pont réseau=virbr0,model=virtio --os-type=linux
    --os-variante=ubuntu16.04 --noautoconsole

    Vous pouvez maintenant essayer de vous connecter à la VM en utilisant la commande virsh console myVM et en utilisant le nom d'utilisateur root et son mot de passe correspondant pour vous connecter. Pour quitter la console, tapez simplement Ctrl+]

Conclusion

Les images cloud fournies par la plupart des fournisseurs sont vraiment efficaces en termes d'utilisation des ressources et elles sont également très rapides et réactives. Le fait que nous ayons besoin de gérer la configuration maladroite de l'initialisation du cloud comme point de départ ne fait qu'entraver l'adoption par la communauté de KVM et des technologies associées.

La communauté peut apprendre beaucoup de la façon dont Docker construit et expédie ses images. Ils sont vraiment faciles à gérer à la fois en tant que conteneurs en cours d'exécution et modèles faciles à distribuer et à utiliser.z

Comment utiliser AutoKey pour automatiser les jeux Linux
AutoKey est un utilitaire d'automatisation de bureau pour Linux et X11, programmé en Python 3, GTK et Qt. En utilisant ses fonctionnalités de script e...
Comment afficher le compteur FPS dans les jeux Linux
Les jeux Linux ont reçu une impulsion majeure lorsque Valve a annoncé la prise en charge de Linux pour le client Steam et leurs jeux en 2012. Depuis l...
Comment télécharger et jouer à Civilization VI de Sid Meier sur Linux
Présentation du jeu Civilization 6 est une version moderne du concept classique introduit dans la série de jeux Age of Empires. L'idée était assez sim...