Déployez un cluster Kubernetes complet en quelques minutes avec une automatisation complète basée sur Vagrant, Ansible, et kubeadm.
Ce projet vous permet de créer un cluster Kubernetes local multi-nœuds avec :
- 1 nœud de contrôle (k8s-controlplan)
- 2 nœuds workers (k8s-node1, k8s-node2)
- Runtime containerd
- Réseau Calico (CNI)
- Dashboard Kubernetes et Metrics Server préinstallés
- 🔧 Automatisation complète avec Ansible (rôles modulaires)
- 🌐 Réseau bridgé pour un accès direct aux VMs
- 📊 Monitoring avec Dashboard et Metrics Server
- 🛡️ Sécurité avec configuration des groupes systemd
- 🎯 Prêt pour la production avec bonnes pratiques intégrées
- 🔄 CI/CD ready avec hooks pre-commit et linting
- Vagrant ≥ 2.3
- VirtualBox ≥ 7.0
- Ansible ≥ 2.9
- Python 3.8+
- RAM : 8 Go minimum (16 Go recommandés)
- CPU : 4 cœurs minimum
- Stockage : 20 Go d'espace libre
git clone <votre-repo>/vagrant-k8s-cluster.git
cd vagrant-k8s-cluster# Installer les dépendances Python
pip install -r requirements.txt
# Configuration pre-commit (optionnel mais recommandé)
pre-commit installImportant : Adaptez l'interface réseau dans le Vagrantfile :
# Ligne 21 du Vagrantfile - remplacez "wlo1" par votre interface
node_config.vm.network "public_network", ip: node[:ip], bridge: "wlo1"Pour identifier votre interface :
ip route | grep default
# ou
nmcli device statusvagrant up⌛️ Le processus prend environ 10-15 minutes...
k8s_release: "1.33" # Version majeure de Kubernetes
k8s_version: "1.33.0" # Version complète
home_dir: "/home/vagrant" # Répertoire utilisateur| Nœud | IP | Rôle |
|---|---|---|
| k8s-controlplan | 192.168.122.70 | Control Plane |
| k8s-node1 | 192.168.1.71 | Worker |
| k8s-node2 | 192.168.1.72 | Worker |
.
├── Vagrantfile # Configuration des VMs
├── playbook.yml # Playbook principal Ansible
├── requirements.txt # Dépendances Python
├── group_vars/all/main.yml # Variables globales
├── roles/ # Rôles Ansible modulaires
│ ├── cfg_nodes/ # Configuration de base des nœuds
│ ├── cfg_containerd/ # Installation containerd
│ ├── cfg_kubeadm_kubelet_kubectl/ # Outils Kubernetes
│ ├── inst_runc/ # Runtime runc
│ ├── inst_cni/ # Plugins CNI
│ ├── inst_cri_tools/ # Outils CRI (crictl)
│ ├── init_kubeadm/ # Initialisation du cluster
│ ├── join_workers/ # Jointure des workers
│ └── kubectl_cheat_sheet/ # Configuration kubectl
├── github/ # Module Terraform (optionnel)
└── .pre-commit-config.yaml # Configuration qualité code
# Se connecter au nœud maître
vagrant ssh k8s-controlplan
# Vérifier l'état du cluster
kubectl get nodes
kubectl get pods -A# Gestion des VMs
vagrant up # Démarrer toutes les VMs
vagrant up k8s-controlplan # Démarrer une VM spécifique
vagrant halt # Arrêter toutes les VMs
vagrant destroy -f # Supprimer toutes les VMs
vagrant provision # Reprovisioner sans recréer
# Debugging
vagrant status # État des VMs
vagrant ssh k8s-node1 # Se connecter à un worker- Se connecter au nœud de contrôle :
vagrant ssh k8s-controlplan- Créer un tunnel pour accéder au dashboard :
kubectl proxy --address='0.0.0.0' --accept-hosts='^.*$'- Accéder via :
http://192.168.122.70:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
# État des nœuds
kubectl get nodes -o wide
# État des pods système
kubectl get pods -n kube-system
# Métriques des nœuds (nécessite metrics-server)
kubectl top nodes
kubectl top pods -A# Logs kubelet
sudo journalctl -u kubelet -f
# Logs containerd
sudo journalctl -u containerd -f
# État des services
sudo systemctl status kubelet
sudo systemctl status containerd- Configuration systemd pour containerd et kubelet
- Désactivation du swap
- Configuration réseau sécurisée
- Isolation des pods avec Calico
Le projet inclut des hooks pre-commit pour :
- Validation YAML/Ansible
- Linting du code shell
- Vérification des clés privées
- Formatage automatique
# Régénérer le token de jointure
vagrant ssh k8s-controlplan
sudo kubeadm token create --print-join-command
# Reprovisioner un worker
vagrant provision k8s-node1# Vérifier la connectivité
ping 192.168.122.70
# Redémarrer les services réseau
sudo systemctl restart containerd kubelet# Diagnostic complet
kubectl describe node k8s-controlplan
kubectl get events --sort-by='.lastTimestamp'# Logs d'installation Ansible
vagrant up --debug
# Provisioning avec verbosité
vagrant provision --debugPour afficher toutes les VMs gérées par libvirt :
virsh list --allPour filtrer les VMs du projet (par nom) :
virsh list --all | grep k8s-Pour obtenir plus d’informations sur une VM spécifique :
virsh dominfo k8s-controlplanPour afficher l’adresse IP d’une VM :
virsh domifaddr k8s-controlplan# Validation des playbooks
ansible-lint playbook.yml
# Tests des hooks
pre-commit run --all-filesPour modifier la configuration :
- Ressources VM : Éditez le
Vagrantfile - Versions Kubernetes : Modifiez
group_vars/all/main.yml - Composants supplémentaires : Ajoutez des rôles dans
roles/
- Intégration Helm
- Monitoring avec Prometheus/Grafana
- Support LoadBalancer (MetalLB)
- Automatisation GitOps (ArgoCD)
Contributions are welcome! Please feel free to submit a Pull Request.