HĂ© Habr !
Nous représentons l'équipe de la plateforme Exness. Nos confrÚres avaient déjà écrit un article sur . Aujourd'hui, nous souhaitons partager notre expérience de migration de services vers Kubernetes.

Pour commencer, nous vous proposons quelques chiffres pour mieux comprendre ce qui sera abordé :
- Notre service de développement est composé de plus de 100 personnes, dont plus de 10 équipes différentes dotées de processus QA, DevOps et Scrum autonomes. Pile de développement - Python, PHP, C++, Java et Golang.
- La taille des environnements de test et de production est d'environ 2000 1.6 conteneurs chacun. Ils exécutent Rancher vXNUMX sur leur propre virtualisation et sous VMware.
Motivation
Comme on dit, rien n'est éternel et Rancher a annoncé il y a longtemps la fin du support de la version 1.6. Oui, en plus de trois ans, nous avons appris à le préparer et à résoudre les problÚmes qui se présentent, mais nous sommes de plus en plus souvent confrontés à des problÚmes qui ne seront jamais résolus. Rancher 1.6 dispose également d'un systÚme ossifié de délivrance de droits, dans lequel vous pouvez soit faire presque tout, soit rien.
MĂȘme si la virtualisation propriĂ©taire permettait un meilleur contrĂŽle sur le stockage des donnĂ©es et leur sĂ©curitĂ©, elle imposait des coĂ»ts d'exploitation difficiles Ă accepter compte tenu de la croissance constante de l'entreprise, du nombre de projets et de leurs exigences.
Nous voulions suivre les normes IaC et, si nécessaire, obtenir de la capacité rapidement, dans n'importe quel emplacement géographique et sans blocage de fournisseur, et également pouvoir l'abandonner rapidement.
Premiers pas
Tout dâabord, nous voulions nous appuyer sur des technologies et des solutions modernes qui permettraient aux Ă©quipes dâavoir un cycle de dĂ©veloppement plus rapide et de minimiser les coĂ»ts opĂ©rationnels dâinteraction avec la plateforme qui fournit lâĂ©nergie.
Bien sĂ»r, la premiĂšre chose qui nous est venue Ă lâesprit Ă©tait Kubernetes, mais nous ne nous sommes pas enthousiasmĂ©s et avons fait quelques recherches pour voir si câĂ©tait le bon choix. Nous avons Ă©valuĂ© uniquement des solutions open source et, dans une bataille injuste, Kubernetes a gagnĂ© sans condition.
Vint ensuite la question du choix dâun outil de crĂ©ation de clusters. Nous avons comparĂ© les solutions les plus populaires : kops, kubespray, kubeadm.
Au dĂ©but, kubeadm nous semblait ĂȘtre un chemin trop compliquĂ©, un peu comme une sorte d'inventeur d'un « vĂ©lo », et les kops n'avaient pas assez de flexibilitĂ©.
Et le gagnant était :

Nous avons commencĂ© Ă expĂ©rimenter avec notre propre virtualisation et AWS, en essayant de recrĂ©er quelque chose comme notre prĂ©cĂ©dent modĂšle de gestion des ressources, oĂč tout le monde utilisait le mĂȘme « cluster ». Et maintenant, nous avons notre premier cluster, composĂ© de 10 petits clusters. machines virtuellesdont certaines sont hĂ©bergĂ©es sur AWS. Nous avons commencĂ© Ă y migrer des Ă©quipes, et tout semblait bien se dĂ©rouler. L'histoire aurait pu s'arrĂȘter lĂ , maisâŠ
Premiers problĂšmes
Ansible est sur lequel kubespray est construit, ce n'est pas un outil qui vous permet de suivre IaC : lors de la mise en service/dĂ©saffectation de nĆuds, quelque chose se passait constamment mal et une sorte d'intervention Ă©tait nĂ©cessaire, et lors de l'utilisation de diffĂ©rents systĂšmes d'exploitation, le playbook se comportait diffĂ©remment. . Ă mesure que le nombre d'Ă©quipes et de nĆuds dans le cluster augmentait, nous avons commencĂ© Ă remarquer que le playbook prenait de plus en plus de temps Ă complĂ©ter, et par consĂ©quent, notre record Ă©tait de 3,5 heures, qu'en est-il du vĂŽtre ? đ
Et il semble que kubespray ne soit qu'Ansible, et tout est clair Ă premiĂšre vue, mais :

Au début du voyage, la tùche consistait à lancer des capacités uniquement dans AWS et sur la virtualisation, mais ensuite, comme cela arrive souvent, les exigences ont changé.


