Cluster K3s v1.0.0 en mode HA simplifié avec Dqlite (distributed SQLite) …
Tags: iot, rancher, kubernetes, docker
Published: 2019-11-24 14:58:25

---
title: Cluster K3s v1.0.0 en mode HA simplifié avec Dqlite (distributed SQLite) …
published: true
date: 2019-11-24 14:41:09 UTC
tags: iot,rancher,kubernetes,docker
canonical_url: https://medium.com/@abenahmed1/cluster-k3s-v1-0-0-en-mode-ha-simplifi%C3%A9-avec-dqlite-distributed-sqlite-1d3cd480d2e1
---

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

Finalement, après plus d’un an depuis sa conception initiale, la version 1.0.0 de Rancher K3s est arrivée cette semaine =\>

[rancher/k3s](https://github.com/rancher/k3s/releases/tag/v1.0.0)

K3s propose notamment la nouvelle interface KINE pour les datastores qui permet de choisir le datastore le mieux adapté à son cas d’utilisation, notamment: SQLite, DQLite, MySQL, Postgres, etc.

[rancher/kine](https://github.com/rancher/kine)

Et une mise en réseau cryptée soutenue par IPSec ou Wireguard …

En version 1.0.0 on a également la possibilité d’initier officiellement un cluster K3s en mode Haute-disponibilité (HA) avec deux modes :

[High Availability with an External DB](https://rancher.com/docs/k3s/latest/en/installation/ha/)

Un mode utilisant un datastore (magasin de données) externe pour le cluster : il nécessite donc

- Deux ou plusieurs nœuds de serveur qui serviront l’API Kubernetes et exécuteront d’autres services du plan de contrôle.
- Un datastore externe (par opposition au magasin de données SQLite intégré utilisé dans les configurations à serveur unique).
- Une adresse d’enregistrement fixe placée devant les nœuds “serveur” pour permettre aux nœuds “workers” de s’enregistrer auprès du cluster.

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

Mais également un autre mode (expérimental pour le moment) utilisant Dqlite de Canonical (à savoir du SQlite en mode distribué) comme on a pu le voir dans l’article précédent à propos de MicroStack et MicroK8s :

[Edge Computing : Aperçu de la fonction clustering dans MicroStack et MicroK8s …](https://dev.to/deep75/edge-computing-apercu-de-la-fonction-clustering-dans-microstack-et-microk8s-3l67)

> Dqlite (SQLite distribué) a été créé par l’équipe LXD de Canonical, la société derrière Ubuntu. Il s’agit d’une bibliothèque écrite en C qui implémente un moteur de «base de données SQL persistante, rapide, intégrée et persistante», qui offre un basculement automatique à haute disponibilité. L’équipe a publié la version Dqlite 1.0. Il est à code source ouvert sous Apache 2.0 et fonctionne sur les architectures ARM, X86, POWER et IBM Z. Dqlite est écrit en C pour offrir une portabilité maximale entre plates-formes. Son premier prototype a été implémenté dans Go, mais a ensuite été réécrit en C en raison de problèmes de performances dus à la manière dont Go interagit avec C.

Dqlite utilise C-Raft, une implémentation optimisée de Raft en C, pour obtenir un consensus transactionnel et une tolérance aux pannes hautes performances tout en préservant l’efficacité et la faible empreinte de SQLite :

- [Dqlite - High-Availability SQLite](https://dqlite.io)
- [canonical/dqlite](https://github.com/canonical/dqlite)
- [LXD releases Dqlite 1.0, a C library to implement an embeddable, persistent SQL database engine with Raft consensus | Packt Hub](https://hub.packtpub.com/lxd-releases-dqlite-1-0-a-c-library-to-implement-an-embeddable-persistent-sql-database-engine-with-raft-consensus/)
- [A Distributed SQLite - What Are the Possibilities?](https://hackernoon.com/dqlite-a-distributed-sqlite-es9y3wha)

Je pars donc du schéma suivant pour tester ce mode HA avec Dqlite :

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

Je provisonne mon serveur Rancher dans Hetzner Cloud :

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

et je continue avec trois autres instances Ubuntu 18.04 LTS qui me serviront de noeuds maîtres. Dans la première, je lance l’initialisation du cluster. Pour commencer, Il faut lancer cette première instance avec l’indicateur cluster-init pour activer le clustering et un jeton qui sera utilisé comme secret partagé pour joindre d'autres noeuds au cluster :

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

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

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

> Pour exécuter K3s dans ce mode avec Dqlite, on doit donc disposer d’un nombre impair de nœuds maître. Rancher nous recommande de commencer avec trois nœuds.

Le premier noeud maître initialisé, je peux joindre les deux autres noeuds maîtres à ce cluster très simplement avec cette commande :

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

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

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

Les trois noeuds maîtres sont alors actifs :

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

Lancement de trois nouvelles instances Ubuntu 18.04 LTS qui feront office de noeuds Worker dans le cluster K3s avec ce petit script :

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

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

Le cluster est complet et opérationnel :

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

Installation de ZeroTier sur les noeuds avec Bolt pour l’installation de MetalLB :

[Bolt - open source, agentless IT automation](https://puppet.com/open-source/bolt/)

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

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

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

J’importe mon nouveau cluster dans Rancher :

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

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

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

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

On distingue bien les rôles de chaque noeuds dans le cluster :

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

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

Installation de MetalLB et de la configuration sur une segment L2 :

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

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

Traefik prend une des adresses du segment configuré avec MetalLB :

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

Test rapide avec le sempiternel démonstrateur FC via ce manifest en YAML :

![](https://cdn-images-1.medium.com/max/1024/1*3jOuwTHmFlEb6wxCb8dp8w.png)<figcaption>fcdemo.yaml</figcaption>

Le démonstrateur est accessible via une adresse IP fournie par MetalLB et ZeroTier :

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

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

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

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

À partir de cette version 1.0.0, K3s envisage de prendre en charge l’exécution d’un plan de contrôle hautement disponible sans recourir à un magasin de données externe. Cela signifie qu’il n’est pas nécessaire de gérer un magasin de données externe etcd ou SQL en production. Bien que cette fonctionnalité soit actuellement expérimentale, elle préfigure l’architecture principale pour l’exécution future de clusters K3s en mode HA.

A suivre !

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