Skip to content

Choix - Kubernetes (K3s)

Au sein de l’infrastructure LoutikCLOUD, le besoin d’orchestrer nos conteneurs de maniĂšre fiable et rĂ©siliente est devenu critique. L’objectif est de dĂ©ployer un cluster Kubernetes hautement disponible sur nos trois hyperviseurs Proxmox.

Afin de garantir cette rĂ©silience, l’architecture prĂ©voit trois nƓuds Control Plane1 (un sur chaque nƓud Proxmox pour assurer le quorum2). Ces machines virtuelles disposent de ressources contraintes : 3 Go de RAM, 2 vCPU et 50 Go de stockage. Pour Ă©viter de saturer ces ressources vitales, aucun pod3 applicatif ne devra y ĂȘtre exĂ©cutĂ©. Enfin, l’accĂšs Ă  l’API du cluster doit ĂȘtre protĂ©gĂ© par une VIP4 (10.0.12.6, rĂ©solue via api.prd.k3s.infra.loutik.fr). Le dĂ©fi est de trouver un Ă©cosystĂšme lĂ©ger, capable de gĂ©rer cette VIP nativement, tout en restant simple Ă  installer et Ă  maintenir dans un environnement de type homelab.

ID Type Exigence Description
[REQ-F01] Fonctionnel Haute DisponibilitĂ© (Quorum) La solution doit supporter un dĂ©ploiement multi-maĂźtres sur 3 nƓuds distincts pour tolĂ©rer la perte d’un hyperviseur.
[REQ-F02] Fonctionnel Gestion de la VIP API Le systùme doit attribuer et basculer automatiquement l’adresse IP virtuelle (10.0.12.6) de l’API entre les nƓuds maütres.
[REQ-T01] Technique Empreinte mĂ©moire rĂ©duite Les composants doivent fonctionner de maniĂšre fluide et stable avec seulement 3 Go de RAM et 2 vCPU par nƓud.
[REQ-T02] Technique Isolation des charges PossibilitĂ© d’appliquer un Taint5 sur les nƓuds maĂźtres pour interdire l’exĂ©cution de services applicatifs.
[REQ-T03] Technique SimplicitĂ© d’installation Le dĂ©ploiement et la maintenance doivent ĂȘtre adaptĂ©s Ă  une gestion homelab, sans l’ingĂ©nierie d’un datacenter.
  • PrĂ©sentation gĂ©nĂ©rale : K3s est une distribution Kubernetes allĂ©gĂ©e et certifiĂ©e, créée par Rancher. Kube-vip est un outil rĂ©seau open-source fournissant de la haute disponibilitĂ©.
  • Fonctionnement : K3s remplace les composants lourds par des alternatives lĂ©gĂšres (etcd optimisĂ© ou base relationnelle). Kube-vip s’exĂ©cute sous forme de composant statique pour diffuser la VIP via le protocole ARP, garantissant que l’IP pointe toujours vers un nƓud sain.
  • Profil : IdĂ©al pour l’Edge computing, l’IoT et les architectures homelab exigeantes.

C.1.2. Kubernetes Vanilla (Kubeadm) avec Keepalived & HAProxy

Section titled “C.1.2. Kubernetes Vanilla (Kubeadm) avec Keepalived & HAProxy”
  • PrĂ©sentation gĂ©nĂ©rale : La distribution standard de Kubernetes, dĂ©ployĂ©e avec l’outil officiel Kubeadm, couplĂ©e Ă  des paquets Linux classiques de routage.
  • Fonctionnement : Utilise tous les composants standards dans leur intĂ©gralitĂ©. La VIP est gĂ©rĂ©e en externe par un dĂ©mon Keepalived, et le trafic de l’API est rĂ©parti par un load-balancer HAProxy installĂ© sur chaque nƓud.
  • Profil : OrientĂ© grandes entreprises avec des infrastructures massives et des Ă©quipes dĂ©diĂ©es.
  • PrĂ©sentation gĂ©nĂ©rale : Une distribution Kubernetes lĂ©gĂšre maintenue par Canonical (Ă©diteur d’Ubuntu).
  • Fonctionnement : S’installe via le gestionnaire de paquets Snap et propose un systĂšme d’extensions intĂ©grĂ©es (add-ons) pour activer des fonctionnalitĂ©s comme la haute disponibilitĂ©.
  • Profil : Stations de travail des dĂ©veloppeurs, appliances et dĂ©ploiements rapides.
