Préparer un cluster Kubernetes est-il simple et pratique ? Nous annonçons l'addon-operator

Préparer un cluster Kubernetes est-il simple et pratique ? Nous annonçons l'addon-operator

AprĂšs shell-operator nous vous proposons son grand frĂšre — addon-operator. Il s'agit d'un projet Open Source utilisĂ© pour installer dans le cluster Kubernetes des composants systĂšme qui peuvent ĂȘtre appelĂ©s collectivement — des complĂ©ments.

Pourquoi avoir des compléments du tout ?

Il n'est un secret pour personne que Kubernetes n'est pas un produit tout-en-un prĂȘt Ă  l'emploi, et la construction d'un cluster « mature » nĂ©cessite divers complĂ©ments. L'addon-operator vous aidera Ă  installer, configurer et maintenir ces complĂ©ments Ă  jour.

La nĂ©cessitĂ© de composants supplĂ©mentaires dans le cluster a Ă©tĂ© rĂ©vĂ©lĂ©e dans le rapport de nos collĂšgues driusha. En rĂ©sumĂ©, la situation actuelle avec Kubernetes est telle que pour une installation simple 'pour jouer', on peut se contenter des composants de base, pour les dĂ©veloppeurs et les tests, on peut ajouter Ingress, mais pour une installation complĂšte, que l'on peut qualifier de 'votre production est prĂȘte', il faut ajouter une dizaine de diffĂ©rents complĂ©ments : quelque chose pour la surveillance, quelque chose pour les logs, ne pas oublier Ingress et cert-manager, dĂ©finir des groupes de nƓuds, ajouter des politiques rĂ©seau, assaisonner avec des paramĂštres sysctl et un pod autoscaler


Préparer un cluster Kubernetes est-il simple et pratique ? Nous annonçons l'addon-operator

Quelle est la spécificité de leur utilisation ?

Comme le montre la pratique, l'installation seule ne suffit pas. Pour travailler confortablement avec le cluster, il faudra mettre Ă  jour les complĂ©ments, les dĂ©sactiver (les retirer du cluster), et certains devront ĂȘtre testĂ©s avant d'ĂȘtre installĂ©s dans le cluster de production.

Alors, peut-ĂȘtre qu'Ansible suffira ici ? Peut-ĂȘtre. Mais des complĂ©ments complets, en gĂ©nĂ©ral, ne fonctionnent pas sans configurations. Ces configurations peuvent varier en fonction du type de cluster (aws, gce, azure, bare-metal, do, 
). Certaines configurations ne peuvent pas ĂȘtre dĂ©finies Ă  l'avance — elles doivent ĂȘtre extraites du cluster. Et le cluster n'est pas statique : pour certaines configurations, il faudra surveiller les changements. Et lĂ , Ansible ne suffit pas : il faut un programme qui vit dans le cluster, c'est-Ă -dire un Kubernetes Operator.

Ceux qui ont essayĂ© en pratique shell-operator, diront que les tĂąches d'installation et de mise Ă  jour des complĂ©ments et de suivi des configurations peuvent tout Ă  fait ĂȘtre rĂ©solues Ă  l'aide de hooks pour le shell-operator. On peut Ă©crire un script qui fera un conditionnel kubectl apply et surveiller, par exemple, le ConfigMap, oĂč seront stockĂ©es les configurations. C'est Ă  peu prĂšs ce qui est rĂ©alisĂ© dans l'addon-operator.

Comment cela est-il organisé dans l'addon-operator ?

En créant une nouvelle solution, nous avons basé notre approche sur les principes suivants :

  • L'installateur de modules doit soutenir la templatisation et la configuration dĂ©clarative. Nous n'utilisons pas de scripts magiques qui installent des modules. L'addon-operator utilise Helm pour l'installation des modules. Pour installer, il faut crĂ©er un chart et spĂ©cifier les valeurs qui seront utilisĂ©es pour la configuration.
  • Les paramĂštres peuvent ĂȘtre gĂ©nĂ©rĂ©s lors de l'installation, ils peuvent ĂȘtre obtenus depuis le cluster, ou bien recevoir des mises Ă  jour, en surveillant les ressources du cluster. Ces opĂ©rations peuvent ĂȘtre rĂ©alisĂ©es Ă  l'aide de hooks.
  • Les paramĂštres peuvent ĂȘtre stockĂ©es dans le cluster. Pour stocker les configurations dans le cluster, un ConfigMap/addon-operator est créé et l'addon-operator suit les changements de ce ConfigMap. L'addon-operator donne accĂšs aux hooks aux paramĂštres par le biais d'accords simples.
  • Le module dĂ©pend des paramĂštres. Si les paramĂštres changent, l'addon-operator dĂ©ploie le chart Helm avec de nouvelles valeurs. La combinaison du chart Helm, des valeurs pour celui-ci et des hooks est appelĂ©e un module (voir ci-dessous pour plus de dĂ©tails).
  • Mise en scĂšne. Pas de scripts de publication magiques. Le mĂ©canisme de mise Ă  jour est similaire Ă  celui d'une application classique — assembler les modules et l'addon-operator dans une image, les taguer et les dĂ©ployer.
  • ContrĂŽle des rĂ©sultats. L'addon-operator peut fournir des mĂ©triques pour Prometheus.

