Installer k3s sur du baremetal - tutoriel étape par étape et avec Terraform
Installer little k3s Kubernetes sur un cluster homelab
Voici un walkthrough étape par étape de
l’installation d’un cluster K3s à 3 nœuds
sur des serveurs physiques (1 maître + 2 travailleurs).
Ce guide suppose que vous commencez avec une installation minimale
Linux
(p. ex., Ubuntu 22.04 ou Debian) sur chaque serveur,
et que vous souhaitez héberger vous-même votre plan de contrôle et vos charges de travail.
K3s
est une
version légère de Kubernetes,
qui convient bien à ce petit laboratoire domestique.
⚙️ Topologie du cluster
Nom du nœud | Rôle | Hôte/IP |
---|---|---|
master-1 |
Serveur (Plan de contrôle) | 192.168.1.100 |
worker-1 |
Agent (Nœud de travail) | 192.168.1.101 |
worker-2 |
Agent (Nœud de travail) | 192.168.1.102 |
✅ Prérequis
🧱 Matériel (Minimum):
- CPU : 2 cœurs
- RAM : 2 Go+ par nœud
- Disque : 20 Go+ par nœud
🛠 Exigences du système d’exploitation :
- Linux (Ubuntu 22.04, Debian 12, etc.)
curl
,ssh
etsudo
installés- Accès root ou sudo
🧼 Réseau propre :
-
Assurez-vous que tous les nœuds peuvent résoudre et pinger les uns les autres par IP ou par nom d’hôte.
-
Désactivez le swap :
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
🚀 Installation étape par étape
📍 Étape 1 : Installer K3s sur le plan de contrôle (master-1)
curl -sfL https://get.k3s.io | sh -
Après l’installation :
sudo cat /var/lib/rancher/k3s/server/node-token
- Cela vous donne le jeton d’adhésion nécessaire pour les nœuds de travail.
Vérifiez que le cluster fonctionne :
sudo kubectl get nodes
k3s
inclut unkubectl
installé en tant quek3s kubectl
ou lié en tant quekubectl
.
📍 Étape 2 : Installer les agents K3s (worker-1 & worker-2)
Répétez sur chaque nœud de travail :
Remplacez <MASTER_IP>
et <NODE_TOKEN>
par les valeurs de l’étape 1.
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=<NODE_TOKEN> sh -
Exemples :
K3S_URL=https://192.168.1.100:6443 \
K3S_TOKEN=K10abcde123456789::server:abcde123456789 \
sh -c "$(curl -sfL https://get.k3s.io)"
📍 Étape 3 : Vérifier le cluster depuis master-1
kubectl get nodes
Vous devriez voir :
NAME STATUS ROLES AGE VERSION
master-1 Ready control 5m v1.29.2+k3s1
worker-1 Ready <none> 2m v1.29.2+k3s1
worker-2 Ready <none> 2m v1.29.2+k3s1
🔐 (Optionnel) Activer la haute disponibilité (HA)
Pour une HA similaire à la production (optionnel dans les laboratoires domestiques) :
- Utilisez une base de données externe (p. ex., MySQL/PostgreSQL/etcd).
- Exécutez plusieurs nœuds serveurs avec l’indicateur
--server
et une base de données partagée. - Voir : Documentation K3s HA
🧪 Tester un déploiement
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=LoadBalancer
kubectl get svc
Vérifiez l’accès via curl http://<worker-ip>:<port>
ou configurez MetalLB pour les adresses IP de chargeur externe.
🧰 Notes utiles
-
Kubeconfig :
/etc/rancher/k3s/k3s.yaml
- Copiez-le sur votre machine locale et
export KUBECONFIG=...
pour gérer à distance.
- Copiez-le sur votre machine locale et
-
Services systemd :
sudo systemctl status k3s
sudo systemctl status k3s-agent
(sur les nœuds de travail)
💡 Extras (Optionnels)
-
K9s : Interface en terminal pour gérer Kubernetes :
brew install k9s
ousudo snap install k9s
-
Tableau de bord : Activez-le avec des manifestes :
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
-
MetalLB : Ajoutez le support de balanceur de charge pour les serveurs physiques :
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
📦 Nettoyage
Pour supprimer k3s :
# Sur le maître :
/usr/local/bin/k3s-uninstall.sh
# Sur le travailleur :
/usr/local/bin/k3s-agent-uninstall.sh
Installer un cluster K3s à 3 nœuds sur serveurs physiques avec Terraform
Voici un Terraform modèle
qui aide à provisionner un cluster K3s à 3 nœuds sur serveurs physiques en supposant que vous gérez des serveurs Linux déjà provisionnés (p. ex., dans votre LAN/laboratoire domestique) via SSH et Ansible. Terraform appellera des playbooks Ansible pour installer K3s.
🧱 Hypothèses
-
Vous avez déjà :
- 3 serveurs avec des adresses IP fixes, accessibles via SSH.
- Accès SSH (basé sur des clés).
- Terraform et Ansible installés localement.
-
OS cible : Ubuntu/Debian (peut être personnalisé).
-
Vous utilisez le provisionner Terraform
local-exec
ou le plugin de provisionnement Ansible (nous utiliseronslocal-exec
ici pour la portabilité).
📁 Structure du répertoire
k3s-cluster/
├── main.tf
├── inventory.ini
├── ansible/
│ └── install_k3s.yml
└── variables.tf
📄 variables.tf
variable "master_ip" {
default = "192.168.1.100"
}
variable "worker_ips" {
default = ["192.168.1.101", "192.168.1.102"]
}
variable "ssh_user" {
default = "votre_utilisateur"
}
variable "ssh_private_key" {
default = "~/.ssh/id_rsa"
}
📄 main.tf
provider "null" {}
resource "null_resource" "install_k3s" {
provisioner "local-exec" {
command = "ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i inventory.ini ansible/install_k3s.yml --private-key ${var.ssh_private_key} -u ${var.ssh_user}"
}
triggers = {
always_run = "${timestamp()}"
}
}
📄 inventory.ini
[masters]
192.168.1.100
[workers]
192.168.1.101
192.168.1.102
[all:vars]
ansible_python_interpreter=/usr/bin/python3
📄 ansible/install_k3s.yml
---
- hosts: masters
become: yes
tasks:
- name: Installer k3s master
shell: |
curl -sfL https://get.k3s.io | sh -
- name: Obtenir le node-token
shell: cat /var/lib/rancher/k3s/server/node-token
register: node_token
delegate_to: localhost
- hosts: workers
become: yes
tasks:
- name: Rejoindre le cluster en tant que worker
shell: |
curl -sfL https://get.k3s.io | K3S_URL=https://{{ hostvars['192.168.1.100']['ansible_host'] }}:6443 K3S_TOKEN={{ hostvars['192.168.1.100']['node_token']['stdout'] }} sh -
Note : Vous pourriez avoir besoin d’ajuster l’accès aux variables d’IP ou de jeton selon les versions d’Ansible. Vous pouvez également générer le jeton sur le maître et le sauvegarder dans un fichier avant d’exécuter l’installation des travailleurs.
🚀 Comment exécuter
À partir du répertoire k3s-cluster/
:
terraform init
terraform apply
🧰 Améliorations (Optionnelles)
- Utiliser une génération dynamique de l’inventaire (p. ex., depuis DHCP/dnsmasq).
- Ajouter le déploiement de MetalLB via Ansible.
- Ajouter des noms d’hôte et des fonctionnalités HA.
- Remplacer avec un rôle Ansible comme
xanmanning.k3s
pour plus de flexibilité.
Liens utiles
- https://k3s.io/
- Feuille de route Kubernetes
- Installer Kubernetes avec Kubespray
- Feuille de route Terraform - commandes utiles et exemples
- Distributions Kubernetes - aperçu rapide de kubeadm, k3s, MicroK8s, Minikube, Talos Linux et RKE2
- Comparaison des distributions Kubernetes pour un laboratoire domestique à 3 nœuds
- Comment installer Ubuntu 24.04 & outils utiles
- Feuille de route Docker
- Feuille de route Docker Compose - commandes les plus utiles avec des exemples