Cloud-Init
Cet article est à vocation d'initiation et donne les pistes pour démarrer. Je vais me consacrer sur l'utilisation de Cloud-Init dans Proxmox et non un tuto sur Cloud-Init qui est à lui seul un sujet à part entière. La chaine Youtube et Twitch de @AHP_Nils traite de ce sujet au moment de la rédaction de cet article.
Cloud-Init
Cloud-Init est un projet développé par Canonical pour Ubuntu datant de 2010 sous les licences Apache 2.0 et GPLv3.
Pour utiliser Cloud-Init, on utilise un fichier formaté en YAML. Ce fichier permet de définir plusieurs paramètres basiques à des tâches post-lancement de la machine virtuelle. Exemples de ce que l'on peut configurer :
- Configuration du réseau
- Nom de la machine virtuelle
- Clefs ssh autorisées
- Utilisateurs
- Installer des paquets
- Configurer sudo
- Mise à jour
- Redimensionner des partitions
Au fil des années, Cloud-Init est devenu un standard d'initialisation des machines virtuelles que l'on retrouve chez les fournisseurs de cloud publics :
- AWS
- Azure
- OVHcloud
- Scaleway
- Digital Ocean
- Joyent/SmartOS
- OpenNebula
- etc.
Mais aussi disponible sur des offres de cloud privé :
Cloud-Init est disponible pour différents systèmes d'exploitation :
- Alpine Linux
- ArchLinux
- Debian
- DragonFlyBSD
- Fedora
- FreeBSD
- Gentoo Linux
- NetBSD
- OpenBSD
- openEuler
- RHEL/CentOS/AlmaLinux/Rocky/PhotonOS/Virtuozzo/EuroLinux/CloudLinux/MIRACLE LINUX
- SLES/openSUSE
- Ubuntu
Les distributions Linux proposent généralement des images de déploiement pour les différents cloud avec Cloud-Init intégré. Concernant la famille des BSD, elles sont toutes trouvables sur le site bsd-cloud-image.org.
Intégration de Cloud-Init dans Proxmox
Je vais faire rapide, Cloud-Init est intégralement supporté.
Pour utiliser basiquement Cloud-Init, il faut rattacher à la machine virtuelle un volume supplémentaire comme pour le cas d'UEFI (soupir).
(et l'utilisation d'un fichier de configuration au format YAML sera à indiquer en ligne de commande)
Template
On va créer un template a base d'une image Debian dédiée au cloud.
wget https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2
Ensuite, il faut importer le fichier récupéré pour que Proxmox sache le gérer et en faire un template. Mon proxmox est configuré avec des volumes LVM dont le point de montage est le nom par défaut : local-lvm
Création d'une machine virtuelle :
qm create 9000 --name debian-11-genericcloud-template --memory 1024 --net0 virtio,bridge=vmbr0 --sockets 1 --cpu cputype=kvm64
Cloud-Init demande l'utilisation d'une console série :
qm set 9000 --serial0 socket --vga serial0
On importe le fichier .qcow2 pour en faire un disque :
qm importdisk 9000 debian-11-genericcloud-amd64.qcow2 local-lvm
On attache le disque à la machine virtuelle :
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --boot c --bootdisk scsi0
Si vous désirez agrandir la taille du disque, par défaut, elle est de 2G pour l'image que j'ai récupérée. On augmente de 18G donc cela fera un disque de 20G :
qm resize 9000 scsi0 +20G
On ajoute le volume dédié à Cloud-Init :
qm set 9000 --ide2 local-lvm:cloudinit
Création du template :
qm template 9000
Le template Debian est terminé.
Création d'une machine virtuelle
On clone le template :
qm clone 9000 100 --name deb-cloud-init-test
Méthode Proxmox
On configure l'IP de la machine virtuelle :
DHCP :
qm set 100 --ipconfig0 ip=dhcp
IP fixe :
qm set 100 --ipconfig0 ip=192.168.1.100/24,gw=192.168.1.1
qm set 100 --ipconfig0 ip6=fd2c:06d1:651e:b83e::2/64,gw6=fd2c:06d1:651e:b83e::1
DNS :
qm set 100 --nameserver 192.168.1.1
Utilisateur :
qm set 100 -ciuser nidouille
Clefs SSH :
qm set 100 --sshkey ~/.ssh/id_rsa.pub
Méthode fichier en YAML
Cette méthode n'est pas très explicite dans Proxmox, la documentation dit que le fichier doit être dans le répertoire snippets sans en indiquer son emplacement. Car par défaut, ce répertoire n'existe pas !
Les fichiers Cloud-Init sont ici dans l'arborescence système : /var/lib/vz/snippets/user-data.yaml
qm set 100 --cicustom "user=local:snippets/userconfig.yaml"
Il est aussi possible d'indiquer un point de montage réseau pour récupérer le fichier. Je ne l'ai pas testé et pour cela, c'est un renvoi sur un sujet du forum de Proxmox : cloud-init and cicustom
--cicustom "user=<volume>,network=<volume>,meta=<volume>"
Fichier basique pour mon home-lab :
#cloud-config
#Mise a jour de l'os
package_update: true
package_upgrade: true
#Installation de paquet
packages:
- qemu-guest-agent
- apt-transport-https
- curl
- ufw
#Ajout d'un utilisateur
users:
- default
- name: nidouille
groups: [ sudo ]
shell: /bin/bash
homedir: /home/nidouille
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh_authorized_keys: #Clefs ssh publiques
runcmd:
- curl https://repository.rudder.io/tools/rudder-setup | bash -s setup-agent 7.0 [policy server hostname or ip]
- wget https://repo.zabbix.com/zabbix/5.4/debian/pool/main/z/zabbix-release/zabbix-release_5.4-1+debian11_all.deb
- apt update
- apt install zabbix-agent -y
Bibliographie
Documentation officielle :
https://pve.proxmox.com/wiki/Cloud-Init_Support
https://pve.proxmox.com/pve-docs/qm.1.html
https://github.com/proxmox/pve-docs/blob/master/qm-cloud-init.adoc
Forum Proxmox :
https://forum.proxmox.com/threads/cloud-init-and-cicustom.58959/
Articles divers :
No Comments