Choix - Kubernetes (K3s)
A. Contexte
Section titled âA. Contexteâ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.
B. Cahiers des charges
Section titled âB. Cahiers des chargesâ| 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. |
C. Les solutions du marché
Section titled âC. Les solutions du marchĂ©âC.1. PrĂ©sentations des solutions
Section titled âC.1. PrĂ©sentations des solutionsâC.1.1. K3s associĂ© Ă Kube-vip
Section titled âC.1.1. K3s associĂ© Ă Kube-vipâ- 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.
C.1.3. MicroK8s
Section titled âC.1.3. MicroK8sâ- 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.
C.2. Comparatifs des solutions
Section titled âC.2. Comparatifs des solutionsâ| 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é |
D. Solution proposée
Section titled âD. Solution proposĂ©eâ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.
Footnotes
Section titled âFootnotesâ-
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. â©
-
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. â©
-
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). â©
-
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. â©
-
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). â©