Qu'est-ce qu'un module dans l'addon-operator ?

Un module peut ĂȘtre considĂ©rĂ© comme tout ce qui ajoute de nouvelles fonctionnalitĂ©s au cluster. Par exemple, l'installation de Ingress est un excellent exemple de module. Cela peut ĂȘtre n'importe quel opĂ©rateur ou contrĂŽleur avec son CRD : prometheus-operator, cert-manager, kube-controller-manager, etc. Ou quelque chose de petit mais facilitant l'exploitation — par exemple, un copieur de secrets qui copie les secrets de registry dans de nouveaux espaces de noms, ou un rĂ©glage de sysctl qui configure les paramĂštres sysctl sur de nouveaux nƓuds.

Pour la réalisation des modules, l'addon-operator fournit plusieurs concepts :

  • Helm-chart est utilisĂ© pour installer divers logiciels dans le cluster — par exemple, Prometheus, Grafana, nginx-ingress. Si le composant souhaitĂ© dispose d'un Helm-chart, il sera trĂšs simple de l'installer via l'addon-operator.
  • Stockage des valeurs. Les Helm-charts ont gĂ©nĂ©ralement de nombreux paramĂštres diffĂ©rents qui peuvent Ă©voluer avec le temps. L'addon-operator prend en charge le stockage de ces paramĂštres et sait surveiller leurs changements afin de rĂ©installer le Helm-chart avec de nouvelles valeurs.
  • Hooks — ce sont des fichiers exĂ©cutables que l'Addon-operator lance en rĂ©ponse Ă  des Ă©vĂ©nements et qui accĂšdent au stockage des valeurs. Un hook peut surveiller les changements dans le cluster et mettre Ă  jour les valeurs dans le stockage des valeurs. C'est-Ă -dire qu'avec les hooks, on peut effectuer une dĂ©couverte pour collecter des valeurs du cluster au dĂ©marrage ou selon un calendrier, ou opĂ©rer une dĂ©couverte continue en collectant des valeurs du cluster en fonction des changements dans celui-ci.
  • Module — c'est une combinaison d'un chart Helm, d'un stockage des valeurs et de hooks. Les modules peuvent ĂȘtre activĂ©s et dĂ©sactivĂ©s. La dĂ©sactivation d'un module supprime tous les dĂ©ploiements du chart Helm. Les modules peuvent s'inclure dynamiquement, par exemple si tous les modules nĂ©cessaires sont activĂ©s ou si la dĂ©couverte dans les hooks a trouvĂ© les paramĂštres requis — cela se fait Ă  l'aide d'un script « enabled » auxiliaire.
  • Hooks globaux. Ce sont des hooks « autonomes », qui ne sont pas inclus dans les modules et ont accĂšs au stockage global des valeurs, dont les valeurs sont accessibles Ă  tous les hooks des modules.

Comment ces parties fonctionnent-elles ensemble ? Regardons l'image dans la documentation :

Préparer un cluster Kubernetes est-il simple et pratique ? Nous annonçons l'addon-operator

Il y a deux scénarios de fonctionnement :

  1. Le hook global se dĂ©clenche par un Ă©vĂ©nement — par exemple, lors d'un changement de ressource dans le cluster. Ce hook traite les modifications et enregistre les nouvelles valeurs dans le stockage global des valeurs. L'Addon-operator remarque que le stockage global a changĂ© et lance tous les modules. Chaque module dĂ©termine Ă  l'aide de ses hooks s'il doit s'activer et met Ă  jour son stockage des valeurs. Si un module est activĂ©, l'Addon-operator lance l'installation du chart Helm. Le chart Helm a alors accĂšs aux valeurs du stockage du module et du stockage global.
  2. Le second scénario est plus simple : le hook du module se déclenche par un événement, modifie les valeurs dans le stockage des valeurs du module. L'Addon-operator le remarque et lance le chart Helm avec les valeurs mises à jour.

Un addon peut ĂȘtre implĂ©mentĂ© sous la forme d'un seul hook, ou en tant que chart Helm, ou mĂȘme comme plusieurs modules dĂ©pendants — cela dĂ©pend de la complexitĂ© du composant Ă  installer dans le cluster et du niveau de flexibilitĂ© des rĂ©glages requis. Par exemple, dans le dĂ©pĂŽt (/examples) il y a un addon sysctl-tuner, qui est implĂ©mentĂ© Ă  la fois sous la forme d'un simple module avec un hook et un chart Helm, ainsi qu'en utilisant un stockage des valeurs, ce qui permet d'ajouter des rĂ©glages par l'Ă©dition de ConfigMap.

