Edge Computing : Aperçu de la fonction clustering dans MicroStack et MicroK8s …
Tags: openstack, azure, docker, edgecomputing
Published: 2019-11-17 17:26:53

---
title: Edge Computing : Aperçu de la fonction clustering dans MicroStack et MicroK8s …
published: true
date: 2019-11-17 16:31:49 UTC
tags: openstack,azure,docker,edge-computing
canonical_url: https://medium.com/@abenahmed1/edge-computing-aper%C3%A7u-de-la-fonction-clustering-dans-microstack-et-microk8s-fd89fd28204c
---

### Edge Computing : Aperçu de la fonction clustering dans MicroStack et MicroK8s …

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

Canonical a annoncé très récemment avoir amélioré la fiabilité de ses distributions Kubernetes pour les environnements Edge, IoT et multi-cloud :

- [Canonical enhances Kubernetes reliability for edge, IoT and multi-cloud | Ubuntu](https://ubuntu.com/blog/canonical-enhances-kubernetes-reliability-for-edge-iot-and-multi-cloud)
- [Canonical introduces high-availability clustering for MicroK8s - ITOps Times](https://www.itopstimes.com/contain/canonical-introduces-high-availability-clustering-for-microk8s/)

Cela concerne donc la possibilité de créer un cluster haute disponibilité avec MicroK8s :

[Multi-node MicroK8s](https://microk8s.io/docs/clustering)

et l’intégration de base de données SQL pour sa distribution Charmed Kubernetes :

[Canonical Enhances Kubernetes Reliability At The Edge | StorageReview.com - Storage Reviews](https://www.storagereview.com/canonical_enhances_kubernetes_reliability_at_the_edge)

![](https://cdn-images-1.medium.com/max/850/0*sQbz8LHX-1rkZSoC.jpg)

De même Canonical offre en Tech Preview la possibilité de créer un cluster multi-noeuds OpenStack à l’aide de MicroStack (principalement dans un contexte d’Edge Computing):

[Clustering | MicroStack](https://microstack.run/docs/clustering)

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

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

Illustration à l’aide d’un Scale Set dans Azure avec des instances de type Ev3 qui offrent la possibilité de profiter de la virtualisation imbriquée :

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

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

J’initie la création d’un cluster à l’aide de MicroStack dans la première instance qui servira de noeud Controller :

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

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

et dans la deuxième instance, je lance la fonction Compute qui permettra à ce noeud de rejoindre ce cluster :

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

Je réalise la même chose pour la dernière instance :

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

Le mini cluster OpenStack est opérationnel avec les briques de base (Nova, Horizon, Keystone, Glance, Neutron etc …):

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

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

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

Les clients en ligne de commande pour OpenStack sont présents :

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

Je peux charger une image Ubuntu 19.10 dans Glance qui va me servir à la constitution d’un cluster avec MicroK8s :

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

Création de trois instances Ubuntu 19.10 dans MicroStack :

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

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

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

Les trois instances sont actives :

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

et réparties sur chacun des noeuds du cluster MicroStack :

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

Avec Cloud-init j’ai chargé un client ZeroTier pour relier ces trois instances Ubuntu 19.10 :

![](https://miro.medium.com/max/768/1*mJNfoiCZoY5eUpGkEwK4kA.png)

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

Je vais charger MicroK8s via Snap dans la première instance qui fera office de noeud maître :

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

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

Snap étant préinstallé dans l’instance :

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

J’ai généré deux tokens pour raccorder les deux autres instances dans ce nouveau cluster …

Je peux donc raccorder ma deuxième instance via le premier token :

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

Idem pour la dernière instance :

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

Je peux alors vérifier que mon cluster est actif avec les add-ons disponibles :

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

[MicroK8s Addons](https://microk8s.io/docs/addons)

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

Comme indiqué dans cet article, je peux installer MetalLB pour la partie Load Balancing au sein de ce cluster :

[Onboarding edge applications on the dev environment | Ubuntu](https://ubuntu.com/blog/onboarding-edge-applications-on-the-dev-environment)

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

avec ce segment L2 par le biais de ZeroTier :

![](https://cdn-images-1.medium.com/max/924/1*p0iOFx4cAXUnIrgcKReW-A.png)

Je lance le sempiternel démonstrateur FC en illustration :

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

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

![](https://cdn-images-1.medium.com/max/1024/1*69OatSZxWq8fbohDmwdq4w.png)<figcaption>deployment.yml</figcaption>

Test de l’exposition en Node Port :

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

avec le port ouvert TCP 30092 assigné à chacun des noeuds :

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

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

Je peux également exposer mon déploiement en utilisant MetalLB :

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

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

J’utilise Cloudflare Argo pour exposer publiquement le démonstrateur (puisque je me trouvais dans un réseau privé ZeroTier) :

[Argo Tunnel | Cloudflare](https://www.cloudflare.com/fr-fr/products/argo-tunnel/)

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

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

Je lance mon tunnel depuis le noeud maître avec Argo :

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

Le démonstrateur est alors disponible publiquement :

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

Il est également possible de charger des add-ons supplémentaires dans ce cluster MicroK8s multi-noeuds :

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

ou d’utiliser Fluxctl pour initer du GitOps :

[fluxctl - Flux documentation](https://docs.fluxcd.io/en/stable/references/fluxctl.html)

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

Pour finir test rapide avec ces trois instances (et après suppression de MicroK8s avec Snap), de cette version expérimental de MicroK8s qui utilise Dqlite :

- [Dqlite - High-Availability SQLite](https://dqlite.io/)
- [canonical/dqlite](https://github.com/canonical/dqlite)

Dqlite (“distributed SQLite”) étend SQLite à un cluster de machines, avec basculement automatique et haute disponibilité pour maintenir une application en fonctionnement. Il utilise C-Raft, une implémentation optimisée de Raft en C, pour obtenir un consensus transactionnel de haute performance et une tolérance aux pannes tout en préservant l’efficacité exceptionnelle de SQlite et son encombrement réduit. Canonical a annoncé que la prochaine étape consisterait à assurer la haute disponibilité des clusters K8S en utilisant le moteur SQL distribué Dqlite. Dqlite supprimerait en effet la surcharge des processus en intégrant la base de données à l’intérieur même de Kubernetes et réduirait l’empreinte mémoire du cluster (un argument important dans un contexte IoT).

Récupération via Snap de cette version de MicroK8s :

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

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

Je regénère deux nouveaux tokens pour former mon cluster :

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

et je forme ce cluster avec les deux autres instances :

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

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

qui devient disponbile :

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

Test rapide du démonstrateur FC :

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

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

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

et j’utilise le client Octant pour faire office de tableau de bord pour ce nouveau cluster :

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

- [Octant](https://octant.dev/)
- [vmware-tanzu/octant](https://github.com/vmware-tanzu/octant)

avec une interface web open source centrée développeur qui permet d’inspecter ce cluster Kubernetes avec ses applications :

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

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

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

Il ne restera plus qu’à tester via Dqlite, un cluster MicroK8s en mode HA avec plusieurs noeuds maîtres … L’utilisation de Dqlite avec RAFT comme datastore Kubernetes simplifiera le déploiement d’un cluster K8s résilient. Ceci afin d’atteindre une grande fiabilité à très faible coût sur les appareils de base x86 ou ARM tels que les clusters de cartes Intel NUC ou Raspberry Pi dans un contexte d’Edge Computing.

[Deploying Kubernetes at the edge - Part I: building blocks | Ubuntu](https://ubuntu.com/blog/deploying-kubernetes-at-the-edge-part-i-building-blocks)

De même Canonical a indiqué que l‘on sera en mesure d’utiliser des bases de données SQL familières pour les données du cluster Kubernetes en lieu et place d’Etcd notamment au niveau de sa distribution Charmed Kubernetes …

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

A suivre !