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.
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
kubectl
pour obtenir une liste Ă jour des autres objets. Pour supprimer les appels inutiles kubectl
et 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 drapeauxexecuteHookOnSynchronization
et pour plus de détailsexecuteHookOnEvent
.)
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
context
et 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: