Installer K3s
Découvrons ensemble K3s, la version allégée et optimisée pour l'IOT par Rancher Labs
Au sommaire :
- 1-Qu'est-ce que K3s ?
- 2-Prérequis
- 3-Installation
- 4-Désinstallation
- 5-Mise à jour
1-Qu'est-ce que K3s ?
K3s est une distribution Kubernetes conçue par Rancher Lab.
Contrairement à un K8s "from scratch", K3s est extrêmement léger. Le binaire pèse environs 50 Mo et une fois installé, il nécessite un minimum de 512 Mo de mémoire vive.
K3s embarque avec lui les éléments suivants :
- Runtime : Containerd.
- DNS : CoreDNS.
- CNI (Container Network Interface) : Flannel.
- Base de données : SQLite.
- Load Balancer : KlipperLB.
- Ingress Controller : Traefik.
- Outil en ligne de commande : kubectl.
- Gestionnaire de charts : Helm.
2-Prérequis
Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.
Voici le guide pour ceux qui veulent repartir de zéro.
Si vous voulez gagner du temps, utilisez un template cloud-init.
Optionnel mais si vous avez une instance Pi-Hole à domicile et que Unbound est activé, pensez à ajouter les entrées DNS pour vos nœuds K3s, cela vous évitera d'indiquer les adresses IP.
3-Installation
Installer le nœud Master
Pour ce guide, nous allons installer K3s avec le script fournis par le site web à une exception prés, nous ne déploierons pas KlipperLB (ServiceLB) que nous remplacerons par la suite par Metal LB.
En ce qui concerne Traefik, c'est la version 2.9.10 qui est embarquée donc nous garderons ce dernier comme contrôleur Ingress au lieu de NGINX.
Nous allons indiquer dans la configuration par défaut les options suivantes :
- K3S_KUBECONFIG : chmod 644 (lecture écriture pour l'utilisateur, lecture seule pour le groupe et les utilisateurs extérieurs). Cela vous évitera d'utiliser la commande "sudo" pour "k3s" et "kubectl".
- KUBECONFIG : chemin de la configuration de K3s, cela nous évitera d'indiquer le chemin avec la commande "--kubeconfig".
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--write-kubeconfig-mode 644 --write-kubeconfig /etc/rancher/k3s/k3s --disable servicelb" sh -s -
Après installation, vérifiez bien que le service K3s est actif.
sudo systemctl status k3s
Pour visualiser tout les pods, services, namespace et crd (custom ressources), tapez la commande suivante.
kubectl get pods,svc,ns,crd --all-namespaces
Ajouter un nœud
Pour ajouter un nœud au cluster, revenez à la partie 2 (prérequis) pour créer une machine virtuelle ou un conteneur LXC.
Sur le nœud "master", affichez la clé et copiez là.
sudo cat /var/lib/rancher/k3s/server/node-token
Puis exportez les variables suivantes :
- K3S_KUBECONFIG : chmod 644 (lecture écriture pour l'utilisateur, lecture seule pour le groupe et les utilisateurs extérieurs). Cela vous évitera d'utiliser la commande "sudo" pour "k3s" et "kubectl"
- K3S_URL : l'adresse du nœud "master" suivi du numéro de port (6443)
- K3S_TOKEN : la clé qui se trouve dans /var/lib/rancher/k3s/server/node-token
export K3S_KUBECONFIG_MODE="644"
export K3S_URL="https://IP_ADRESS:6443"
export K3S_TOKEN="TOKEN_KEY"
Pour ajouter un nœud "worker", affichez le token sur le nœud Master.
sudo cat /var/lib/rancher/k3s/server/node-token
Puis sur le nœud Worker, ajoutez le ce dernier au cluster avec la commande suivante.
curl -sfL https://get.k3s.io | sh -s - agent --server https://IP_MASTER:6443 --token ${TOKEN}
Note : si vous avez le même nom d'hôte sur l'ensemble des nœuds, ajoutez "--with-node-id" à votre commande pour que K3s génère un ID aléatoire.
Retournez sur le nœud master et testez la commande suivante pour vérifier le bon fonctionnement.
kubectl get node
4-Désinstallation
Pour désinstaller K3s sur le nœud "master", tapez la commande suivante.
/usr/local/bin/k3s-uninstall.sh
Et enfin, pour le désinstaller sur le nœud "worker".
/usr/local/bin/k3s-agent-uninstall.sh
Pour un nettoyage en profondeur, tapez ces deux commandes sur l'ensemble des nœuds.
sudo rm -R /etc/rancher
sudo rm -R /var/lib/rancher
5-Mise à jour
Il y a 3 manière de mettre à jour K3s.
Version stable
curl -sfL https://get.k3s.io | sh -
Dernière version
curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest sh -
Version spécifique
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=vX.Y.Z-rc1 sh -