Ă la lumiĂšre de cela, il est devenu clair que notre ancien modĂšle consistant Ă combiner les ressources dans un seul systĂšme d'orchestration n'Ă©tait pas adaptĂ© - dans le cas oĂč les clusters sont trĂšs distants et sont gĂ©rĂ©s par diffĂ©rents fournisseurs.
En outre. Lorsque toutes les Ă©quipes travaillent au sein du mĂȘme cluster, divers services avec des NodeSelector mal installĂ©s pouvaient voler vers l'hĂŽte « Ă©tranger » d'une autre Ă©quipe et y utiliser des ressources, et si la teinte Ă©tait dĂ©finie, il y avait des demandes constantes indiquant que l'un ou l'autre service ne fonctionnait pas, pas distribuĂ© correctement en raison du facteur humain. Un autre problĂšme consistait Ă calculer le coĂ»t, en particulier compte tenu des problĂšmes de distribution des services entre les nĆuds.
Une autre histoire a Ă©tĂ© la dĂ©livrance des droits aux salariĂ©s : chaque Ă©quipe voulait ĂȘtre « Ă la tĂȘte » du cluster et le gĂ©rer entiĂšrement, ce qui pourrait provoquer un effondrement complet, puisque les Ă©quipes sont fondamentalement indĂ©pendantes les unes des autres.
Que faire?
Compte tenu de ce qui prĂ©cĂšde et des souhaits des Ă©quipes d'ĂȘtre plus indĂ©pendantes, nous avons tirĂ© une conclusion simple : une Ă©quipe - un cluster.
Nous en avons donc un deuxiĂšme :

Et puis le troisiĂšme cluster :

Puis nous avons commencĂ© Ă rĂ©flĂ©chir : disons que dans un an nos Ă©quipes auront plus dâun cluster ? Dans diffĂ©rentes zones gĂ©ographiques par exemple, ou sous le contrĂŽle de diffĂ©rents prestataires ? Et certains dâentre eux voudront pouvoir dĂ©ployer rapidement un cluster temporaire pour certains tests.

Kubernetes complet viendrait ! Il s'avĂšre qu'il s'agit d'une sorte de MultiKubernetes.
Dans le mĂȘme temps, nous devrons tous, dâune maniĂšre ou dâune autre, maintenir tous ces clusters, ĂȘtre capables dâen gĂ©rer facilement lâaccĂšs, ainsi quâen crĂ©er de nouveaux et mettre hors service les anciens sans intervention manuelle.
Un certain temps s'est écoulé depuis le début de notre voyage dans le monde de Kubernetes, et nous avons décidé de réexaminer les solutions disponibles. Il s'est avéré qu'il existe déjà sur le marché - Rancher 2.2.

Lors de la premiĂšre Ă©tape de nos recherches, Rancher Labs avait dĂ©jĂ rĂ©alisĂ© la premiĂšre version de la version 2, mais mĂȘme si elle pouvait ĂȘtre augmentĂ©e trĂšs rapidement en lançant un conteneur sans dĂ©pendances externes avec quelques paramĂštres ou en utilisant le HELM Chart officiel, cela semblait grossier Ă nous, et nous ne savions pas si nous pouvions nous fier Ă cette dĂ©cision pour savoir si elle serait dĂ©veloppĂ©e ou rapidement abandonnĂ©e. Le paradigme cluster = clics dans l'interface utilisateur elle-mĂȘme ne nous convenait pas non plus, et nous ne voulions pas nous lier Ă RKE, car il s'agit d'un outil plutĂŽt Ă©troitement ciblĂ©.
La version Rancher 2.2 avait dĂ©jĂ une apparence plus fonctionnelle et, avec les prĂ©cĂ©dentes, possĂ©dait un tas de fonctionnalitĂ©s intĂ©ressantes prĂȘtes Ă l'emploi, telles que l'intĂ©gration avec de nombreux fournisseurs externes, un point unique de distribution des droits et des fichiers kubeconfig, le lancement d'un kubectl image avec vos droits dans l'interface utilisateur, les espaces de noms imbriquĂ©s, Ă©galement appelĂ©s projets.
Il y avait aussi une communauté déjà formée autour de Rancher 2, et un fournisseur appelé HashiCorp Terraform a été créé pour la gérer, ce qui nous a aidé à tout mettre en place.
Qu'est-il arrivé
En consĂ©quence, nous nous sommes retrouvĂ©s avec un petit cluster exĂ©cutant Rancher, accessible Ă tous les autres clusters, ainsi qu'Ă de nombreux clusters qui y sont connectĂ©s, dont l'accĂšs Ă n'importe lequel d'entre eux peut ĂȘtre accordĂ© aussi simplement que l'ajout d'un utilisateur au rĂ©pertoire ldap, indĂ©pendamment de oĂč il se trouve et quelles ressources du fournisseur il utilise.
Ă l'aide de gitlab-ci et Terraform, un systĂšme a Ă©tĂ© créé qui vous permet de crĂ©er un cluster de n'importe quelle configuration chez des fournisseurs de cloud ou notre propre infrastructure et de les connecter Ă Rancher. Tout cela est fait dans le style IaC, oĂč chaque cluster est dĂ©crit par un rĂ©fĂ©rentiel et son Ă©tat est versionnĂ©. Dans le mĂȘme temps, la plupart des modules sont connectĂ©s Ă partir de rĂ©fĂ©rentiels externes, il ne reste donc plus qu'Ă transmettre des variables ou Ă dĂ©crire votre configuration personnalisĂ©e pour les instances, ce qui permet de rĂ©duire le pourcentage de rĂ©pĂ©tition de code.

Bien sĂ»r, notre voyage est loin d'ĂȘtre terminĂ© et il reste encore de nombreuses tĂąches intĂ©ressantes Ă venir, comme un point de travail unique avec les journaux et les mĂ©triques de tous les clusters, un maillage de services, des gitops pour gĂ©rer les charges dans un multicluster et bien plus encore. Nous espĂ©rons que vous trouverez notre expĂ©rience intĂ©ressante !
L'article a été rédigé par A. Antipov, A. Ganush, Platform Engineers.
Source: habr.com
