
Lors de la crĂ©ation dâun cluster Kubernetes, des questions peuvent se poser : combien de nĆuds de travail configurer et de quel type ? Quoi de mieux pour un cluster on-premise : acheter plusieurs serveurs puissants ou utiliser une douzaine de vieilles machines dans votre data center ? Est-il prĂ©fĂ©rable de prendre huit instances monocĆur ou deux instances quadricĆurs dans le cloud ?
Les réponses à ces questions se trouvent dans l'article. dans la traduction de la commande .
Capacité du cluster
En gĂ©nĂ©ral, un cluster Kubernetes peut ĂȘtre considĂ©rĂ© comme un grand « super-nĆud ». Sa puissance de calcul totale est la somme des puissances de tous ses nĆuds constitutifs.
Il existe plusieurs façons d'atteindre l'objectif de capacitĂ© de cluster souhaitĂ©. Par exemple, nous avons besoin d'un cluster d'une capacitĂ© totale de 8 cĆurs de processeur et de 32 Go de RAM car un ensemble d'applications nĂ©cessite beaucoup de ressources. Ensuite, vous pouvez installer deux nĆuds avec 16 Go de mĂ©moire ou quatre nĆuds avec 8 Go de mĂ©moire, deux processeurs quad-core ou quatre dual-core.
Voici deux maniÚres possibles de créer un cluster :

