Weave Ignite et Weave Footloose dans Scaleway : quand les machines virtuelles se prennent pour des…
Tags: scaleway, weave, containers, kubernetes
Published: 2019-08-24 17:43:17

---
title: Weave Ignite et Weave Footloose dans Scaleway : quand les machines virtuelles se prennent pour des…
published: true
tags: scaleway,weave,containers,kubernetes
canonical_url: https://medium.com/@abenahmed1/weave-ignite-et-weave-footloose-dans-scaleway-quand-les-machines-virtuelles-se-prennent-pour-des-e28f5312a59f
---

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

![](https://cdn-images-1.medium.com/max/749/0*naSE2FI_HbGQ-0dK.png)

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.

![](https://cdn-images-1.medium.com/max/742/1*54k7ytMLIGcVxls87Y7KoQ.jpeg)

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.

[Firecracker](https://firecracker-microvm.github.io/)

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 …

[weaveworks/ignite](https://github.com/weaveworks/ignite)

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 :

[Nouvelles instances cloud à Amsterdam & tour d'horizon des nouveautés à venir](https://blog.scaleway.com/2019/nouvelles-instances-cloud-ams1-nouveautes-a-venir/)

![https://cdn-images-1.medium.com/max/1600/1*Rc0Cq4_X3UjSkQXUvO0_wg.jpeg](https://cdn-images-1.medium.com/proxy/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) :

![](https://cdn-images-1.medium.com/max/1024/1*35Kvu5NZjrCRtzH0r3e1Jg.jpeg)

Cette instance lancée, je récupère le binaire Ignite depuis son dépôt sur Github :

[weaveworks/ignite](https://github.com/weaveworks/ignite/releases)

![](https://cdn-images-1.medium.com/max/1024/1*94dIzHV7FOdB15v52GIjCw.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*EdS_3cygbgbXwARVoOivWA.png)

Rapide avec le lancement d’une microVM Ubuntu 18.04 :

![](https://cdn-images-1.medium.com/max/600/0*wnvmt5SMxTMgOtVw.jpg)

![](https://cdn-images-1.medium.com/max/1024/1*xsPwpLlM_bXsgAg_aqIJKg.png)

![](https://cdn-images-1.medium.com/max/1024/1*FNSE2ZPqCfhN7U69N6IodA.png)

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

![](https://cdn-images-1.medium.com/max/952/1*KLcrdTCH629gnSyfpBsobw.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*Yvl5rWC-2J4x8tbIzDPAHw.png)

![](https://cdn-images-1.medium.com/max/1024/1*l_Dh2KFAPM6BdJ4N6TKkmQ.jpeg)

Je peux supprimer ce déploiement via quelques commandes :

![](https://cdn-images-1.medium.com/max/1024/1*4ycOXETd4dm7rREO3NYsrQ.png)

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

[weaveworks/ignite](https://github.com/weaveworks/ignite/tree/master/images/kubeadm)

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

![](https://cdn-images-1.medium.com/max/1024/1*IuGlX2FfU8GHJA_MnY0vQg.png)

![](https://cdn-images-1.medium.com/max/1024/1*cDko8tB30iBkf4TmA5wDtA.png)

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

![](https://cdn-images-1.medium.com/max/1024/1*RtqTHHos-qajyc8utp5cMg.png)

et initialisation de ce noeud avec Kubeadm :

![](https://cdn-images-1.medium.com/max/1024/1*M4m_IU59910vZkhKOHB9Cw.png)

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

![](https://cdn-images-1.medium.com/max/1024/1*6be7xQeuSCtDtwH6swhZbQ.png)

Lancement des deux autres noeuds maîtres :

![](https://cdn-images-1.medium.com/max/1024/1*jialYlc0BWGaP5G3d4VNlg.png)

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

![](https://cdn-images-1.medium.com/max/1024/1*7rzsZLx3s57Du2keBWLcqQ.png)

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

![](https://cdn-images-1.medium.com/max/1024/1*LB3XE_QSE9sRC3HgQYWlIQ.jpeg)

Pour cela création de trois noeuds Worker :

![](https://cdn-images-1.medium.com/max/1024/1*dt0SNEyMMvtallezil57tg.png)

et raccordement de ces derniers au cluster via Kubeadm :

![](https://cdn-images-1.medium.com/max/1024/1*FzGT9dGVpT3xBmAHj4mU0g.png)

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

![](https://cdn-images-1.medium.com/max/1024/1*Joz8KSE--WGK9s0QTyWOTA.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*xZd-bUJ3nhatZxH2kq1ZaA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*-b7TPzEpjzqfYUD5rVlRmg.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*Ykd3dafZZVzZGf93h0pfrg.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*Fzt5aRQDv0E689sbAIOGBA.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*3qnH-Mc-1YKtYOu4ebDWGA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*qQYIxfbiKo8e_QpmsFexQA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*GESFrcjoK2r8n0EUM2d56Q.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*A4E19aizDmttK9D-IT7zzQ.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*Iey_wAIJ4dOHxqmzn7Vy6A.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*pNsRLwQ5hlT8Q1tyqXDnmA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*ORaTjNHX2NkIFKavi07q2A.jpeg)

avec Grafana pour le monitoring :

![](https://cdn-images-1.medium.com/max/1024/1*4eSnk01bhk6gzJu_Ic-QHg.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*ug7W7-EW-WuwuKl_ULAu0A.jpeg)

Dans une logique ChatOps, installation de BotKube :

- [Usage :: BotKube](https://www.botkube.io/usage/)
- [infracloudio/botkube](https://github.com/infracloudio/botkube)

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

![](https://cdn-images-1.medium.com/max/901/0*AKzEbGzry2uRAd-7.jpg)

Activation de l’application dans Slack :

![](https://cdn-images-1.medium.com/max/1024/1*6dKWH8osV3I3IJH2-qONjQ.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*INfhqkUd1igyII01WpFMLQ.png)

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

![](https://cdn-images-1.medium.com/max/1024/1*R67QHDuxo61IJfJZfntrOA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*tLxm6A_UoRnrrs1TsGFA9Q.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*wpkPMoQLCyqJ_-6Qw1y0tg.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*dnYyN4qb-iD4Vlz0UGfNTg.jpeg)

vu par le Bot :

![](https://cdn-images-1.medium.com/max/1024/1*jCzI4PQxZGfwwlrYoLLvuw.jpeg)

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) :

![](https://cdn-images-1.medium.com/max/1024/1*WfCkN4Ea6lSTwHobTpsd3Q.png)

![](https://cdn-images-1.medium.com/max/1024/1*dJ1ajNbOCnoQKXnO-IFM4g.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*bpsNaYB3U8Lv-Z4T541WwQ.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*2e715UHlQ37HeHfZZBqc1Q.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*vzXM-jeE_tgBJSctHdxBRg.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*1Rlvm-Jj_aKPn5umbj4KNw.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*iBagNuiiDo9P6nKaDk_GhA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*LBLJEQZ63sHUpTuE9g-jxg.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*84x5ZrV9_nQf3CEXJkP68g.jpeg)

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 :

[weaveworks/footloose](https://github.com/weaveworks/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 :

![](https://cdn-images-1.medium.com/max/1024/1*bEyw_CA7Ib5SYYv0cSTAmw.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*unTqd-F4CTVOK6jg-ZofCw.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*KK1Oyx8pagC24jaUW07oUw.jpeg)

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é :

![](https://cdn-images-1.medium.com/max/1024/1*LBUF-B78BTEHx1jhfefv6w.png)

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

![](https://cdn-images-1.medium.com/max/1024/1*j1xjDFj5GYq7DcBkVroVBQ.jpeg)

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) :

![](https://cdn-images-1.medium.com/max/744/0*LcazMmxrB9rRAGWh.jpg)

![](https://cdn-images-1.medium.com/max/1024/1*0CTgFoqlfVQrJr-OUUAP5g.png)

![](https://cdn-images-1.medium.com/max/1024/1*M24sXQVrgkkGFB7It8hhRg.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*C9fjPP6SaCe3bqG3e-Jr_A.jpeg)

![](https://cdn-images-1.medium.com/max/1013/1*NOUoKlmuR01YIeucaBsZfg.jpeg)

Test cette fois avec l’initialisation d’un cluster Kubernetes via Rancher k3s dans trois instances Footloose :

- [rancher/k3s](https://github.com/rancher/k3s)
- [k3s: Lightweight Kubernetes](https://k3s.io/)

via ce fichier YAML :

![](https://cdn-images-1.medium.com/max/530/1*PR6BMjREJ_n7cX4T-HoJXw.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*cl4ky_hLw2GvWdRQnYj-Yw.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*pZRkJb9TbQQN8IKUPoGJsw.jpeg)

puis lancement de k3s :

![](https://cdn-images-1.medium.com/max/1024/1*eDqvWpCysnUFxlIeKS6_6Q.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*bSsnJyhJWVNp5sX984scDw.jpeg)

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 :

![](https://cdn-images-1.medium.com/max/1024/1*gazjEfBXxLgjFrB8y2a2Cw.jpeg)

Le cluster est alors opérationnel :

![](https://cdn-images-1.medium.com/max/1024/1*fJ8XM-0PG6Hhp8oPE-_dcw.jpeg)

et donc importable dans le serveur Rancher :

![](https://cdn-images-1.medium.com/max/1024/1*3QoQEP8gScKYBBL7gg-phw.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*NIyHaSWE7PBNXMjbMGBNmA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*VXf43q5wmmNL6kIdcnSl1g.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*Hl2uCTNVLmzepdNbTtVgWw.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*pI6o9GiEY9eznJVuRbLYQQ.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*Xz_U_b8ieE8F5NiwgHXGLg.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*Qt8irtSXygUGxKOaytGvsw.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*3XBEna4vJ858ogzED5xFxQ.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*AcdyYZz66DBlWOHcgjRcqg.jpeg)

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

![](https://cdn-images-1.medium.com/max/908/1*eQ2ifDeuUp08GuQiie-IMw.png)<figcaption>haproxy.cfg</figcaption>

![](https://cdn-images-1.medium.com/max/1024/1*8QBefHmU80W6WNq2_gMNeA.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*IqqY-TjW3cHS5aP5CIRLYw.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*tjHAwGAvc_YYIhbhPJfxPA.jpeg)

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

![](https://cdn-images-1.medium.com/max/1024/1*UvZ5J6Lbny3ewF3nR9eWzA.jpeg)

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) …

![](https://cdn-images-1.medium.com/max/1024/1*FsqfL223XGHYQRvN8VMuqQ.jpeg)

A suivre !

![](https://cdn-images-1.medium.com/max/730/0*of3IR8S29mngq7Vd.jpg)