NƓuds de travail Kubernetes : plusieurs petits ou plusieurs grands ?

NƓuds de travail Kubernetes : plusieurs petits ou plusieurs grands ?
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. Daniel Weibel, ingénieur logiciel et enseignant du projet pédagogique Learnk8s dans la traduction de la commande Kubernetes aaS de Mail.ru.

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 :

NƓuds de travail Kubernetes : plusieurs petits ou plusieurs grands ?
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 effectuĂ© automatiquement: 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 :

NƓuds de travail Kubernetes : plusieurs petits ou plusieurs grands ?
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Ă©.

NƓuds de travail Kubernetes : plusieurs petits ou plusieurs grands ?
Dans le dĂ©pĂŽt Kubernetes, certains plaintque 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 recommande de ne pas placer plus de 110 pods par nƓud. 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 observateur 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.

NƓuds de travail Kubernetes : plusieurs petits ou plusieurs grands ?
Kubernetes prend officiellement en charge les clusters avec nombre de nƓuds jusqu'Ă  5000. Or, en pratique, il existe dĂ©jĂ  500 nƓuds peut causer des problĂšmes non triviaux.

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 installe automatiquement 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 Kubelet Virtuel. 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 Solutions Cloud Mail.ru.

En savoir plus sur Kubernetes : 25 outils utiles pour gĂ©rer et dĂ©ployer des clusters.

Source: habr.com

Achetez un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Achetez un hĂ©bergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster