Home >> Blog >> Travailler avec plusieurs clusters K8s – Les raisons qui y poussent

Travailler avec plusieurs clusters K8s – Les raisons qui y poussent

04 avril 2022

By Vincent Zurczak.

Ce billet inaugure une collection d’articles autour de la thématique « travailler avec plusieurs clusters Kubernetes ». Cette série donne ainsi l’opportunité à l’équipe SoKube de partager des retours d’expérience et d’explorer différents aspects, de la conception à l’exploitation, en passant par les angles financiers et organisationnels.

Mais avant toute chose, il serait sans doute bénéfique de rappeler quand cette problématique se pose. Il existe deux grandes catégories de besoins qui poussent une organisation à mettre en place plusieurs clusters :

  • Des raisons techniques, liées à l’architecture et aux impératifs de robustesse
  • Des raisons motivées par les besoins métier

Détaillons donc tout cela.

Impératifs architecturaux et de robustesse

Comme son nom l’indique, cette catégorie a trait à la mise en place d’infrastructures robustes, avec la tolérance aux pannes comme première préoccupation. Elle se décline en 3 cas d’usages.

Un cluster par environnement

La situation la plus fréquente est d’avoir un cluster par environnement, ou par type d’environnement. Le nombre de clusters / environnements peut aller au-delà selon les organisations, mais il en faut 3 a minima :

  • Le premier est dédié à la production, avec des conditions d’exploitation critiques, et où chaque incident est susceptible d’impacter les activités métier.
  • Le deuxième est utilisé pour les environnements applicatifs hors-production. C’est ici que les équipes projets expérimentent, évaluent et préparent leurs projets avant d’aller en production. Certaines organisations optent pour un unique cluster hors-production qui hébergent plusieurs environnements (avec une ségrégation par espaces de nom, quotas et politiques réseau K8s). D’autres préfèrent au contraire disposer de plusieurs clusters, un par environnement hors-production. Bien entendu, les combinaisons restent possibles. L’idée principale reste de séparer la production des phases amont.
  • Le dernier cluster est utilisé par l’exploitation en tant que bac à sable. C’est le terrain de jeu pour les administrateurs afin de tester des changements ou des montées de version. Parce qu’il n’héberge aucun utilisateur, les exploitants peuvent travailler sans crainte de casser quoi que ce soit : en cas d’erreur, il suffit de supprimer et reconstruire le cluster. Avec un processus suffisamment industrialisé, il devient même possible de rendre ce cluster éphémère : on le créé dès qu’une opération est prévue, on la teste, puis on détruit le cluster.

Il est essentiel de comprendre que 3 clusters / grappes est un minimum, chacun adressant des préoccupations et des SLA différents.

L’intérêt d’avoir plusieurs clusters réside dans l’isolation (la production ne devrait jamais être impactée par les autres environnements) et l’efficacité de la maintenance. Ainsi, les mises à jour et évolutions sont d’abord testées sur le bac à sable. Une fois rodées, elles peuvent être appliquées sur le cluster hors-production. Et une fois l’impact connu sur les applications, elles peuvent être jouées en production. Cette progressivité, de la grappe la moins critique à la plus sensible, atténue le risque de drames en production. Cela améliore également la confiance des équipes dans leurs procédures, en particulier pour des personnes arrivées récemment. Enfin, cette ségrégation traduit un équilibre entre mutualisation des ressources (il est possible de regrouper des environnements dans un même cluster – hors-production) et clarté quant à la gouvernance (chaque grappe ayant ses préoccupations et un SLA bien identifiés).

Changement de fournisseur K8s

Un deuxième cas d’usage assez fréquent concerne le changement de fournisseur ou d’éditeur pour sa solution Kubernetes. Par exemple, migrer d’OpenShift 3.x vers Rancher. Ou même d’OpenShift 3.x vers OpenShift 4.x – puisqu’il n’existe pas de mécanique automatisée entre les 2 versions majeures. Ou bien encore basculer d’une version hébergée en interne vers une solution cloud comme GKE, EKS, AKS…

La stratégie la plus efficace dans un tel contexte est d’avoir les 2 infrastructures coexistant pendant une période donnée, et d’effectuer la bascule progressive des projets durant ce laps de temps, selon un calendrier qui aura été défini en amont. Cette solution permet aux projets de s’organiser et évite un big-bang qui bien souvent peut mal se passer. Bien entendu, cela accroit la charge de travail pour les exploitants, puisqu’ils doivent gérer plusieurs infrastructures en parallèle. Mais d’un autre côté, ils limitent la pression grâce à un calendrier adapté et en impliquant les équipes projets. Le point le plus notable est en fait l’acroissement du nombre de nœuds et des ressources nécessaires à cela (mais ces quantités peuvent être ajustées au fur et à mesure que les projets migrent).

Deploiements multi-sites

Le dernier cas d’usage pour les questions d’architecture, concerne évidemment les déploiements multi-sites. Nous parlons ici de sites géographiques distants d’au moins un kilomètre. L’idée ici est de continuer de fonctionner, y compris si l’on devait perdre un data center (avec des stratégies actif/actif ou actif/passif). Cette nécessité peut elle-même être motivée par des considérations métier, avec certaines applications sensibles et/ou 7/24. Dans un tel cas, les architectes et exploitants devraient recrourir à plusieurs clusters installés en des sites différents, pour satisfaire ces exigences.

Les déploiements multi-sites peuvent prendre plusieurs formes :

  • La fédération de clusters K8s est une option possible, mais elle manque encore de maturité.
  • Parmi les organisations disposant de leurs propres salles machines ou centres de données, certaines bénéficient en plus d’une excellente connectivité réseau (type fibre noire) entre leurs sites. Il leurs est alors possible de déployer un cluster sur une infrastructure étendue (par exemple, avec un cluster VMWare « stretch »). La solution masque l’hétérogénité matérielle et la disparité géographique. C’est aussi elle qui gère la bascule en cas de panne.
  • Certains hébergeurs cloud proposent des zones de disponibilités (AZ) au sein des différentes régions. Ces zones garantissent de bonnes performances en entrée/sortie. Un cluster K8s peut alors être déployé à cheval sur ces différentes zones : c’est la déclinaison dans le nuage de l’infrastructure étendue décrite juste au-dessus.
  • Une dernière possibilité est d’avoir des grappes indépendantes, dans des endroits différents. Ce sont alors les stratégies de déploiements applicatifs qui vont déterminer comment tirer partie de ces infrastructures, en fonction de leurs contraintes. Cela peut passer par des installations en miroir, une architecture distribuée ou une politique de reprise après sinistre, voire un mélange de tout ça. Ce cas d’usage autorise des hébergements hybrides (différents hébergeurs cloud, ou déploiements interne + cloud, ou différents sites internes). Néanmoins, il ne présente de réelles chances de succès que lorsque les responsabilités sont bien établies, typiquement quand les exploitants se focalisent sur les infrastructures et les projets sur le cycle de vie applicatif, production incluse. Les exploitants d’infrastructure fournissent un service à destination des projets. Cela reflète le paradigme introduit par le cloud computing il y a plus de 10 ans, avec des strates de responsabilités horizontales. Très clairement, cette solution recquiert un haut niveau de maturité, non seulement technique, mais aussi sur le plan organisationnel. Or, en dépit de la tendance Dev(Sec)Ops, de nombreuses organisations continuent de considérer administration d’infrastructures et gestion de l’exploitation comme un même lot (ce qui explique pourquoi de nombreuses offres d’emplois estampillées « DevOps » ciblent des administrateurs systèmes maîtrisant des outils d’automatisation).

Impératifs métiers

