Dans un monde où la latence, la souveraineté et la résilience sont devenues critiques, les architectures edge prennent tout leur sens. Ce guide vous montre comment construire une plateforme cloud-native bare-metal, 100% auto-hébergée et résiliente, avec K3s, MetalLB, Ceph (via Rook) et GitOps avec FluxCD.
Prérequis
- Minimum 3 nœuds physiques (Raspberry Pi 4, NUC ou serveurs edge)
- Réseau local en /24 dédié
- DNS interne ou fichiers hosts
- Linux installé sur chaque nœud
- SSH sans mot de passe entre les nœuds
- Accès Internet pour les installations
Technologies utilisées
Technologie | Rôle |
K3s | Kubernetes léger et HA |
MetalLB | Load balancing L2 |
Rook + Ceph | Stockage distribué |
FluxCD | Automatisation GitOps |
Prometheus + Grafana | Supervision |
Tailscale (optionnel) | Accès sécurisé inter-sites |
Architecture
SITE A SITE B
+---------------------------+ +---------------------------+
| K3s Control Plane (x3) | | K3s Worker Nodes |
| Ceph Mon / Mgr / OSD | | Rook/Ceph OSD |
| FluxCD | | Apps / Services |
+---------------------------+ +---------------------------+
Étape 1 : Installation de K3s (HA)
Sur le nœud 1 (initiateur)
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --cluster-init" sh -
Sur les nœuds 2 et 3
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --server https://<IP_NODE1>:6443" K3S_TOKEN=<token> sh -
Récupérez le token sur le nœud 1 :
cat /var/lib/rancher/k3s/server/node-token
Étape 2 : Déploiement de MetalLB
Installation
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
Configuration IP range
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default-addresspool
namespace: metallb-system
spec:
addresses:
- 192.168.100.240-192.168.100.250
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2adv
namespace: metallb-system
Étape 3 : Déploiement de Ceph via Rook
git clone https://github.com/rook/rook.git
cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
kubectl create -f cluster.yaml
Vérifiez le statut
kubectl -n rook-ceph get pods
kubectl -n rook-ceph get cephcluster
Création d’un StorageClass
kubectl create -f storageclass.yaml
Étape 4 : GitOps avec FluxCD
curl -s https://fluxcd.io/install.sh | sudo bash
Bootstrap Git
flux bootstrap github --owner=ton-org --repository=flux-infra --branch=main --path=./clusters/edge --personal
Exemple d'arborescence GitOps
clusters/
└── edge/
├── kustomization.yaml
├── ceph/
└── metallb/
Étape 5 : Monitoring avec Prometheus & Grafana
kubectl create namespace monitoring
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install k3s-monitoring prometheus-community/kube-prometheus-stack -n monitoring
Accès Grafana
kubectl -n monitoring port-forward svc/k3s-monitoring-grafana 3000:80
Naviguez sur http://localhost:3000
(admin / prom-operator password dans le secret Grafana).
Étape 6 : (Bonus) Accès inter-sites avec Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --authkey <key> --hostname k3s-node1
Cas d’usage
- Hébergement d'applications sensibles en local
- Traitement temps réel sur site industriel (latence réduite)
- Plateforme edge 100% souveraine (pas de dépendance cloud)
- Backup croisé + HA (grâce à Ceph)
- Déploiement GitOps simplifié
Avantages
Fonctionnalité | Supporté |
Kubernetes HA | ✅ (K3s) |
Stockage distribué | ✅ (Ceph via Rook) |
GitOps | ✅ (FluxCD) |
Monitoring | ✅ (Prometheus + Grafana) |
Load Balancing | ✅ (MetalLB) |
Edge Ready | ✅ |
100% Open Source | ✅ |
Conclusion
Construire une infrastructure edge souveraine avec K3s, Ceph, MetalLB et GitOps vous donne le contrôle total de votre cloud local. Résiliente, extensible, auditable, cette architecture est idéale pour les entreprises modernes souhaitant sortir des solutions propriétaires tout en conservant une scalabilité et une maintenabilité exemplaire.