Virt-Lightning
Sur votre petit nuage... 🌤
Gonéri Le Bouder
Développeur logiciel
Ansible Cloud team
Python, OpenStack, VMware, Ansible,
Cloud-Init, etc.
✉ goneri@lebouder.net
https://github.com/goneri
https://www.linkedin.com/in/goneri/
Sommaire
● Contexte
● Une VM dans un nuage, c’est quoi?
● Cloud et Linux, les outils
● Une image cloud en local
● Un outil ad-hoc
Contexte
J’utilise des machines virtuelles Cloud toute la journée.
● La création/destruction est lente, surtout par rapport à des conteneurs.
● J’utilise soit la CLI soit Ansible pour créer des VM standard.
● Mon ordinateur est rapide comparé à la latence des fournisseurs de Cloud classique.
C’est quoi une VM dans un nuage (1/2)
● Des resources virtuelles
○ Machines virtuelles
○ Réseaux
○ Volume
○ etc
C’est quoi une VM dans un nuage (2/2)
● Des Meta-datas
○ Configuration réseau
○ Clé SSH
○ Nom d’utilisateur
○ Des paquets a installer
○ Scripts shell (e.x: puppet apply)
○ Etc
Les metadatas - exemples
● AWS EC2
● RHEL Atomic host 7
● OpenStack
● Cloud-Init
Comment la VM accède aux metadatas?
● Image ISO ou image disque VFAT
● Partage HTTP
● aussi DMI/SMBIOS
Format: YAML/JSON principalement
Beaucoup de formats (legèrement) différents
● Alibaba Cloud (AliYun)
● Alt Cloud
● Azure
● CloudSigma
● CloudStack
● Config Drive
...
● Digital Ocean
● E24Cloud
● Amazon EC2
● Exoscale
● Fallback/None
● Google Compute Engine
● MAAS
● NoCloud
...
● OpenNebula
● OpenStack
● Oracle
● OVF
● Rbx Cloud
● SmartOS Datasource
● ZStack
Problème
Comment faire une image générique qui supporte tout ces clouds providers?
Cloud-Init
Abstraction entre les différents Cloud.
● Standard actuel
● Un accès simple aux meta-data
Cloud-Init
1
Cloud
provider
Lance
la
VM
etexpose
ses
m
eta-data
2
Cloud-initcollecte
les
m
eta-datas
Ils’adapte
autom
atiquem
entà
la
source
de
données.
3
Cloud-initapplication
la
configuration
La
configuration
se
faiten
deux
tem
ps.
Avantetaprès
le
dém
arrage
des
services.
4
La
VM
estprête
Les
clés
SSH
sontinjectées,les
com
ptes
sontajoutés,etc.
Cloud-Init: pour résumer
Abstraction entre les différents Cloud.
● Un accès simple aux meta-data
Mais aussi une abstraction entre les différents systèmes d’exploitation
● Linux (RHEL, Fedora, Ubuntu, Gentoo, etc)
● FreeBSD
C’est quoi une image Cloud
● Un système de base minimaliste
○ PAS de mot de compte utilisateur actif (même root)
○ PAS de configuration réseau
● Console serie active (recommendation forte)
● Cloud-Init activés au démarrage
○ Avant le réseau (meta-data sur image disque)
○ Après le réseau (DHCP)
○ Durant le démarrage des services
○ En fin de démarrage (post-configuration)
C’est quoi une image Cloud
● Mise à disposition par toutes les distributions Linux majeures
○ https://alt.fedoraproject.org/cloud/
○ https://cdimage.debian.org/cdimage/openstack/
○ https://access.redhat.com/downloads/content/479/ver=/rhel---8/8.0/x86_64/product-soft
ware
○ https://cloud.centos.org/centos/7/images/
○ https://cloud-images.ubuntu.com/
○ https://download.opensuse.org/repositories/Cloud:/Images:/
○ Etc
● Images officielles, supportées par les projets
Pourquoi utiliser une image Cloud
● Standard. Même socle que les Cloud publics.
● Éviter l’étape de l’installation.
● Image propre
○ pas de trace d’une installation antérieure, e.x: clé SSH, machine-id
● Versions des paquets figées dans l’image
○ Reproductiblité (par exemple dans une CI)
● Support de l’éditeur ou de la communauté
Note:
Cloud-init et des images disques peuvent aussi être utilisés pour des machines
physiques: OpenStack Ironic, MAAS, Amazon EC2 Baremetal.
Comment lancer une image
1. Faire une image basée sur l’image originale: qemu-img create
2. Agrandir l’image: qemu-img resize
3. Préparer les fichiers pour Cloud-init
4. Générer une image ISO: genisoimage
5. Lancer une VM qemu avec l’image QCOW2 et l’ISO
6. Retrouver l’adresse IP de la VM
Virt-Lightning
Un outil ad-hoc qui permet de remplacer ces étapes
● CLI simple
● Configuration la plus simple possible
● Rapide
● Plus tard, une jolie API Python
Demo
Virt-Lightning - ma première image
$ vl fetch centos-8
$ vl distro_list
Virt-Lightning - ma première VM
$ vl start centos-8
Virt-Lightning - ouvrir une connexion
$ vl ssh
$ vl console
$ vl viewer
Virt-Lightning - intégration avec Ansible
$ vl ansible_inventory > /tmp/inventory
Virt-Lightning - Plusieurs VM (1/2)
$ vl distro_list > virt-lightning.yaml
$ vim virt-lightning.yaml
$ vl up
Virt-Lightning - Plusieurs VM (2/2)
$ vl ansible_inventory > /tmp/inventory
$ ansible -m ping -i /tmp/inventory all
$ vl down
Virt-Lightning - Lab VMware
https://galaxy.ansible.com/virt_lightning/virt_lightning
Virt-Lightning - Intégration avec Ansible
https://galaxy.ansible.com/virt_lightning/virt_lightning
Ressources
Github https://github.com/virt-lightning/virt-lightning
Site Internet https://virt-lightning.org/
Galaxy https://galaxy.ansible.com/virt_lightning/virt_lightning
PyPi https://pypi.org/project/virt-lightning/
Questions!?
Et Vagrant?
● Philosophie VM, plutôt que Cloud
● Pas d’intégration native avec Cloud-Init et Libvirt
● Virtualbox...
● Stack Ruby
Outils connexes
● Qemu-img
● Guestfs
● Qemu et libvirt
qemu-img
Permet la manipulation d’image disque (pas forcement cloud)
● qemu-img info
● qemu-img create
● qemu-img convert
● etc...
Guestfs
Modification d’une image existante (pas forcement cloud)
● virt-customize
● virt-sysprep
● Etc
virt-sysprep -a rhel-6.10.qcow2 --run-command 'rm
/etc/sysconfig/network-scripts/ifcfg-eth0'
Libvirt et qemu
libvirt est une bibliothèque, une API, un daemon et des outils en logiciel libre de
gestion de la virtualisation.
Qemu: hyperviseur/emulateur

Virt lightning-montreal-linux-meetup-2020-02