Déploiement d’un cluster Kubernetes sur du BareMetal dans Scaleway avec Kontena Pharos, MetalLB et ZeroTier …

Image for post
Image for post

Scaleway a renouvelé l’ensemble de ses gammes d’instances Public Cloud et propose notamment des serveurs BareMetal 64 Bits :

Image for post
Image for post

Physiquement, là où Dell met 4 serveurs bi-cpu dans un chassis 2U, Scaleway peut placer 14 serveurs (appelés node) mono cpu dans un châssis 3U : 3 cartes de 2 serveurs à gauche et 4 cartes de 2 serveurs à droite. Par défaut, ces serveurs n’ont pas de disques en local et démarrent sur un disque réseau comme l’explique cet article :

Image for post
Image for post

Des instances que lon retrouve également sur ce type de chassis dôté par exemple de 27 noeuds physiques :

Image for post
Image for post

Je pars de trois instances physiques (de type C2S et C2M) avec Ubuntu 18.04 LTS 64 Bits qui vont me servir à l’installation de mon cluster Kubernetes :

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

Ces trois instances sont en possession d’un adresse IP publique ainsi que deux adresses IP internes. Je commence par y installer le client ZeroTier. Pour rappel, ZeroTier offre des capacités des VPN (en Peer to Peer), SDN et SD-WAN avec un seul système. Toutes les ressources sont alors connectées sur des réseaux locaux et étendus comme l’ensemble était rassemblé dans un seul datacenter unique :

Au préalable, il faut installer sudo et python dans ces instances :

$ apt install python -y
$ apt install sudo iputils-ping -y
$ curl -s https://install.zerotier.com/ | bash$ zerotier-cli join <network ID>$ zerotier-cli status$ zerotier-cli listnetworks

Ce qui me permet de voir les adresses attribuées par ZeroTier à ces instances dans cette plage en 192.168.196.0/24 :

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

et de son binaire à récupérer sur Github :

Image for post
Image for post

Ceci passe par la création d’un fichier de configuration en YAML :

Image for post
Image for post
cluster.yml

et je lance l’installation du cluster sur la base des adresses IP fournies par ZeroTier :

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

Depuis ma station connectée elle aussi à ZeroTier je peux utiliser le client Kubectl pour me connecter au cluster :

Image for post
Image for post

Pour bénéficier d’un service de LoadBalancing et de l’attribution automatique d’adresses IP pour les services déployés dans ce cluster Kubernetes, je procède à l’installation de MetalLB. Metallb est un projet « open sourcé » initié par Google fin 2017. Son but est de gérer des IPs externes sur des déploiements bare-metal de kubernetes :

MetalLB se branche dans le cluster Kubernetes et fournit une implémentation d’équilibreur de charge réseau. En bref, il permet de créer des services Kubernetes de type “LoadBalancer” dans des clusters qui ne fonctionnent pas sur un fournisseur de cloud computing, et ne peuvent donc pas simplement se connecter à des produits payants pour fournir des LoadBalancers. Il a deux caractéristiques qui fonctionnent ensemble pour fournir ce service : l’attribution d’adresses IP et l’annonce externe. Installation via un manifest YAML :

Image for post
Image for post

J’utilise cette configuration pour utiliser le mode Couche 2 (L2) dont l’avantage est qu’il n’a besoin d’aucun matériel réseau sophistiqué, il devrait donc fonctionner sur n’importe quel réseau ethernet. Ici avec ce segment d’adresses IP :

Image for post
Image for post

dans la plage d’adresses “192.168.196.200–192.168.196.240” que j’ai configurées dans le tableau de bord de ZeroTier :

Image for post
Image for post

Déploiement de la configuration réussie et active dans MetalLB :

Image for post
Image for post

J’autorise également la fonction Ethernet Bridging pour les noeuds connectés à ZeroTier :

Image for post
Image for post

J’obtiens ici ce type de liaison entre le cluster, MetalLB et ZeroTier :

Image for post
Image for post

Je réalise ce petit test avec Nginx pour vérifier le bon fonctionnement de MetalLB :

Image for post
Image for post

avec cette configuration :

Image for post
Image for post

Une adresse IP du pool configuré dans ZeroTier m’est retournée pour visualiser la page par défaut du serveur Web Nginx :

Image for post
Image for post

Je réalise un autre test avec le traditionnel démonstrateur FC Particulier :

Image for post
Image for post

Avec encore une fois une nouvelle adresse IP retournée pour accéder à mon service :

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

Si je ne souhaite pas utiliser ce service de LoadBalancing, je peux utiliser celui fourni en beta dans Scaleway :

Image for post
Image for post

Lors de l’installation du demonstrateur FC, je peux utiliser un service en NodePort :

Image for post
Image for post

avec le port TCP 30469 (ouvert sur chacun des noeuds physiques) que je vais utiliser dans le LoadBalancer:

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

Configuration du LoadBalancer externe fourni par Scaleway :

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

Pour la partie configuration des backends pour ce LoadBalancer, je reprends les adresses IP de ces instances physiques :

Image for post
Image for post

Et le LoadBalancer se voit attribuer une adresse IP publique pour exposer le démonstrateur en exécution dans le cluster Kubernetes :

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

WeaveCloud permet de visualiser comme d’habitude les éléments déployés dans le cluster :

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

Là encore, une adresse IP a été fournie par MetalLB via le pool d’IP configuré dans ZeroTier.

Pour terminer, si je ne veux pas utiliser le traditionnel dashboard de Kubernetes, il est possible d’utiliser une solution alternative avec k8dash :

Image for post
Image for post

L’adresse fournie par MetalLB me permet d’accéder sur ce dashboard alternatif avec le port TCP 80 :

Image for post
Image for post

et la génération d’un token d’accès :

Image for post
Image for post

Je retrouve les éléments précedemment installés dans le cluster depuis le début :

Image for post
Image for post
Image for post
Image for post
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