Distribution des mises Ă  jour

Quelques mots sur l'organisation des mises Ă  jour des composants que met en place l'Addon-operator.

Pour lancer l'Addon-operator dans le cluster, il faut compiler une image avec les ajouts sous forme de fichiers hooks et de charts Helm, ajouter le fichier binaire addon-operator et tout ce dont vous avez besoin pour les hooks : bash, kubectl, jq, python etc. Ensuite, cette image peut ĂȘtre dĂ©ployĂ©e dans le cluster comme une application ordinaire et il est fort probable que vous souhaitiez organiser un schĂ©ma de versionnement. Si vous avez peu de clusters, la mĂȘme approche que pour les applications peut convenir : nouvelle version, nouvelle Ă©tiquette, passer en revue tous les clusters et mettre Ă  jour l'image dans les Pods. Cependant, dans le cas d'un dĂ©ploiement sur un nombre significatif de clusters, le concept de mise Ă  jour automatique Ă  partir d'un canal est plus adaptĂ©.

Nous l'organisons de cette maniĂšre :

  • Un canal est essentiellement un identifiant que vous pouvez dĂ©finir comme bon vous semble (par exemple, dev/stage/ea/stable).
  • Le nom du canal est l'Ă©tiquette de l'image. Lorsque des mises Ă  jour doivent ĂȘtre dĂ©ployĂ©es dans le canal, une nouvelle image est construite et Ă©tiquetĂ©e avec le nom du canal.
  • Lorsque qu'une nouvelle image apparaĂźt dans le registre, l'Addon-operator redĂ©marre et se lance avec la nouvelle image.

Ce n'est pas la meilleure pratique, comme indiqué dans la documentation Kubernetes. Cela n'est pas recommandé, mais il s'agit de une application ordinaire qui vit dans un seul cluster. Dans le cas de l'Addon-operator, l'application consiste en de nombreux Deployments répartis sur différents clusters, et la mise à jour automatique est d'une grande aide et facilite la vie.

Les canaux aident aussi dans les tests: s'il y a un cluster de test, vous pouvez le configurer sur un canal ) — une unitĂ© d'organisation du pipeline, contenant 1+ tĂąche, et tester les mises Ă  jour avant de les dĂ©ployer sur les canaux ea et stable. Si une erreur se produit avec le cluster sur le canal ea , vous pouvez le basculer sur stable, pendant que l'enquĂȘte sur le problĂšme avec ce cluster est en cours. Si le cluster est retirĂ© de la prise en charge active, il est basculĂ© sur son canal « figĂ© » — par exemple, freeze-2019-03-20.

En plus des mises Ă  jour des hooks et des charts Helm, il peut ĂȘtre nĂ©cessaire de mettre Ă  jour un composant tiers. Par exemple, si vous avez remarquĂ© un bug dans un supposĂ© node-exporter et mĂȘme trouvĂ© comment le patcher. Puis vous ouvrez un PR et attendez la nouvelle version pour passer en revue tous les clusters et augmenter la version de l'image. Pour ne pas attendre indĂ©finiment, vous pouvez compiler votre propre node-exporter et passer Ă  celui-ci en attendant l'acceptation du PR.

En fait, cela peut ĂȘtre fait sans l'Addon-operator, mais avec l'Addon-operator, le module pour l'installation de node-exporter sera visible dans un seul dĂ©pĂŽt, le Dockerfile pour construire votre image peut Ă©galement y ĂȘtre maintenu, ce qui permet Ă  tous les participants de mieux comprendre ce qui se passe
 Et si plusieurs clusters sont en place, il devient plus facile de tester votre PR ainsi que de dĂ©ployer une nouvelle version !

Cette organisation de mise Ă  jour des composants fonctionne avec succĂšs chez nous, mais il est Ă©galement possible de mettre en Ɠuvre tout autre schĂ©ma appropriĂ© — aprĂšs tout dans ce cas, l'Addon-operator est un simple fichier binaire.

Conclusion

Les principes mis en Ɠuvre dans l'Addon-operator permettent de construire un processus transparent de crĂ©ation, de test, d'installation et de mise Ă  jour des addons dans le cluster, similaire aux processus de dĂ©veloppement d'applications ordinaires.

Les addons pour l'Addon-operator au format de modules (Helm-chart + hooks) peuvent ĂȘtre rendus largement accessibles. Nous, la sociĂ©tĂ© Flant, prĂ©voyons de publier au cours de l'Ă©tĂ© nos travaux sous forme de tels addons. Rejoignez le dĂ©veloppement sur GitHub (shell-operator, addon-operator), essayez de crĂ©er votre propre addon basĂ© sur des exemples et documentation, attendez les nouvelles sur Habr et sur notre chaĂźne YouTube!

P.S.

Lisez aussi dans notre blog :

Source : habr.com

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