Exigence K3s + Kube-vip Kubernetes Vanilla + Keepalived MicroK8s
[REQ-F01 (HA)] Validé Validé Validé
[REQ-F02 (VIP API)] ValidĂ© (Natif via Kube-vip) ValidĂ© (Mais nĂ©cessite des services externes) Évaluation (Moins standardisĂ© pour l’API)
[REQ-T01 (LĂ©gĂšretĂ©)] ValidĂ© Non validĂ© (Gourmand pour 3Go de RAM) Évaluation (Performances correctes, mais liĂ© Ă  Snap)
[REQ-T02 (Isolation)] Validé Validé Validé
[REQ-T03 (Simplicité)] Validé Non validé (Maintenance trÚs complexe) Validé

La solution proposĂ©e pour l’infrastructure est le duo K3s couplĂ© Ă  Kube-vip.

Ce choix rĂ©pond de maniĂšre chirurgicale aux contraintes de LoutikCLOUD. L’installation de K3s est extrĂȘmement frugale, ce qui permet aux trois nƓuds Control Plane de fonctionner confortablement avec leurs ressources limitĂ©es. L’architecture distribuĂ©e sur nos trois serveurs Proxmox (PVE1, PVE2, et le nƓud de donnĂ©e PVE3) garantit un quorum robuste : la perte d’un hĂŽte n’entraĂźne aucune coupure de service.

Pour la gestion de l’API, Kube-vip est configurĂ© pour se dĂ©ployer automatiquement lors de l’initialisation des maĂźtres. Il gĂšre l’adresse VIP 10.0.12.6 (api.prd.k3s.infra.loutik.fr) de maniĂšre autonome par une Ă©lection d’ARP gratuit. Si le nƓud maĂźtre actif devient indisponible, l’IP bascule sur un autre nƓud en quelques millisecondes, de façon transparente.

Enfin, la flexibilitĂ© de K3s permet d’appliquer un Taint strict dĂšs le dĂ©ploiement. Cela garantit que nos deux nƓuds Workers (rĂ©partis sur PVE1 et PVE2) absorberont 100% de la charge applicative, prĂ©servant la stabilitĂ© du Control Plane.

Justification du rejet des solutions alternatives :

  • Kubernetes Vanilla + Keepalived / HAProxy : RejetĂ© principalement pour sa lourdeur. Les composants standards de Kubernetes consommeraient une part trop importante des 3 Go de RAM disponibles. De plus, la gestion d’une VIP via Keepalived et HAProxy en dehors du cycle de vie du cluster ajoute une complexitĂ© opĂ©rationnelle inutile pour un homelab.
  • MicroK8s : Bien qu’intĂ©ressant pour sa simplicitĂ©, sa forte dĂ©pendance Ă  l’écosystĂšme Snap le rend moins universel pour l’apprentissage et l’administration systĂšme brute. De plus, le couplage K3s/Kube-vip offre un contrĂŽle plus granulaire et standardisĂ© sur le rĂ©seau du Control Plane.

  1. Control Plane : Le “cerveau” du cluster. Il prend les dĂ©cisions globales (oĂč planifier le travail, surveiller l’état des machines) mais n’hĂ©berge pas les applications elles-mĂȘmes. ↩

  2. Quorum : Le nombre minimum de serveurs actifs nĂ©cessaires (ici au moins 2 sur 3) pour que le systĂšme puisse valider des dĂ©cisions et continuer Ă  fonctionner correctement lors d’une panne matĂ©rielle. ↩

  3. Pod : La plus petite unitĂ© de travail dĂ©ployable dans Kubernetes. C’est une “capsule” qui enveloppe un ou plusieurs conteneurs d’application (comme des conteneurs Docker). ↩

  4. VIP (Virtual IP) : Une adresse IP flottante qui n’est pas rattachĂ©e physiquement Ă  une seule carte rĂ©seau. Elle peut basculer automatiquement d’un serveur Ă  l’autre en cas de problĂšme, assurant que le service reste joignable. ↩

  5. Taint (Tache) : Une rĂšgle de configuration appliquĂ©e sur un serveur qui repousse les Pods, leur interdisant de s’y installer. Cela permet de rĂ©server ce serveur uniquement aux processus essentiels du systĂšme (comme le Control Plane). ↩