Les deux options produisent un cluster de mĂȘme capacitĂ©, mais la configuration infĂ©rieure comporte quatre nĆuds plus petits et la configuration supĂ©rieure comporte deux nĆuds plus grands.
Quelle option est la meilleure ?
Pour répondre à cette question, examinons les avantages des deux options. Nous les avons résumés dans un tableau.
Plusieurs gros nĆuds
Beaucoup de petits nĆuds
Gestion du cluster plus facile (s'il est sur site)
Mise à l'échelle automatique fluide
Moins cher (si sur site)
Le prix est un peu différent (dans le cloud)
Peut exécuter des applications gourmandes en ressources
Réplication complÚte
Les ressources sont utilisées plus efficacement (moins de surcharge sur les démons systÚme
Tolérance aux pannes de cluster plus élevée
Veuillez noter que nous ne parlons que de nĆuds de travail. Choisir le nombre et la taille des nĆuds principaux est un tout autre sujet.
Discutons donc de chaque point du tableau plus en détail.
PremiĂšre option : plusieurs gros nĆuds
L'option la plus extrĂȘme consiste Ă utiliser un seul nĆud de travail pour toute la capacitĂ© du cluster. Dans l'exemple ci-dessus, il s'agirait d'un seul nĆud de travail dotĂ© de 16 cĆurs de processeur et de 16 Go de RAM.
Avantages
Plus n°1. Une gestion plus simple
Il est plus facile de gĂ©rer quelques machines que toute une flotte. Il est plus rapide de dĂ©ployer des mises Ă jour et des correctifs, et plus facile Ă synchroniser. Le nombre dâĂ©checs en chiffres absolus est Ă©galement moindre.
Veuillez noter que tout ce qui précÚde s'applique à votre matériel, à vos serveurs et non aux instances cloud.
La situation est diffĂ©rente dans le cloud. LĂ , la gestion est assurĂ©e par le fournisseur de services cloud. Ainsi, gĂ©rer dix nĆuds dans le cloud nâest pas trĂšs diffĂ©rent de gĂ©rer un seul nĆud.
Routage du trafic et rĂ©partition de la charge entre les pods dans le cloud : le trafic provenant d'Internet est envoyĂ© Ă l'Ă©quilibreur de charge principal, qui transfĂšre le trafic vers le port de l'un des nĆuds (le service NodePort dĂ©finit le port dans la plage 30000-32767 dans chaque nĆud du cluster). Les rĂšgles dĂ©finies par kube-proxy redirigent le trafic du nĆud vers le pod. Voici Ă quoi cela ressemble pour dix pods sur deux nĆuds :

Avantage n°2 : Moins de coĂ»t par nĆud
Une voiture puissante coĂ»te plus cher, mais la hausse des prix nâest pas forcĂ©ment linĂ©aire. En dâautres termes, un serveur Ă dix cĆurs avec 10 Go de mĂ©moire est gĂ©nĂ©ralement moins cher que dix serveurs monocĆur avec la mĂȘme quantitĂ© de mĂ©moire.
Mais notez que cette rÚgle ne fonctionne généralement pas dans les services cloud. Dans les systÚmes tarifaires actuels de tous les principaux fournisseurs de cloud, les prix augmentent linéairement avec la capacité.
Ainsi, dans le cloud, vous ne pouvez généralement pas économiser sur des serveurs plus puissants.
Avantage n°3 : Vous pouvez exécuter des applications gourmandes en ressources
Certaines applications nĂ©cessitent des serveurs puissants dans un cluster. Par exemple, si un systĂšme de machine learning nĂ©cessite 8 Go de mĂ©moire, vous ne pourrez pas l'exĂ©cuter sur des nĆuds de 1 Go, mais uniquement avec au moins un nĆud de travail de grande taille.
Moins
InconvĂ©nient n°1. De nombreux pods par nĆud
Si la mĂȘme tĂąche est effectuĂ©e sur moins de nĆuds, alors chacun dâeux aura naturellement plus de pods.
Cela pourrait poser un problĂšme.
La raison en est que chaque module introduit une surcharge dans le runtime du conteneur (par exemple Docker), ainsi que dans le kubelet et le cAdvisor.
Par exemple, un kubelet sonde rĂ©guliĂšrement tous les conteneurs d'un nĆud pour vĂ©rifier leur capacitĂ© de survie : plus il y a de conteneurs, plus le kubelet doit effectuer du travail.
CAdvisor collecte des statistiques d'utilisation des ressources pour tous les conteneurs d'un nĆud, et kubelet interroge rĂ©guliĂšrement ces informations et les fournit via une API. Encore une fois, plus de conteneurs signifie plus de travail pour cAdvisor et kubelet.
Si le nombre de modules augmente, cela peut ralentir le systĂšme et mĂȘme nuire Ă sa fiabilitĂ©.

Dans le dĂ©pĂŽt Kubernetes, certains que les nĆuds sautent entre les statuts PrĂȘt/NotReady car les vĂ©rifications kubelet rĂ©guliĂšres de tous les conteneurs sur un nĆud prennent trop de temps.
Pour cette raison Kubernetes . En fonction des performances du nĆud, vous pouvez exĂ©cuter plus de pods par nĆud, mais il est difficile de prĂ©dire s'il y aura des problĂšmes ou si tout fonctionnera correctement. Cela vaut la peine de tester le travail Ă l'avance.
Inconvénient n°2. Limitation de la réplication
Trop peu de nĆuds limitent lâĂ©tendue effective de la rĂ©plication des applications. Par exemple, si vous disposez d'une application haute disponibilitĂ© avec cinq rĂ©plicas mais seulement deux nĆuds, le degrĂ© de rĂ©plication effectif de l'application est rĂ©duit Ă deux.
Cinq rĂ©plicas ne peuvent ĂȘtre distribuĂ©s que sur deux nĆuds, et si l'un d'eux Ă©choue, il supprime plusieurs rĂ©plicas Ă la fois.
Si vous disposez de cinq nĆuds ou plus, chaque rĂ©plique s'exĂ©cutera sur un nĆud distinct et la dĂ©faillance d'un nĆud supprimera au plus une rĂ©plique.
Ainsi, les exigences de haute disponibilitĂ© peuvent nĂ©cessiter un certain nombre minimum de nĆuds dans le cluster.
Inconvénient n°3. Pires conséquences de l'échec
Avec un petit nombre de nĆuds, chaque panne a des consĂ©quences plus graves. Par exemple, si vous n'avez que deux nĆuds et que l'un d'eux tombe en panne, la moitiĂ© de vos modules disparaissent immĂ©diatement.
Bien entendu, Kubernetes migrera la charge de travail du nĆud dĂ©faillant vers dâautres. Mais sâil y en a peu, il se peut quâil nây ait pas suffisamment de capacitĂ© libre. Par consĂ©quent, certaines de vos applications seront indisponibles jusqu'Ă ce que vous ayez affichĂ© le nĆud dĂ©faillant.
Ainsi, plus il y a de nĆuds, moins lâimpact des pannes matĂ©rielles est important.
Inconvénient n°4 : plus d'étapes de mise à l'échelle automatique
Kubernetes dispose d'un systĂšme de mise Ă l'Ă©chelle automatique de cluster pour l'infrastructure cloud, qui vous permet d'ajouter ou de supprimer automatiquement des nĆuds en fonction de vos besoins actuels. Avec des nĆuds plus gros, la mise Ă lâĂ©chelle automatique devient plus abrupte et maladroite. Par exemple, sur deux nĆuds, l'ajout d'un nĆud supplĂ©mentaire augmentera immĂ©diatement la capacitĂ© du cluster de 50 %. Et vous devrez payer pour ces ressources, mĂȘme si vous nâen avez pas besoin.
Ainsi, si vous envisagez d'utiliser la mise Ă l'Ă©chelle automatique du cluster, plus les nĆuds sont petits, plus vous obtiendrez une mise Ă l'Ă©chelle flexible et rentable.
Examinons maintenant les avantages et les inconvĂ©nients d'un grand nombre de petits nĆuds.
DeuxiĂšme option : de nombreux petits nĆuds
Les avantages de cette approche proviennent essentiellement des inconvĂ©nients de lâoption inverse avec plusieurs gros nĆuds.
Avantages
Avantage n°1 : Moins dâimpact de lâĂ©chec
Plus il y a de nĆuds, moins il y a de pods sur chaque nĆud. Par exemple, si vous disposez de cent modules pour dix nĆuds, chaque nĆud aura en moyenne dix modules.
De cette façon, si lâun des nĆuds tombe en panne, vous ne perdez que 10 % de la charge de travail. Il y a de fortes chances que seul un petit nombre de rĂ©plicas soient concernĂ©s et que lâapplication globale reste opĂ©rationnelle.
De plus, les nĆuds restants disposeront probablement de suffisamment de ressources libres pour gĂ©rer la charge de travail du nĆud dĂ©faillant, de sorte que Kubernetes puisse librement replanifier les pods et vos applications reviendront Ă un Ă©tat fonctionnel relativement rapidement.
Avantage n°2 : bonne réplication
S'il y a suffisamment de nĆuds, le planificateur Kubernetes peut attribuer diffĂ©rents nĆuds Ă toutes les rĂ©pliques. De cette façon, si un nĆud tombe en panne, une seule rĂ©plique sera affectĂ©e et l'application restera disponible.
Moins
Inconvénient n°1. Difficile à contrÎler
Un grand nombre de nĆuds est plus difficile Ă gĂ©rer. Par exemple, chaque nĆud Kubernetes doit communiquer avec tous les autres, c'est-Ă -dire que le nombre de connexions augmente quadratiquement et que toutes ces connexions doivent ĂȘtre suivies.
Le contrĂŽleur de nĆuds dans Kubernetes Controller Manager parcourt rĂ©guliĂšrement tous les nĆuds du cluster pour vĂ©rifier l'Ă©tat : plus il y a de nĆuds, plus la charge sur le contrĂŽleur est importante.
La charge sur la base de données etcd augmente également - chaque appel kubelet et kube-proxy pour etcd (via l'API), auquel etcd doit diffuser les mises à jour des objets.
En gĂ©nĂ©ral, chaque nĆud travailleur impose une charge supplĂ©mentaire sur les composants systĂšme des nĆuds maĂźtres.

Kubernetes prend officiellement en charge les clusters avec . Or, en pratique, il existe dĂ©jĂ 500 nĆuds .
Pour gĂ©rer un grand nombre de nĆuds de travail, vous devez choisir des nĆuds maĂźtres plus puissants. Par exemple, kube-up la taille de machine virtuelle correcte pour le nĆud maĂźtre en fonction du nombre de nĆuds de travail. Autrement dit, plus il y a de nĆuds de travail, plus les nĆuds maĂźtres doivent ĂȘtre productifs.
Pour rĂ©soudre ces problĂšmes spĂ©cifiques, il existe des dĂ©veloppements spĂ©ciaux, tels que . Ce systĂšme vous permet de contourner les restrictions et de crĂ©er des clusters avec un grand nombre de nĆuds de travail.
Inconvénient n°2 : Plus de frais généraux.
Sur chaque nĆud de travail, Kubernetes exĂ©cute un ensemble de dĂ©mons systĂšme : ceux-ci incluent le runtime du conteneur (tel que Docker), kube-proxy et kubelet, y compris cAdvisor. Ensemble, ils consomment une certaine quantitĂ© fixe de ressources.
Si vous disposez de nombreux petits nĆuds, la proportion de cette surcharge sur chaque nĆud est plus importante. Par exemple, imaginez que tous les dĂ©mons systĂšme sur un seul nĆud utilisent ensemble 0,1 cĆurs de processeur et 0,1 Go de mĂ©moire. Si vous disposez d'un nĆud Ă dix cĆurs avec 10 Go de mĂ©moire, les dĂ©mons consomment 1 % de la capacitĂ© du cluster. En revanche, sur dix nĆuds monocĆur dotĂ©s de 1 Go de mĂ©moire, les dĂ©mons prendront 10 % de la capacitĂ© du cluster.
Ainsi, moins il y a de nĆuds, plus lâinfrastructure est utilisĂ©e efficacement.
Inconvénient n°3. Utilisation inefficace des ressources
Sur les petits nĆuds, il se peut que les morceaux de ressources restants soient trop petits pour qu'on puisse leur attribuer une charge de travail, et qu'ils restent donc inutilisĂ©s.
Par exemple, chaque pod nĂ©cessite 0,75 Go de mĂ©moire. Si vous disposez de dix nĆuds, chacun avec 1 Go de mĂ©moire, vous pouvez exĂ©cuter dix pods, laissant Ă chaque nĆud 0,25 Go de mĂ©moire inutilisĂ©e.
Cela signifie que 25 % de la mémoire totale du cluster est gaspillée.
Sur un gros nĆud dotĂ© de 10 Go de mĂ©moire, vous pouvez exĂ©cuter 13 de ces modules - et il n'y aura qu'un seul fragment inutilisĂ© de 0,25 Go.
Dans ce cas, seulement 2,5 % de la mémoire est gaspillée.
Ainsi, les ressources sont utilisĂ©es de maniĂšre plus optimale sur les nĆuds plus grands.
Plusieurs gros nĆuds ou plusieurs petits nĆuds ?
Alors, quel est le meilleur choix : quelques gros nĆuds dans un cluster ou plusieurs petits nĆuds ? Comme toujours, il nây a pas de rĂ©ponse claire. Tout dĂ©pend du type d'application.
Par exemple, si une application nĂ©cessite 10 Go de mĂ©moire, des nĆuds plus grands constituent un choix Ă©vident. Et si l'application nĂ©cessite une rĂ©plication dĂ©cuplĂ©e pour une haute disponibilitĂ©, cela ne vaut guĂšre la peine de prendre le risque de placer des rĂ©pliques sur seulement deux nĆuds : il doit y avoir un minimum de dix nĆuds dans le cluster.
Dans les situations intermĂ©diaires, faites un choix en fonction des avantages et des inconvĂ©nients de chaque option. Peut-ĂȘtre que certains arguments sont plus pertinents que dâautres Ă votre situation.
Et il n'est pas du tout nĂ©cessaire que tous les nĆuds aient la mĂȘme taille. Rien ne vous empĂȘche d'expĂ©rimenter d'abord avec des nĆuds de mĂȘme taille, puis de leur ajouter des nĆuds de taille diffĂ©rente, en les combinant dans un cluster. Les nĆuds de travail dans un cluster Kubernetes peuvent ĂȘtre complĂštement hĂ©tĂ©rogĂšnes. Vous pouvez donc essayer de combiner les avantages des deux approches.
Il nây a pas de recette unique, chaque situation a ses propres nuances et seule la production montrera la vĂ©ritĂ©.
Traduction préparée par l'équipe de la plateforme cloud .
En savoir plus sur Kubernetes : .
Source: habr.com
