Installation de K3S

Configuration système des Raspberry Pi et déploiement de k3s sur le control plane et les workers

Nœuds du cluster

Le cluster est composé de quatre Raspberry Pi 4 (8 Go RAM, carte SD 32 Go), chacun avec un rôle fixe :

NœudRôle
cube01Worker
cube02Worker
cube03Worker
cube04Control plane

Configuration réseau (optionnelle)

Par défaut, les nœuds sont identifiés via le DNS de la box. Si ce n’est pas le cas, on peut leur affecter une IP statique manuellement.

Sur chaque nœud, éditer /etc/network/interfaces :

auto eth0
iface eth0 inet static
    address <IP-du-nœud>
    netmask 255.255.255.0
    gateway <IP-passerelle>
    broadcast <IP-broadcast>
    hostname <nom-du-nœud>

Puis éditer /etc/hosts pour que chaque nœud connaisse les autres :

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.1.1       <nom-du-nœud>
<IP-cube01>     cube01 cube01.local
<IP-cube02>     cube02 cube02.local
<IP-cube03>     cube03 cube03.local
<IP-cube04>     cube04 cube04.local

Préparation système

Ces étapes sont à réaliser sur chaque nœud.

Activation des cgroups

Ajouter à la fin de /boot/firmware/cmdline.txt (sur une seule ligne), puis redémarrer :

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Hostname

sudo nano /etc/hostname
# Renseigner le nom du nœud : cube01, cube02, etc.

Accès SSH sans mot de passe

Copier la clé publique SSH du control plane (cube04) dans le fichier ~/.ssh/authorized_keys de chaque worker pour permettre les connexions sans mot de passe.

Installation d’iptables

sudo apt -y install iptables

Désactivation du swap (control plane uniquement)

Kubernetes exige que le swap soit désactivé :

sudo swapoff -a
sudo nano /etc/dphys-swapfile
# Mettre CONF_SWAPSIZE=0

Installation de K3S

Control plane (cube04)

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server" sh -s - \
  --write-kubeconfig-mode 644 \
  --node-taint CriticalAddonsOnly=true:NoExecute \
  --bind-address <IP-cube04>

L’option --node-taint CriticalAddonsOnly=true:NoExecute empêche les pods applicatifs d’être schedulés sur le control plane.

Récupérer ensuite le token d’enregistrement des workers :

sudo cat /var/lib/rancher/k3s/server/node-token

Workers (cube01, cube02, cube03)

Sur chaque worker, installer l’agent k3s en pointant vers le control plane :

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="agent" \
  K3S_URL=https://<IP-cube04>:6443 \
  K3S_TOKEN="<K3S_TOKEN>" sh -

Post-installation

Labels des nœuds

Depuis le control plane, labelliser chaque worker pour que les workloads soient correctement ciblés :

kubectl label nodes cube01 kubernetes.io/role=worker node-type=worker
kubectl label nodes cube02 kubernetes.io/role=worker node-type=worker
kubectl label nodes cube03 kubernetes.io/role=worker node-type=worker

Variable KUBECONFIG

Ajouter dans /etc/environment sur le control plane pour que Helm et les autres outils trouvent la configuration :

KUBECONFIG=/etc/rancher/k3s/k3s.yaml

Installation de Helm

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

État initial du cluster

À ce stade, les quatre nœuds sont enregistrés et les pods système sont en cours d’exécution. La commande kubectl get nodes doit afficher les quatre nœuds avec le statut Ready.

Initial pods state

Initial deployment state

Initial daemon sets state