By Walid ETTAYEB

Kubernetes offre de nombreuses fonctionnalités, de l'orchestration de vos nœuds à la gestion des conteneurs, en passant par la mise à l'échelle des applications, l'équilibrage des charges et la surveillance de leur état de santé. Lorsqu'il s'agit de mettre en place un cluster Kubernetes et de publier vos conteneurs sur le cluster, vous disposez d'un certain nombre de méthodes différentes pour chacune. Rancher est l'une de ces méthodes qui permet de configurer un cluster à l'aide de RKE (Rancher Kubernetes Engine) et de gérer les clusters (même ceux existants créés avec d'autres méthodes d'installation) ainsi que vos applications. Dans cet article, nous verrons comment mettre en place un environnement de lab Rancher, le rendre accessible en dehors de la VM, créer et gérer des clusters avec Rancher, k3s et lxd.

Configuration de la VM

Nous allons installer Rancher dans un conteneur Docker, qui est l'une des nombreuses méthodes d'installation. Afin de suivre cette méthode, nous avons besoin d'une VM Linux et dans cet article, je vais utiliser Ubuntu 20.04. Si vous avez une VM avec une IP publique, vous pouvez rendre Rancher public et obtenir automatiquement un certificat de Let's Encrypt. Sinon, il est possible d'utiliser des certificats auto-signés qui sont également créés automatiquement. Nous allons voir les deux méthodes dans cet article.

Install Docker

Après avoir créé une VM Ubuntu sur votre ordinateur ou sur le cloud et vous y être connecté via SSH (ou toute autre méthode que vous préférez), commencez par installer Docker :

curl -sSL https://get.docker.com | bash

Si vous ne travaillez pas en tant qu'utilisateur root, donnez à votre utilisateur l'accès la socket Docker :

sudo usermod -aG docker $USERNAME

Ensuite, vous devez vous déconnecter et vous reconnecter.

Installation de lxd

Installer lxd pour faire fonctionner les conteneurs avec le système init et nous pourrons utiliser Rancher pour créer un cluster pour nous sur ces derniers.

sudo snap install lxd

Configurer Rancher sur un conteneur Docker

Il y a deux possibilités d'installation différentes et celle qui doit être utilisée dépend du positionnement de votre VM. Avant de les aborder, découvrons "nip.io", ce qu'il fournit, et pourquoi/quand l'utiliser.

Adresses DNS de nip.io

Afin de rendre notre installation Rancher facilement accessible depuis différents endroits et de générer des certificats concernant son domaine, nous allons utiliser des enregistrements DNS pour un domaine. Si vous n'avez pas de domaine, nip.io est un logiciel open source et également utilisable comme service gratuit pour utiliser des enregistrements DNS pour nos projets. Il suffit d'utiliser votre adresse IP (par exemple 10.20.30.40 dans votre LAN) et toutes les requêtes DNS vers ces adresses seront résolues vers 10.20.30.40 :

10.20.30.40.nip.io
10-20-30-40.nip.io
demo.10.20.30.40.nip.io
demo.10-20-30-40.nip.io
demo-10-20-30-40.nip.io
...
*.10-20-30-40.nip.io
*.10.20.30.40.nip.io

Ainsi, même s'il s'agit d'une adresse IP privée, nous pouvons utiliser les enregistrements DNS comme FQDN dans nos fichiers de configuration. Lorsque nous avons une adresse IP publique, nous pouvons utiliser cette adresse dans le format ci-dessus pour obtenir des certificats et atteindre notre installation.

VM sans IP publique et accès public (par exemple sur votre ordinateur)

Si vous travaillez sur une VM située sur votre ordinateur, il se peut qu'il n'y ait pas d'accès public et dans ce cas, nous utiliserons des certificats TLS auto-signés qui sont automatiquement créés par Rancher.

docker run -d \
--restart unless-stopped \
-p 80:80 \
-p 443:443 \
--privileged \
--name rancher \
rancher/rancher

Il va installer Rancher dans un conteneur Docker et le rendre joignable sur les ports 80 et 443. Puisque le certificat est auto-signé. Vous pouvez utiliser votre URL avec nip.io ou votre adresse IP pour atteindre Rancher.

VM avec IP publique (par exemple sur AWS/GCP/Azure/DigitalOcean/...)

Lorsque vous déployez votre VM sur un fournisseur de cloud, ou en donnant une adresse IP publique existante dans votre environnement sur site, il suffit d'ajouter un enregistrement A à votre serveur DNS ou d'utiliser l'adresse nip.io comme expliqué ci-dessus. Cela créera des certificats et les fera signer par Let's Encrypt. Ensuite, déployez Rancher :

docker run -d \
--restart unless-stopped \
-p 80:80 \
-p 443:443 \
--privileged \
--name rancher \
rancher/rancher:2.6.0 \
--acme-domain your-ip-addr-ess.nip.io

