Je poursuis l’exploration du GitOps et comme Ignite propose un mode
GitOps voyons comment fonctionne-t-il. Weave Ignite est un gestionnaire de
machines virtuelles (VM) open source intégrant le gestionnaire de Micro-VM
Firecracker mis au point par AWS.
Introdction
Ignite apporte les outils pour faciliter l’utilisation de FireCracker et
peut être une solution alternative à des produits comme Vagrant
d’HashiCorp.
FireCracker, pourquoi est-il si rapide ?
Firecracker ↗ est une alternative à
QEMU, écrit en Rust et n’intègre que le strict minimum pour faire tourner des
microVM sur KVM. Résultat, il réduit considérablement l’empreinte mémoire
utilisée par une VM(5MB), pour optimiser le temps de démarrage à 125 ms tout en
augmentant la sécurité.
Il ne supporte que les 4 drivers suivant :
virtio-block
virtio-net
une console série
une fonction utilisée pour arrêter une microVM (reboot)
Installation d’Ignite
Je vous propose de créer une VM avec Vagrant et de tout installer avec Ansible.
Le playbook Ansible :
Pour le moment, il est fonctionnel, mais je vais le compléter certainement pour
intégrer par exemple footloose, pas le film, pour créer des clusters plus
rapidement.
Ignite utilise des images OCI pour faire tourner nos micros-VM. Il faut qu’elle
utilise un noyau fourni par WeaveWorks pour fonctionner et qu’elle exécute
/sbin/init avec le PID 1.
WeaveWorks fourni des images avec comme base :
Ubuntu : weaveworks/ignite-ubuntu
Centos 7 : weaveworks/ignite-centos
Amazon Linux 2 : weaveworks/ignite-amazonlinux
Alpine Linux : weaveworks/ignite-alpine
Pour le moment la CLI ignite demande d’utiliser le compte root, mais il est
prévu de changer ce comportement dans les prochaines versions. Si vous
connaissez les commandes Docker vous ne serez pas perdu, ignite reprend les
mêmes. Ainsi, pour créer une micro VM il suffit d’utiliser la commande suivante
:
Notre VM a bien été créé, mais elle est au status Stopped. Pour la démarrer :
Elle démarre en 2 secondes. Pour se connecter dessus :
Il est possible de combiner toutes ces commandes en une seule avec run :
Les user/mot de passe par défaut sont root/root. Pour se déconnecter il faut
utiliser CTRL + P + Q
Pour stopper une VM, il est possible d’utiliser la commande reboot ou les
commandes suivantes :
Pour la détruire :
Construire des images Ignite compatible
Il est possible de créer d’autres images en utilisant les DockerFile fourni
dans le répertoire images du repo
d’ignite ↗
On peut créer des images Ubuntu, Centos 8, Alma Linux, Alpine, OpenSuse, Rocky
Linux, k3s, kubeadm, Amazon Linux
Pour les utiliser il faudra les importer avec la commande **ignite image import <identifier>**
Exécuter des commandes :
Il existe une commande pour lancer des commandes dans une VM :
Copier des fichiers
Bien sûr, par sécurité, je vous déconseille de déposer dans vos images les
secrets. Pour les intégrer il faut utiliser l’option -f strings.
Si elle est déjà instanciée on peut utiliser la commande cp:
On peut le faire aussi dans l’autre direction
Monter des volumes
Sans volumes pas de persistance. Heureusement, c’est pris en charge.
Il faut créer dans un premier temps créer le volume :
Maintenant que nous avons notre volume prêt ajoutons un fichier dedans :
Maintenant lançons une vm en montant le volume et vérifions que le fichier toto
s’y trouve :
Ca fonctionne !
Partage de ports
On utilise l’option ports :
Utiliser Ansible pour configurer les micro-vm
Commençons par installer ansible :
Générons une clé ssh:
Il faut créer une VM en utilisant cette clé :
Maintenant contrôlons que l’on peut atteindre la VM :
Prometheus
Et oui même Prometheus est intégré. Tous les VM expose des métriques.
Et le mode GitOps
Pour ceux qui ne connaissent pas encore ce qu’est le GitOps je vous renvoie à
ce billet.
Ignite peut fonctionner dans le mode GitOps, mais il faudra créer dans un
premier temps un repo git vide.
Maintenant créons un fichier déclarant une VM my-vm.yaml:
Ignited lance des git pull toutes les minutes. Au bout de quelques secondes,
vous devriez voir les choses bouger.
Cool ! Elle a été créée.
REMARQUE: Le mode HTTPS ne préserve pas les informations d’authentification
pour ignited. Pour pousser les modifications, vous devez configurer
l’authentification SSH et utiliser l’URL de clonage SSH !
Voici toutes les déclarations qui peuvent être utilisé.
Il est possible créer un service pour contrôler ignited. Pour cela créer un
fichier dans le répetoire /etc/systemd/system/ignite.service avec ce contenu :
Maintenant chargeons le service et activons le :
Maintenant il suffit de déposer un manifest dans le dossier
/etc/firecracker/manifests avec le nom my-vm.yaml :
Contrôlons que tout fonctionne :
Conclusion
Il ne reste plus qu’à tester tout cela, en construisant une stack complète. Il
suffit de créer des images avec vos applications en partant des images
Weaworks/ignite-*.
Je vais remplacer vagrant par ignite pour mon environnement de dev, car les VM
sont disponible très rapidement.