Photo by SpaceX on Unsplash

Introduction à Cloud-init

Cloud-init introduction

Voici un billet d'introduction sur Cloud-init suivi d'une démonstration d'utilisation de la solution sur Proxmox VE.

Qu'est-ce que c'est ?

Cloud-init est un outil de gestion de la configuration initiale des machines virtuelles Linux, sur n'importe quelle plateforme. Ce standard est porté par Canonical et était prévu, à l'origine, pour faciliter la personnalisation d'instances Ubuntu sur Amazon EC2. En effet, l'outil existe depuis 2010. Désormais, c'est supporté par de nombreuses distributions Linux (Ubuntu, Debian, CentOS, ArchLinux, FreeBSD etc.) ainsi que tous les grands acteurs du Cloud aujourd'hui (Amazon, Azure, GCP, OVH, Scaleway...).

Le fonctionnement est simple. Au premier démarrage de la machine, le logiciel Cloud-init paramètre celle-ci selon la configuration établie en amont. Les cas d'utilisation typiques sont les suivants :

  • Générer et configurer des clés d'accès SSH
  • Définir le nom (hostname) de la machine
  • Paramétrer le réseau de la machine (adresse IP, domaine, serveurs DNS etc.)
  • Configurer et lancer Puppet, ou encore Chef par exemple

Comment ça marche ? Démonstration sur une infrastructure Proxmox VE

Je ne prétends pas être exhaustif et vais montrer ici uniquement mon usage personnel de la solution. La démonstration est faite sur mon homelab. La base de cette infrastructure est l'hyperviseur Proxmox VE et les machines virtuelles déployées selon le processus défini ci-dessous sont des Ubuntu Server.

Avant ma découverte de Cloud-init, la création de machine virtuelle sur mon infrastructure se faisait de la façon suivante :

  1. Clone d'un template de machine
  2. Edition des attributs de la machine (CPU, RAM, disques etc.)
  3. Lancement de la nouvelle machine
  4. Connexion en console sur celle-ci
  5. Configuration du nom de machine
  6. Configuration du réseau
  7. Redémarrage de la machine

A partir de cette dernière étape, Puppet prend le relai et fait le reste de la configuration pour que la VM soit prête et exploitable.

Dans un souci d'automatisation, si je pars d'un template avec Cloud-init installé, alors :

  • L'étape 4 de la liste précédente n'est plus nécessaire
  • Les étapes 5 et 6 se font directement depuis l'hyperviseur
  • J'ajoute la création d'un compte utilisateur et l'ajout d'une clé SSH à autoriser, toujours depuis l'hyperviseur

Le nouveau processus est donc le suivant :

  1. Clone d'un template de machine (avec Cloud-init installé)
  2. Edition des attributs de la machine (CPU, RAM, disques etc.)
  3. Paramétrage Cloud-init
    • Adresse IP, serveurs DNS et domaine
    • Compte utilisateur à créer
    • Ajout de la clé publique SSH à autoriser
  4. Démarrage de la machine

Dans les faits, les étapes 2 et 3 sont effectuées en même temps. Je n'ai plus besoin de me connecter manuellement sur la machine virtuelle pour effectuer des actions. Enfin, contrairement au cas précédent, il n'est pas nécessaire de redémarrer la machine, un seul démarrage suffit.

Mise en place de Cloud-init

Deux solutions sont possibles. La première est de partir d'un template déjà prêt, fourni par les distributions Linux. Exemple avec Ubuntu : https://cloud-images.ubuntu.com/.

La seconde est de prendre une machine (qui sera ensuite transformée en template) et d'installer le paquet. Exemple sur une machine Ubuntu :

apt-get install cloud-init

J'ai personnellement choisi la seconde option, entre autre, car j'avais besoin que Puppet soit déjà installé et que sa configuration soit prête sur ma machine pour la finalisation automatique de mon déploiement.

Utilisation

Le lien Proxmox donné dans les sources en fin d'article montre comment déployer une machine virtuelle en ligne de commande. Ici, pour l'article, je vais montrer l'approche en utilisant l'interface Web.

La première étape consiste à cloner le template (ici U1604-Cloud002) : clonetemplate

Une nouvelle fenêtre s'ouvre, dans laquelle il est possible de choisir le noeud (pve01) sur lequel la machine va être créée et la nommer (CloudInitTest) : clonetemplateconfig

La machine CloudInitTest est désormais créée mais éteinte : 002 vmcreated

Dans le menu visible à gauche de la dernière capture d'écran, deux onglets sont intéressants pour la suite : Hardware et Cloud-init.

Nous ne le ferons pas ici mais l'onglet Hardware permet de modifier les attributs de la machine virtuelle. 003 vmhardware

Il existe un disque Cloudinit Drive sur la machine. Il s'agit d'un prérequis pour Proxmox VE afin que la configuration soit possible. C'est ce lecteur qui va permettre à l'hyperviseur de transmettre notre configuration à la machine lors du premier démarrage.

Enfin, l'onglet le plus intéressant est Cloud-Init : vmcloudinit

Un utilisateur est configuré (bladou). Aucun mot de passe n'est donné. Ce n'est pas nécessaire car une clé SSH est fournie pour la connexion (désignée par bladou@bladou.info dans la capture d'écran). Il est même conseillé de fournir une clé SSH plutôt qu'un mot de passe. Enfin, il est possible de configurer l'adresse ip et le sous-réseau associé, la passerelle par défaut et les informations DNS (comme montré sur la capture ci-dessus).

Nous sommes prêt et la machine peut être démarrée. En cliquant sur Start, la machine virtuelle démarre, se configure grâce aux paramètres fournis. Il est alors possible de se connecter en ssh et d'utiliser la machine.

vmssh

Cette dernière capture d'écran montre la première connexion SSH, juste après le démarrage de la nouvelle machine virtuelle. La fingerprint du serveur est acceptée et le nom de la machine (CloudInitTest) est visible sur la dernière ligne.

Cloud-Init est simple à mettre en place et son utilisation me fait gagner beaucoup de temps sur la création de mes machines virtuelles.

Sources

{{ message }}

{{ 'Comments are closed.' | trans }}