Weave Ignite et Weave Footloose dans Scaleway : quand les machines virtuelles se prennent pour des containers et inversement …

Image for post
Image for post

Weave a mis au point Ignite sur la base de Firecracker qui a la possibilité comme Docker de gérer les containers runC. Ignite construit des images de machines virtuelles à partir d’images OCI et peut gérer efficacement plusieurs machines virtuelles.

Image for post
Image for post

L’idée est qu’Ignite fait ressembler les VM Firecracker à des containers Docker. Les images utilisées sont des images Docker, mais au lieu de les exécuter dans un container, le système de fichiers racine de l’image s’exécute comme une VM réelle avec un noyau dédié et /sbin/init comme PID 1.

La mise en réseau s’effectue automatiquement, la VM obtient la même adresse IP que n’importe quel container docker sur l’hôte. La construction et le démarrage des VMs ne prennent au plus que quelques secondes. Avec Ignite, on peut commencer à utiliser Firecracker en un rien de temps …

Pour cette expérience, je profite de l’annonce faite par Scaleway de mettre à disposition ses instances General Purpose à base d’AMD EPYC dans la région d’Amsterdam :

https://cdn-images-1.medium.com/max/1600/1*Rc0Cq4_X3UjSkQXUvO0_wg.jpeg

Ces instances permettent l’usage de la virtualisation imbriquée (même s’il n’y a rien d’officiel sur ce point) :

Image for post
Image for post
Image for post
Image for post

Au préalable, il faut procéder à l’installation du moteur Docker :

Image for post
Image for post

Rapide avec le lancement d’une microVM Ubuntu 18.04 :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

J’y ai lancé un serveur Nginx qui répond en utilisant ici un tunnel Cloudflare Argo :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Je peux supprimer ce déploiement via quelques commandes :

Image for post
Image for post

Je passe à un test plus compliqué avec le déploiement d’un cluster Kubernetes en mode HA via Kubeadm :

Je lance un script de préparation avant le lancement des VMs :

Image for post
Image for post
Image for post
Image for post

Lancement du premier noeud maître du cluster via une image contenant Kubeadm :

Image for post
Image for post

et initialisation de ce noeud avec Kubeadm :

Image for post
Image for post

Récupération du client kubectl et le premier noeud maître du cluster est opérationnel :

Image for post
Image for post

Lancement des deux autres noeuds maîtres :

Image for post
Image for post

et raccordement de ces derniers au premier noeud maître du cluster pour initier ce mode HA :

Image for post
Image for post

Le cluster est prêt à recevoir ses noeuds Worker :

Image for post
Image for post

Pour cela création de trois noeuds Worker :

Image for post
Image for post

et raccordement de ces derniers au cluster via Kubeadm :

Image for post
Image for post

Le cluster Kubernetes sur la base de ces microVMs Ignite est fonctionnel :

Image for post
Image for post

Via Cockpit je peux visualiser ces MicroVMs comme de simples containers :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Je peux importer ce cluster dans un serveur Rancher préalablement déployé pour la circonstance :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Le cluster est alors importé et visualisable dans le dashboard du serveur Rancher :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

avec Grafana pour le monitoring :

Image for post
Image for post
Image for post
Image for post

Dans une logique ChatOps, installation de BotKube :

Un bot lié à Slack va permettre l’exécution de commandes ou la réception d’infos de monitoring selon ce principe :

Image for post
Image for post

Activation de l’application dans Slack :

Image for post
Image for post

puis déploiement dans le cluster Kubernetes installé précédemment :

Image for post
Image for post

Le bot répond et peut interagir ici dans un canal de Slack :

Image for post
Image for post
Image for post
Image for post

Déploiement encore une fois dans le cluster du démonstrateur FC :

Image for post
Image for post
Image for post
Image for post

vu par le Bot :

Image for post
Image for post

Et lancement d’un container Docker avec HAProxy via ce fichier de configuration (le serveur pointe sur les noeuds Ignite et le NodePort du service associé au démonstrateur FC au sein du cluster) :

Image for post
Image for post
Image for post
Image for post

Cloudflare Argo et son tunnel permet d’exposer publiquement le démonstrateur :

Image for post
Image for post
Image for post
Image for post

Il est possible également d’utiliser le service de Load Balancer offert par Scaleway :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

On a vu les VMs qui se prennent pour des containers avec Weave Ignite et bien passons aux Containers qui se prennent pour des VMs avec l’utilisation cette fois-çi de Weave Footloose :

Weave Footloose crée des containers qui ressemblent à des machines virtuelles. Ces containers s’exécutent en tant que PID 1 et un démon ssh peut être utilisé pour se connecter à ces derniers. Ils se comportent quasiment comme une VM, il est même possible d’y faire tourner un moteur Docker. Pour cela utilisation d’une autre instance AMD EPYC de Scaleway avec ubuntu 18.04 LTS dans la région d’Amsterdam :

Image for post
Image for post

Récupération du binaire Footloose depuis son dépôt sur Github :

Image for post
Image for post
Image for post
Image for post

Tout commence par la création d’un fichier de configuration YAML nommé footloose.yaml . Footloose lit une description du cluster de Machines à créer à partir de ce fichier. Un autre nom peut lui être spécifié en ligne de commande avec l’option — config ou via la variable d’environnement FOOTLOOSE_CONFIG . Lancement ici d’une instance CentOS 7 avec Footloose autorisant l’exécution d’un moteur Docker en mode privilégié :

Image for post
Image for post

Je lance cette instance Footloose (qui est en réalité un container Docker) mais qui se gère donc ici comme une machine virtuelle.

Image for post
Image for post

Même test que précemment avec l’installation d’un serveur Nginx via son image Docker (j’ai donc un container qui tourne dans un container) :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Je peux exposer ce serveur Nginx encore une fois via Cloudflare Argo :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

dans la première instance, lancement du noeud maîre du cluster avec l’installation au préalable d’un moteur Docker :

Image for post
Image for post

puis lancement de k3s :

Image for post
Image for post
Image for post
Image for post

Je raccorde les deux autres instances comme noeuds Worker du cluster encore une fois via k3s et l’installation au préalable d’un moteur Docker :

Image for post
Image for post

Le cluster est alors opérationnel :

Image for post
Image for post

et donc importable dans le serveur Rancher :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Je relance le déploiement du démonstrateur FC dans ce cluster :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Il est accessible sur le port TCP 11111 sur chaque noeud du cluster :

Image for post
Image for post

lancement comme précédemment d’un container Docker HAProxy en load balancer pointant sur ce port spécifique sur les trois noeuds :

Image for post
Image for post
haproxy.cfg
Image for post
Image for post

Il répond sur le port TCP 80 de l’instance dans Scaleway :

Image for post
Image for post

Je peux l’ajouter en nouveau back-end dans le load balancer précédent dans Scaleway pour arriver à ce résultat :

Image for post
Image for post

Je complète donc la configuration du load balancer créé dans Scaleway :

Image for post
Image for post

Je n’ai plus qu’un seul endpoint qui pointe sur les deux démonstrateurs (l’un dans un cluster k8s avec Weave Ignite, l’autre avec le cluster k8s s’appuyant sur Weave Footloose) …

Image for post
Image for post

A suivre !

Image for post
Image for post

Above the clouds, the sky is always blue ...

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store