Après avoir consolidé mes acquis sur Docker Compose, j’ai voulu franchir un cap et expérimenter l’orchestration de conteneurs avec Kubernetes en conditions réelles.
Plutôt qu’un cluster Kubernetes complet, trop lourd pour une machine unique, j’ai déployé K3s (la distribution légère certifiée CNCF de Rancher) afin d’héberger mes applications personnelles (portfolio, documentation, hub) et de mettre en œuvre une véritable démarche GitOps avec ArgoCD.
Comment fonctionne le déploiement automatique (GitOps)
Choix d’architecture et composants
1. K3s : Kubernetes allégé pour la production
K3s regroupe les composants essentiels de Kubernetes dans un binaire unique de moins de 100 Mo. Il remplace etcd par SQLite pour les installations mono-nœud tout en conservant 100% de compatibilité avec l’API Kubernetes standard. Cela m’a permis d’écrire de véritables manifests (Deployments, Services, ConfigMaps, IngressRoutes) sans consommer inutilement les ressources de la machine.
2. Le GitOps avec ArgoCD & Image Updater
Pour éliminer les déploiements manuels avec kubectl apply, j’ai intégré ArgoCD :
- Git comme unique source de vérité : l’état désiré du cluster est intégralement décrit dans mon dépôt Git.
- Réconciliation continue : ArgoCD compare en permanence l’état du cluster avec le dépôt Git et applique immédiatement les changements (dérive de configuration évitée).
- ArgoCD Image Updater : dès qu’un workflow GitHub Actions compile et pousse une nouvelle image de conteneur sur le registre (GHCR), Image Updater détecte le changement et met à jour les pods en rolling update sans interruption de service.
3. Ingress Traefik et certificats SSL
Traefik est déployé comme contrôleur d’Ingress natif. Il gère le routage vers les services internes du cluster, applique les en-têtes de sécurité et renouvelle automatiquement les certificats TLS Let’s Encrypt.
4. Réseau privé et accès d’administration avec Tailscale
Pour ne pas exposer sur Internet les interfaces sensibles (console web d’ArgoCD, métriques Grafana), j’ai intégré le nœud dans un réseau maillé privé via Tailscale. Cela me permet d’administrer le cluster à distance de manière chiffrée sans ouvrir de ports sur le pare-feu.
Bilan et enseignements
Ce projet a été une étape clé dans ma montée en compétences DevOps :
- Maîtrise concrète des objets Kubernetes et de la logique de pods, services et ingress.
- Mise en place d’un cycle de vie logiciel automatisé de bout en bout (du
git pushà la production sans action manuelle). - Compréhension des avantages et des limites de Kubernetes sur un nœud unique, ce qui m’a guidé vers l’architecture hybride actuelle de mon homelab.
