📝 Bootstrap du cluster K3s#
🗂️ 1. Création du dépôt homelab-k3s#
Ce dépôt contient tous les fichiers Ansible nécessaires pour provisionner automatiquement un cluster K3s depuis zéro, avec :
- Le control plane (
control00) - Les workers (
cube00,cube01) - Le déploiement d’Argo CD via Helm
- Le bootstrap du manifeste App-of-Apps
🏗️ Structure cible#
À la racine du dépôt :
homelab-k3s/
└── ansible/
├── inventory/
│ └── hosts.yml
├── group_vars/
│ ├── master.yml
│ └── workers.yml
├── playbooks/
│ ├── k3s_master.yml
│ ├── k3s_workers.yml
│ └── install_argocd.yml
└── requirements.yml
🧱 2. Création du fichier inventory/hosts.yml#
📍 Chemin : ansible/inventory/hosts.yml
Ce fichier définit les hôtes du cluster (control plane + workers), accessibles en SSH.
---
all:
hosts:
control00:
ansible_host: 192.168.1.21
ansible_user: root
cube00:
ansible_host: 192.168.1.42
ansible_user: root
cube01:
ansible_host: 192.168.1.77
ansible_user: root
children:
master:
hosts:
control00:
workers:
hosts:
cube00:
cube01:
✅ À faire :
- Crée le dossier
ansible/inventory/s’il n’existe pas - Crée le fichier
hosts.ymlet colle ce contenu - Vérifie que les adresses IP et utilisateurs SSH sont bons
- Teste ta connexion SSH vers chaque machine (
ssh root@192.168.1.X)
🧪 Test rapide avec Ansible :
Depuis ansible/, exécute :
ansible -i inventory/hosts.yml all -m ping
cube00 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
cube01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
control00 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
Si tout est bien configuré, tu devrais avoir un pong pour chaque hôte.
⚙️ 3. Variables Ansible#
Dans cette étape, on définit les variables spécifiques aux groupes d’hôtes master et workers du cluster.
📄 Fichier master.yml#
📍 Chemin : ansible/group_vars/master.yml
---
k3s_token: "Votre_Token_ICI"
k3s_server_ip: "192.168.1.21"
k3s_version: "v1.29.3+k3s1"
k3s_install_url: "https://get.k3s.io"
kubeconfig_path: "/etc/rancher/k3s/k3s.yaml"
🔐 Remplace Votre_Token_ICI par un token sécurisé.
🧠 Ce fichier contient :
- Le token de jonction du cluster
- L’IP du nœud master
- L’URL d’installation de K3s
- Le chemin du
kubeconfigutilisé par Argo CD
📄 Fichier workers.yml#
📍 Chemin : ansible/group_vars/workers.yml
---
k3s_token: "Votre_Token_ICI"
k3s_version: "v1.29.3+k3s1"
k3s_server_ip: "192.168.1.21"
k3s_install_url: "https://get.k3s.io"
🎯 Ces variables permettent à chaque worker de rejoindre le cluster en se connectant à l’API du master (control00).
✅ À faire :
- Crée le dossier
ansible/group_vars/s’il n’existe pas - Ajoute les deux fichiers
.yml - Renseigne correctement l’adresse IP et le token
🧪 Test de bonne reconnaissance des variables :
Lance ce playbook de debug pour t’assurer que les variables sont bien prises :
ansible -i inventory/hosts.yml master -m debug -a "var=k3s_server_ip"
control00 | SUCCESS => {
"k3s_server_ip": "192.168.1.21"
}
Tu dois voir l’IP 192.168.1.21 s’afficher.
📦 4. Dépendances Ansible#
Certaines tâches (ex: installation d’Argo CD via Helm) nécessitent des collections Ansible externes.
📄 Fichier requirements.yml#
📍 Chemin : ansible/requirements.yml
---
collections:
- name: kubernetes.core
- name: community.kubernetes
💡 Ces collections permettent à Ansible :
- De manipuler des objets Kubernetes (
kubernetes.core.k8s) - D’utiliser Helm (
kubernetes.core.helm)
📥 Installation des collections#
Depuis le dossier ansible/, lance :
ansible-galaxy collection install -r requirements.yml
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Skipping 'kubernetes.core' as it is already installed
Skipping 'community.kubernetes' as it is already installed
Cela télécharge et installe automatiquement les collections nécessaires.
🧪 Test rapide :
Tu peux vérifier qu’elles sont bien disponibles avec :
ansible-doc -t module kubernetes.core.k8s=
Si la doc du module s’affiche, c’est bon ✅
🛠️ Tu es maintenant prêt à déployer K3s avec Ansible !
Rendez-vous à l’étape suivante pour le playbook de déploiement du nœud master.
