Création facile d'opérateurs Kubernetes avec shell-operator: progression du projet en un an





Les opérateurs Kubernetes sont un mécanisme pratique pour étendre les capacités de cette plate-forme de conteneurs, qui a à juste titre gagné une large reconnaissance parmi l'environnement des ingénieurs d'exploitation et de leurs sympathisants. Nous avons parlé de la façon dont ils sont organisés et fonctionnent dans le 2017 déjà lointain. Et en avril de l'année derniÚre, nous avons présenté le projet d' opérateur shell open source , qui a grandement simplifié le processus de création des opérateurs Kubernetes.



Pour cela, un framework a été développé qui permet d'exécuter des scripts arbitraires (en Bash, Python, etc.) en cas de certains événements survenant dans le cluster K8s.



Par le passĂ©, l'opĂ©rateur shell a acquis sa base d'utilisateurs (voir dĂ©tails Ă  la fin de l'article) et, bien sĂ»r, de nouvelles fonctionnalitĂ©s. A l'occasion de la sortie rĂ©centev1.0.0-beta.11 (Ă  propos du statut bĂȘta, voir ci-dessous) nous avons dĂ©cidĂ© de parler de ce Ă  quoi le projet est arrivĂ© au cours de son existence, depuis l'annonce de la premiĂšre version publique.



À propos de l'appareil et de son objectif



Mais commençons par une brĂšve explication du fonctionnement de l'opĂ©rateur shell et pourquoi, en principe, il peut ĂȘtre nĂ©cessaire.



L'opérateur Shell s'exécute dans le pod du cluster Kubernetes. Il y est présenté comme:



  • Go binaire qui s'abonne aux Ă©vĂ©nements dans l'API K8s et lance des hooks (leur donnant des dĂ©tails sur ce qui s'est passĂ©);
  • un ensemble de hooks, dont chacun est un script Bash, un script Python ou tout autre fichier exĂ©cutable.


Crochets:



  • ils dĂ©terminent eux-mĂȘmes les Ă©vĂ©nements et les objets dont ils ont besoin;
  • effectuer les actions nĂ©cessaires en cas de survenance de ces Ă©vĂ©nements dans les K8.


Ainsi, l'opérateur shell est une couche entre les événements de l'API Kubernetes et les scripts pour les traiter.



image



Pourquoi l'opérateur shell a-t-il été créé? Les opérateurs sont la norme pour «faire ce qu'il faut» dans Kubernetes, mais les développer complÚtement (dans Go en utilisant le SDK approprié ) n'est pas facile. La présence d'un cadre aussi simple que l'opérateur shell abaisse considérablement le seuil d'entrée dans cette zone, vous permettant de résoudre rapidement et efficacement de petits problÚmes opérationnels * au sein du cluster. Et, tout aussi important, faites-le de la bonne maniÚre.



De quelles tĂąches parle-t-on? Des exemples prĂȘts Ă  utiliser l'opĂ©rateur shell peuvent ĂȘtre trouvĂ©s dans le rĂ©fĂ©rentiel du projet . Chez nous, chez Flant, nous l'utilisons comme bibliothĂšque(oui, c'Ă©tait aussi possible!) . Il est devenu la base de l' opĂ©rateur addon , qui gĂšre des composants supplĂ©mentaires dans Kubernetes.



NB : L'annonce de ce projet Open Source (addon-opĂ©rateur) peut ĂȘtre trouvĂ©e ici . Et dans le rapport " Expanding and Supplementing Kubernetes ", nous avons parlĂ© en dĂ©tail des raisons de son apparition, de la relation avec l'opĂ©rateur shell et des principes de fonctionnement.



Passons maintenant aux principaux changements apportés à l'opérateur shell au cours de l'année écoulée.



Innovations majeures



Dans les premiÚres versions de l'opérateur shell, un seul objet était disponible pour le hook - celui associé à l'événement du cluster. L'évolution des hooks utilisés dans l'addon-operator a conduit le hook à s'abonner à un changement d'objet, mais à appeler kubectlpour obtenir une liste à jour des autres objets. Pour supprimer les appels inutiles kubectlet ainsi accélérer le travail des hooks, plusieurs possibilités ont été implémentées pour accéder aux listes d'objets actuelles:



  • Synchronisation + mode Ă©vĂ©nement, lorsque le hook au dĂ©but reçoit une liste d'objets rĂ©els, puis ne fonctionne qu'avec un seul objet. Ce mode est activĂ© par dĂ©faut - nous pouvons dire que le rĂ©sultat est un analogue de la boucle de rĂ©conciliation de operator-sdk.
  • snapshot', . (Snapshot’ Kubernetes, .)
  • snapshot'. , , , .
  • Il est Ă©galement devenu possible de surveiller la ressource , mais pas de rĂ©agir Ă  ses changements, c'est-Ă -dire "Accumuler un instantanĂ©". Par exemple, un hook peut rĂ©agir aux modifications de CustomResource et toujours recevoir l'objet ConfigMap rĂ©el sans appel supplĂ©mentaire kubectl. (Voir les drapeaux executeHookOnSynchronizationet pour plus de dĂ©tails executeHookOnEvent.)


Autres innovations importantes:



  • GrĂące Ă  la transition vers l'utilisation du client dynamique Kubernetes dans l'opĂ©rateur shell, il est devenu possible de s'abonner Ă  n'importe quel kind(type de ressource dans l'API Kubernetes), y compris les ressources personnalisĂ©es.
  • (. queue). endpoints.
  • .
  • « », namespace’ .
  • scraping' Prometheus'. .
  • , shell.




  • YAML- ( JSON).
  • JSON logrus (. LOG_TYPE ).
  • listen-address hostNetwork: true.
  • rate limit (qps, burst) Kubernetes API.
  • kube-server Kubernetes API.
  • .
  • jqFilter libjq-go, jq.
  • zombie reaper, SIGCHLD -, Bash-. — tini.
  • Diverses simplifications ont Ă©tĂ© implĂ©mentĂ©es pour connecter l'opĂ©rateur shell en tant que bibliothĂšque.
  • Version mise Ă  jour kubectl(de 1.13 Ă  1.17.4) et fait un assemblage basĂ© sur alpine-3.11.


Statut et plans



Le projet d'opĂ©rateur shell est toujours officiellement en version bĂȘta . MalgrĂ© cela, comme indiquĂ© ci-dessus, nous l'utilisons de maniĂšre trĂšs intensive comme base de l' opĂ©rateur addon - un outil constamment utilisĂ© dans de nombreux clusters K8 (plus de 100).



Pour une version stable de l'opérateur shell en tant que projet public, nous prévoyons (au moins):



  • ajouter le test e2e ( # 63 ),
  • implĂ©menter une construction multi-architecturale ( # 184 ),
  • mettre Ă  jour client-go vers la version 0.18.0, implĂ©menter contextet enfin gĂ©rer la mise en cache d'objets dans client-go ( # 188 ).


Reconnaissance communautaire



Au fil des ans, nous avons constatĂ© un intĂ©rĂȘt communautaire clair pour l'opĂ©rateur shell:



  • Le projet a Ă©tĂ© mentionnĂ© non seulement dans diverses listes d'utilitaires utiles pour Kubernetes ( awesome-kubernetes , Cloud Zone ), mais Ă©galement lors de webinaires spĂ©cialisĂ©s ( Weaveworks ), de rencontres ( K8s Meetup Tokyo ) et mĂȘme dans un livre .
  • ( — K8s- KubeSphere). GitHub , shell-operator ( ).
  • : , .
  • GitHub 600+ — , ! ;-)


Nous sommes également heureux d'annoncer que lors de la prochaine conférence virtuelle KubeCon + CloudNativeCon Europe 2020 , qui se tiendra en août, il y aura notre rapport sur l'opérateur shell. Les détails à ce sujet sont sur le site Web de l'événement .



Merci de l'intĂ©rĂȘt que vous portez Ă  l'opĂ©rateur shell! Si vous avez des questions, posez-les ici dans les commentaires ou dans le tg-channel @kubeoperator .



PS



Lisez aussi sur notre blog:






All Articles