La deuxième catégorie d’impératifs qui peuvent motiver le recours à plusieurs grappes K8s tient à des exigences du métier. Bien sûr, l’architecture découle forcément de besoins métier. Mais nous parlons ici de situations liées directement au métier, à savoir la volonté d’adresser un marché particulier, et donc de fournir un ou des services à des clients.

  • Le premier cas est lorsque le métier a contractuellement accepté d’héberger des produits logiciels dans une zone géographique donnée, ou bien en recourant aux services d’un hébergeur précis. Cela peut arriver pour satisfaire des exigences formulées dans un appel d’offre, en particulier pour des éditeurs logiciels. Les clients / prospects peuvent avoir ce type d’exigence pour des questions légales, ou de confiance / confidentialité.
  • Une variante de ce cas est lorsque la loi impose d’héberger les données dans une zone géographique donnée. Ainsi, en Suisse, l’autorité de régulation des marchés financiers Suisses (FINMA) exige que toutes les données sensibles (personnelles, financières, mais aussi de santé), ainsi que les services qui y accèdent, soient hébergés en Suisse. De la même manière, les services hébergeant des données de citoyens Russes doivent être situés sur le territoire Russe. Autre exemple en Australie, où les données de santé doivent être stockées sur le sol national. Notons que la RGPD est un peu moins stricte : elle dispose que tout citoyen Européen doit conserver le contrôle sur ses données, non seulement auprès de tout fournisseur de services, mais également de ses sous-traitants ou partenaires. Toutefois, des échanges avec des territoires externes restent possibles, dès lors qu’ils sont transparents et validés par les autorités Européennes (au travers d’accords). Quoiqu’il en soit, la RGPD est un motif valable pour un hébergement local. Notons aussi qu’il faut distinguer différents niveaux de protection des données, puisque la RGPD ne protège pas du « American Cloud Act » et équivalents. Pour s’en prémunir, des conditions additionnelles doivent être précisées lors de l’appel d’offres.
  • Une autre situation qui survient parfois est lorsque le métier cherche à adresser une cible où la connectivité laisse à désirer. Plusieurs pays dans le monde appliquent des mesures de contrôle ou de censure sur internet. Certains protocoles peuvent ne pas fonctionner correctement lorsqu’hébergés en-dehors du pays, et cela peut impacter les performances et l’expérience utilisateur. Des infrastructures inadaptées peuvent aussi aboutir au même résultat. Quoiqu’il en soit, cela peut limiter l’accès à certains marchés, et si y aller ou non relève d’une décision métier, le fait d’héberger des services localement peut parfois être la seule solution technique viable.
  • Enfin, un dernier cas moins exotique, est lorsque différentes entités métier coexistent au sein d’une grande organisation mais doivent rester isolées. Par exemple, certains grands groupes ont des systèmes dédiés aux activités nationales / locales et des systèmes à part pour les activités internationnales. Des législations distinctes, des applications sans rapport, et des mises en œuvre indépendantes, peuvent conduire à des infrastructures séparées.

Clusters uniques ?

Nous avons énuméré les nombreuses situations qui conduisent à travailler avec plusieurs clusters K8s. En général, c’est une combinaison qui prédomine. Ainsi, on peut très facilement imaginer une organisation avec un jeu de clusters (production / hors-production / bac à sable) sur un site interne pour des activités nationales, et une grappe hébergée dans le nuage, avec la même séparation entre environnements, mais pour un marché et des clients différents. Et peut-être qu’à un moment, une migration vers une autre solution K8s se posera et impliquera la mise en place d’un troisième groupe de clusters à gérer. En ce sens, travailler avec plusieurs clusters K8s apparaît comme la norme et non une exception.

Ceci étant dit, une question naturelle est de savoir s’il existe des situations où une unique grappe K8s peut suffire. Il y en a en effet quelques-unes. Le plus évident concerne les expérimentations et preuves de concept. Lorsqu’il s’agît d’explorer, un seul cluster suffit. Néanmoins, chez SoKube, nous avons rencontré plusieurs fois de tels clusters qui avaient évolué pour héberger en plus de la production. Pour des questions de coûts, et parfois de facilité, on s’en était tenu à un seul cluster, en s’appuyant sur les espaces de noms, des quotas, des politiques réseau et des nœuds dédiés, pour isoler différents environnements. Ces éléments résolvent bien la question de l’isolation des ressources, mais induisent un risque immense sur la maintenance, puisqu’une opération en erreur peut toucher tous les environnements, y compris la production. Démarrer avec un unique cluster K8s reste donc possible, mais doit toujours être considéré comme une étape intermédiaire. Dès lors que l’on envisage d’aller en production, plusieurs grappes seront nécessaires, in fine.

Ceci étant établi, les équipes en charge de leur exploitation doivent aussi tôt que possible se préparer à standardiser et industrialiser la gestion de leurs clusters (et des piles qui les accompagnent : supervision, centralisation des logs, sécurité…). Un cluster K8s ne devrait pas être un joyau patiemment poli que l’on ne veut / peut pas toucher. Au contraire, il s’agît d’adopter une approche d’usine, pour construire et reconstruire à l’identique autant de joyaux que nécessaire. C’est sans doute un sujet que nous aborderons plus tard dans un billet de cette collection.

Si ce sujet vous intéresse, vous pourriez aussi apprécier les articles suivants :

Enfin, mentionnons que la CNCF a lancé un groupe de travail sur les clusters K8s virtuels : c’est encore loin d’être opérationnel, mais cela pourrait ouvrir des possibilités en cas d’aboutissement.

  Edit this page