K8s : Comment déployer un cluster kubernetes bare-metal

 

Dans ce tutoriel, nous allons voir comment déployer un cluster kubernetes bare metal, c’est-à-dire sans cloud provider.

Introduction

Pour ce tutoriel, vous aurez besoin d’un PC, et de plusieurs serveurs que vous voulez mettre en cluster. (Ce tutoriel peut fonctionner sur un seul serveur)

Pour déployer notre cluster, nous allons utiliser une version allégée de kubernetes nommée K3s, qui est fait pour les appareils ARM comme un Raspberry PI ou des serveurs peu puissants. C’est une version simplifiée de k8s avec seulement l’essentiel qui est plus simple à installer et maintenir.

Préparation des nodes

Sur chacun de vos serveurs, vous allez avoir besoin d’un user avec les droits root, et de votre clé SSH sur chacun d’entre eux. Il vous faudra sur votre ordinateur le paquet suivant : openssh-client, il est par défaut installé sur Ubuntu, mais dans le doute :

sudo apt install openssh-client

Maintenant que vous avez les outils SSH installés sur votre PC, créez une clé SSH avec la commande :

ssh-keygen -b 4096

Laissez l’emplacement du fichier par défaut et ne mettez pas de passphrase. Vous devriez avoir quelque chose dans ce genre :

Generating public/private rsa key pair.
Enter file in which to save the key (/home/pierre/.ssh/id_rsa):
Created directory '/home/pierre/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/pierre/.ssh/id_rsa
Your public key has been saved in /home/pierre/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:JJKJFEFEG/EfzLJZGREZE fuuf@fuuf-jaaj
The key's randomart image is:
+---[RSA 4096]----+
|  E  .==O .      |
|X +.x.@ o        |
|oB +.= O         |
|=oO +.* o        |
|xx.o +oS      g  |
|:.+ o ac.        |
|   + *.o         |
|  i +      x     |
|                 |
+----[SHA256]-----+

Enfin, vous devez copier cette clé SSH sur chacun de vos serveurs avec lesquels vous voulez faire un cluster. Pour cela, nous allons utiliser ssh-copy-id pour chaque serveur :

ssh-copy-id user@host

Pour tester si la clé SSH a été bien copiée, essayez de vous connecter à ce serveur :

ssh user@host

Installation de K3sup

Nous allons utiliser K3sup pour installer notre cluster, c’est un utilitaire simple et rapide pour installer et mettre à jour K3s. Pour l’installer K3sup sur son PC :

curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/

Création du master

Maintenant que K3sup est installé, nous allons créer notre master. Choisissez un de vos serveurs qui deviendra le master de votre cluster et lancez depuis votre PC la commande suivante, avec l’adresse ip du serveur choisi et l’user choisi. Cet user doit avoir les droits root.

SERVER_IP=          # IP du master
SERVER_USER=root    # USER pour se connecter sur le master

k3sup install --no-extras --ip $SERVER_IP --user $SERVER_USER

Vous devez avoir maintenant un fichier kubeconfig à l’endroit où vous avez exécuté ces commandes. Gardez-le précieusement, il vous permettra d’interagir avec votre cluster.

Ajout des nodes

Maintenant, il faut ajouter vos autres serveurs en tant que nodes du cluster. Pour cela, on utilise toujours k3sup depuis son ordinateur, avec la commande suivante :

SERVER_IP=          # IP du master
SERVER_USER=root    # USER pour se connecter sur le master
NODE1_IP=           # IP de la 1ère node
NODE1_user=root     # USER pour se connecter sur la 1ère node

k3sup join --ip $NODE1_IP --user $NODE1_user --server-ip $SERVER_IP --server-user $SERVER_USER

Effectuez cette étape pour chacune des nodes voulues.

Script final

Voici le script complet pour réinstaller rapidement K3s, ou mettre à jour la version de kubernetes de votre cluster.

#!/bin/bash

SERVER_IP=
SERVER_USER=root
NODE1_IP=
NODE1_user=root
NODE2_IP=
NODE2_user=root

curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/

rm k3sup # fichier temporaire

k3sup install --no-extras --ip $SERVER_IP --user $SERVER_USER

k3sup join --ip $NODE1_IP --user $NODE1_user --server-ip $SERVER_IP --server-user $SERVER_USER

k3sup join --ip $NODE2_IP --user $NODE2_user --server-ip $SERVER_IP --server-user $SERVER_USER

Installation de kubectl et test du cluster

Pour tester si le cluster k8s est bien installé et interagir avec celui-ci, nous allons avoir besoin de kubectl.

Pour Debian/Ubuntu

sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Code repris depuis la documentation officielle.

Pour d’autres OS

Suivez le guide ici : https://kubernetes.io/fr/docs/tasks/tools/install-kubectl

Test du cluster

Maintenant que kubectl est installé, nous allons pouvons tester notre cluster. Pour cela, il faut définir une variable d’environnement KUBECONFIG correspondant à l’emplacement de notre fichier de config kubernetes généré par K3sup.

export KUBECONFIG=/chemin/vers/votre/kubeconfig

Vous pouvez mettre cette commande dans votre fichier ~/.bashrc pour que la variable soit toujours définie.

Maintenant, si tout s’est bien passé, en exécutant la commande suivante, vous devriez pouvoir accéder à votre cluster.

kubectl get nodes

Vous devriez voir quelque chose dans ce genre :

NAME        STATUS   ROLES    AGE    VERSION
xxxxxxxx1   Ready    <none>     1d   v1.19.7+k3s1
xxxxxxxx2   Ready    master     1d   v1.19.7+k3s1
xxxxxxxx3   Ready    <none>     1d   v1.19.7+k3s1

La suite

Maintenant que votre cluster est installé, vous pouvez commencer à déployer des services. Attention cependant, K3s ne propose pas de loadbalancer et de storageclass évolués par défaut, il faudra les installer vous-même. Un article expliquant comment faire devrait sortir prochainement.

Sources