Déploiement d’un cluster Mirantis k0s dans des MicroVMs au sein d’une carte Raspberry Pi 4 avec Ignite et Firecracker …
Tags: ubuntu, docker, serverless, kubernetes
Published: 2020-12-30 00:55:32

---
title: Déploiement d’un cluster Mirantis k0s dans des MicroVMs au sein d’une carte Raspberry Pi 4 avec Ignite et Firecracker …
published: true
date: 2020-12-29 21:42:41 UTC
tags: ubuntu,docker,serverless,kubernetes
canonical_url: https://medium.com/@deep75/d%C3%A9ploiement-dun-cluster-mirantis-k0s-avec-traefik-dans-des-microvms-au-sein-d-une-carte-raspberry-4d8d0ec6382b
---

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

Dans des articles précédents, j’avais pu illustrer dans des articles précédents Weave Ignite dans différentes configurations :

- [Weave Ignite et Weave Footloose dans Scaleway : quand les machines virtuelles se prennent pour des…](https://deep75.medium.com/weave-ignite-et-weave-footloose-dans-scaleway-quand-les-machines-virtuelles-se-prennent-pour-des-e28f5312a59f)
- [Des clusters Kubernetes imbriqués avec Ignite, Firecracker, Containerd, Kind et Rancher …](https://deep75.medium.com/des-clusters-kubernetes-imbriqu%C3%A9s-avec-ignite-firecracker-containerd-kind-et-rancher-34e5e92c257b)

> Pour rappel, Weave Ignite est un gestionnaire de machine virtuelle (VM) open source (basé sur le projet open source Firecracker d’AWS) avec un “User Experience” de conteneurs et une gestion GitOps intégrée …

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

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

Weave Ignite est transposable sur les architectures de type ARM 64 Bits et j’en profite donc pour tester son installation sur une carte Raspberry Pi 4 avec 8 Gb de RAM :

![](https://cdn-images-1.medium.com/max/458/0*jqb-PaBh0FOkOPWH.jpg)

Via Raspberry Pi Imager, je récupère une image Ubuntu 20.10 pour cette dernière …

[Introducing Raspberry Pi Imager, our new imaging utility - Raspberry Pi](https://www.raspberrypi.org/blog/raspberry-pi-imager-imaging-utility/)

![](https://cdn-images-1.medium.com/max/668/1*nA9sHofNDYsy6tglmRM-2w.jpeg)

![](https://cdn-images-1.medium.com/max/674/1*3b0d0h-7MCWF7JKWHoWi9Q.jpeg)

Je n’ai pu qu’à la charger dans la carte :

![](https://cdn-images-1.medium.com/max/500/1*pfNArdM7ikgConX584UKcA.gif)

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

Suivant le modus operandi proposé par Weaveworks, je commence l’installation de CNI et Containerd …

[weaveworks/ignite](https://github.com/weaveworks/ignite/blob/master/docs/installation.md)

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

via ce fichier d’installation, j’installe Ignite et le moteur Ignited :

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

Ignite est alors opérationnel …

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

J’importe une image Ubuntu 20.04 LTS pour Ignite car c’est la seule à être multi-architecture :

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

J’initialise ma première MicroVM avec Ignite :

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

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

Je peux alors m’y connecter via SSH :

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

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

Il est possible de créer une autre MicroVM via un mode interactif …

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

J’en crée une dernière et le tout formera l’ossature d’un futur cluster Kubernetes …

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

Sur la première MicroVM, j’en profite pour installer le client Kubectl et Helm v3 :

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

Il est alors temps d’initialiser un cluster Kubernetes avec Mirantis k0s que l’on a vu précedemment … k0s est présenté sous la forme d’un binaire unique auto-extractible qui intègre les binaires de Kubernetes :

- [Aperçu de Rancher Harvester, une solution open source d’infrastructure hyperconvergente (HCI)…](https://deep75.medium.com/aper%C3%A7u-de-rancher-harvester-une-solution-open-source-dinfrastructure-hyperconvergente-hci-cdeb5dfccacd)
- [k0s | The Kubernetes Distribution](https://k0sproject.io/)

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

- [k0sproject/k0s](https://github.com/k0sproject/k0s/blob/main/docs/architecture.md)
- [How to set up k0s Kubernetes: A quick and dirty guide | Mirantis](https://www.mirantis.com/blog/how-to-set-up-k0s-kubernetes-a-quick-and-dirty-guide/)

Récupération du binaire k0s sur GitHub et initialisation du noeud maître du cluster sur la première MicroVM Ubuntu avec Ignite :

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

[Releases · k0sproject/k0s](https://github.com/k0sproject/k0s/releases)

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

Récupération du fichier _Kubeconfig_ et interaction avec ce cluster via le client _Kubectl_ :

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

Je crée un token avec k0s qui va me servir à raccorder un noeud Worker avec la seconde MicroVM Ubuntu :

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

Récupération encore une fois du binaire k0s et lancement du noeud Worker :

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

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

Le premier noeud Worker du cluster est actif …

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

Je fais exactement la même chose pour la dernière MicroVM Ubuntu en ayant préalablement récupérer un autre token à partir du noeud maître :

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

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

Le cluster Mirantis k0s est actif et opérationnel avec ces trois MicroVMs Ubuntu comme noeuds :

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

J’installe MetalLB afin de bénéficier d’un service de LoadBalancer dans le cluster Kubernetes …

[MetalLB, bare metal load-balancer for Kubernetes](https://metallb.universe.tf/installation/)

à partir des manifests YAML …

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

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

Sur la base du plan d’adressage IPv4 présent pour les MicroVMs Ubuntu, je crée ce fichier de configuration YAML pour MetalLB qui va se servir de ce segment d’adresses pour le service de LoadBalancer dans le cluster :

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

J’installe Traefik en tant qu’Ingress Controller pour ce cluster via Helm v3 et les Charts correspondants …

[From Zero to Hero: Getting Started with k0s and Traefik](https://traefik.io/blog/from-zero-to-hero-getting-started-with-k0s-and-traefik/)

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

L’ingress Controller utilise alors une adresse IPv4 fournie par MetalLB :

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

Le dashboard de Traefik peut être exposé via l’Ingress Controller :

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

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

Mais je l’expose directement via le client Kubectl :

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

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

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

Déploiement du demonstrateur FC dans sa version ARM 64 Bits :

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

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

Et exposition de ce dernier via Argo Tunnel de Cloudflare …

[Argo Tunnel | Logiciel de tunnellisation sécurisée | Cloudflare](https://www.cloudflare.com/fr-fr/products/argo-tunnel/)

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

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

Le démonstrateur FC est accessible publiquement …

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

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

On peut le visualiser dans le dashboard de Traefik :

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

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

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

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

Je peux explorer la structure du cluster via Mirantis Lens, une sorte d’IDE pour Kubernetes …

- [Lens | Mirantis](https://www.mirantis.com/software/lens/)
- [Getting started with Lens | Mirantis](https://www.mirantis.com/blog/getting-started-with-lens/)
- [Lens 4.0 Kubernetes IDE is here | Mirantis](https://www.mirantis.com/blog/lens-4-0-kubernetes-ide-is-here/)

Je récupère le fichier Kubeconfig correspondant à ce cluster et localement sur ma station, j’installe Mirantis Lens via un binaire de GitHub en prenant le soin de rediriger localement le port TCP 6443 via SSH :

[Releases · lensapp/lens](https://github.com/lensapp/lens/releases)

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

Lens se lance comme un outil graphique …

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

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

permettant d’explorer ce cluster …

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

avec un monitoring de base …

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

Le lancement de ces trois MicroVMs avec Weave Ignite et ce cluster k0s dans la carte Raspberry Pi 4 aura occupé une grande part de la mémoire vive …

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

A u travers de ces articles, on a vu différentes manières d’utiliser la virtualisation en mode open source dans une carte Raspberry Pi 4. Avec k0s, Mirantis offre un concurrent possible à Rancher k3s avec ce segment de l’Edge Computing en pleine expansion …

Même si Mirantis a annoncé récemment vouloir également transposer sa distribution OpenStack dans Kubernetes …

[Announcing Mirantis OpenStack for Kubernetes | Mirantis](https://www.mirantis.com/blog/announcing-mirantis-openstack-for-kubernetes/)

et y féderer ses différents outils …

![](https://cdn-images-1.medium.com/max/546/1*yDwx962CWkH-5jmGrzrKwA.jpeg)

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

À suivre !