Rancher sera opérationnel en quelques minutes. Vous pourrez alors vous connecter à votre domaine et accéder à son interface Web.

Connexion à Rancher

La première fois que Rancher est installé, il demande de saisir un mot de passe. Avant de continuer, nous devrions récupérer le mot de passe de notre installation. De cette façon, les personnes qui pourraient se connecter à l'interface Web de Rancher avant nous ne pourront pas accéder à Rancher sans ce mot de passe. Nous pouvons l'obtenir via :

docker logs rancher 2>&1 | grep "Bootstrap Password:"

Connectez-vous à l'interface Web de Rancher avec ce mot de passe. Une interface comme celle-ci devrait apparaître à l'écran :

Configuration du cluster avec Rancher

Nous avons besoin de quelques nœuds dans notre VM pour créer un cluster Kubernetes avec Rancher. Rancher prend en charge les méthodes d'installation RKE et K3s.

Création de nœuds avec LXD

Nous utiliserons LXD pour créer des nœuds sous forme de conteneurs Linux. Ces conteneurs incluront un système init par défaut afin que l'agent Rancher qui le requiert puisse l'utiliser pour configurer les composants de notre cluster.

Tout d'abord, lancez LXD en mode automatique :

sudo lxd init --auto

Dans ce guide, je vais créer 6 noeuds. 3 d'entre eux seront utilisés pour le control plane tandis que les 3 autres seront des workers nodes.

Création de nœuds avec lxd :

for server in {1..6}; do lxc launch ubuntu:20.04 demo${server}; done

Dans la configuration par défaut, il n'est pas possible de créer des conteneurs dans ces conteneurs. Nous devons donc activer les conteneurs imbriqués :

for server in {1..6}
do  lxc stop demo${server}  
lxc config set demo${server} security.nesting true  
lxc start demo${server}
done

La dernière chose à faire est de créer un fichier /dev/kmsg vide dans chaque machine comme solution de contournement, car K3s ne pourra pas démarrer s'il ne trouve pas ce fichier :

for server in {1..6}
do  
  lxc exec demo${server} touch /dev/kmsgdone
done

Création d'un cluster sur Rancher

Maintenant, nous allons utiliser notre installation Rancher pour mettre en place un nouveau cluster sur nos nœuds. Même s'ils se trouvent dans la même machine de lab, nous essayons de faire en sorte qu'ils se comportent comme s'ils travaillaient sur des sites différents afin que nous puissions simuler différents scénarios dans cet environnement.

Sur la page du tableau de bord de Rancher, cliquez sur le bouton Créer :

Nous sélectionnerons "Use existing nodes and create a cluster using RKE2/K3s " et ensuite cliquer sur Custom :

Nous allons donner un nom à notre cluster et sélectionner K3s dans la case Version Kubernetes :

Si vous souhaitez contrôler ou modifier les options de configuration à partir des menus, c'est le moment idéal pour le faire. Ensuite, cliquez sur Créer pour définir un nouveau cluster dans Rancher. Vous devriez être dans l'onglet Registration :

Il suffit de sélectionner etcd ET Control Plane et de désélectionner Worker à l'étape 1 et de copier la commande à l'étape 2. Nous allons entrer cette commande sur nos machines maîtres. Remplacez $COMMAND_FROM_RANCHER par la commande que vous avez copiée depuis Rancher :

for server in {1..3}
do  
  lxc exec demo${server}  -- /bin/bash -c "$COMMAND_FROM_RANCHER"
done

Par exemple :

for server in {1..3}
do
  lxc exec demo${server} -- /bin/bash -c "curl -fL https://rancher.our-ip.nip.io/system-agent-install.sh | sudo  sh -s - --server https://rancher.our-ip.nip.io --label 'cattle.io/os=linux' --token our-token --etcd --controlplane"
done

Allez dans l'onglet Machines dans Rancher et attendez que vos nœuds du Control Plan soient en état de fonctionnement :

Ensuite, revenez à l'onglet Registration. Ensuite, décochez etcd et Control Plane, et cochez Worker  :

Copiez la commande de l'étape 2 et maintenant, nous allons utiliser la commande sur les nœuds Worker pour les joindre à notre nouveau cluster :

for server in {4..6}
do
  lxc exec demo${server}  -- /bin/bash -c "$COMMAND_FROM_RANCHER"
done

Exemple:

for server in {4..6}
do  
  lxc exec demo${server}  -- /bin/bash -c "curl -fL https://rancher.our-ip.nip.io/system-agent-install.sh | sudo  sh -s - --server https://rancher.our-ip.nip.io --label 'cattle.io/os=linux' --token our-token --worker
done

Attendez que les Workers soient disponibles. Et votre cluster est prêt !

Walid ETTAYEB • 36 Articles

Passionné par l'informatique depuis mon plus jeune âge, je transforme ma passion en expertise.

View Articles