Einfache Erstellung von Kubernetes-Operatoren mit Shell-Operator: Projektfortschritt in einem Jahr





Kubernetes-Betreiber sind ein praktischer Mechanismus zur Erweiterung der Fähigkeiten dieser Containerplattform, die in der Umgebung von Betriebsingenieuren und ihren Sympathisanten zu Recht breite Anerkennung gefunden hat. Wir haben darüber gesprochen, wie sie im bereits fernen 2017 angeordnet sind und funktionieren . Und im April letzten Jahres haben wir das Open-Source- Shell-Operator- Projekt vorgestellt , das den Prozess der Erstellung von Kubernetes-Operatoren erheblich vereinfacht hat.



Zu diesem Zweck wurde ein Framework entwickelt, mit dem Sie beliebige Skripte (in Bash, Python usw.) ausführen können, wenn bestimmte Ereignisse im K8s-Cluster auftreten.



In der Vergangenheit hat der Shell-Operator seine Benutzerbasis (siehe Details am Ende des Artikels) und natürlich neue Funktionen erworben. Anlässlich der jüngsten Veröffentlichungv1.0.0-beta.11 (zum Beta-Status siehe unten) Wir haben uns entschlossen, darüber zu sprechen, was das Projekt während seiner Existenz seit der Ankündigung der ersten öffentlichen Version erreicht hat.



Über das Gerät und den Zweck



Beginnen wir jedoch mit einer kurzen Erklärung, wie der Shell-Operator funktioniert und warum er im Prinzip erforderlich sein kann.



Der Shell-Operator wird im Pod des Kubernetes-Clusters ausgeführt. Es wird dort präsentiert als:



  • Gehen Sie binär, die Ereignisse in der K8s-API abonniert und Hooks startet (und geben Sie ihnen Details darüber, was passiert ist).
  • Eine Reihe von Hooks, von denen jeder ein Bash-Skript, ein Python-Skript oder eine andere ausführbare Datei ist.


Haken:



  • sie selbst bestimmen, welche Ereignisse und für welche Objekte sie benötigen;
  • Führen Sie die erforderlichen Aktionen aus, falls diese Ereignisse in K8s auftreten.


Somit ist der Shell-Operator eine Schicht zwischen Ereignissen in der Kubernetes-API und Skripten für deren Verarbeitung.



Bild



Warum wurde der Shell-Operator überhaupt erstellt? Operatoren sind der Standard, um in Kubernetes "das Richtige zu tun", aber die vollständige Entwicklung (in Go mit dem entsprechenden SDK ) ist nicht einfach. Das Vorhandensein eines so einfachen Frameworks wie des Shell-Operators senkt den Schwellenwert für den Eintritt in diesen Bereich erheblich, sodass Sie kleine Betriebsprobleme * innerhalb des Clusters schnell und effizient lösen können. Und genauso wichtig ist es, es richtig zu machen.



Über welche Aufgaben sprechen wir? Fertige Beispiele für die Verwendung des Shell-Operators finden Sie im Projekt-Repository . Bei uns, bei Flant, benutzen wir es als Bibliothek(Ja, das war auch möglich!) . Es wurde zur Basis für den Addon-Operator , der zusätzliche Komponenten in Kubernetes verwaltet.



NB : Die Ankündigung dieses Open Source-Projekts (Addon-Operator) finden Sie hier . Und im Bericht " Erweitern und Ergänzen von Kubernetes " haben wir ausführlich über die Gründe für sein Auftreten, die Beziehung zum Shell-Operator und die Funktionsprinzipien gesprochen.



Nun zu den wichtigsten Änderungen, die der Shell-Betreiber im letzten Jahr vorgenommen hat.



Wichtige Innovationen



In den ersten Versionen des Shell-Operators war nur ein Objekt für den Hook verfügbar - das dem Ereignis aus dem Cluster zugeordnete. Die Entwicklung der im Addon-Operator verwendeten Hooks führte dazu, dass der Hook eine Objektänderung abonnierte, aber aufrief kubectl, um eine aktuelle Liste anderer Objekte zu erhalten. Um unnötige Aufrufe zu entfernen kubectlund damit die Arbeit von Hooks zu beschleunigen, wurden verschiedene Möglichkeiten implementiert, um auf die aktuellen Objektlisten zuzugreifen:



  • Synchronisation + Event - Modus , wenn der Haken beim Start eine Liste der tatsächlichen Objekte empfängt, und arbeitet dann mit nur einem Objekt. Dieser Modus ist standardmäßig aktiviert - wir können sagen, dass das Ergebnis ein Analogon der Abstimmungsschleife von operator-sdk ist.
  • snapshot', . (Snapshot’ Kubernetes, .)
  • snapshot'. , , , .
  • Es wurde auch möglich , die Ressource zu überwachen , aber nicht auf ihre Änderungen zu reagieren, d.h. "Schnappschuss akkumulieren". Ein Hook kann beispielsweise auf Änderungen in der CustomResource reagieren und trotzdem das eigentliche ConfigMap-Objekt ohne zusätzlichen Aufruf empfangen kubectl. (Siehe Flaggen executeHookOnSynchronizationund für Details executeHookOnEvent.)


Weitere wichtige Neuerungen:



  • Dank des Übergangs zur Verwendung des dynamischen Kubernetes- Clients im Shell-Operator wurde es möglich, alle vorhandenen kind(Ressourcentypen in der Kubernetes-API) einschließlich benutzerdefinierter Ressourcen zu abonnieren .
  • (. 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.
  • Für die Verbindung des Shell-Operators als Bibliothek wurden verschiedene Vereinfachungen implementiert.
  • Die Version kubectl(von 1.13 auf 1.17.4) wurde aktualisiert und eine Assembly basierend auf alpine-3.11 erstellt.


Status und Pläne



Das Shell-Operator-Projekt befindet sich noch offiziell in der Beta . Trotzdem verwenden wir es, wie oben erwähnt, sehr intensiv als Grundlage für den Addon-Operator - ein Tool, das in vielen (über 100) K8-Clustern ständig verwendet wird.



Für eine stabile Freigabe des Shell-Operators als öffentliches Projekt planen wir (zumindest):



  • e2e-Test hinzufügen ( # 63 ),
  • Multi-Architektur-Build implementieren ( # 184 ),
  • Aktualisieren Sie client-go auf 0.18.0, implementieren Sie das contextObjekt-Caching in client-go ( # 188 ) und behandeln Sie es schließlich .


Anerkennung durch die Gemeinschaft



Im Laufe der Jahre haben wir ein klares Gemeinschaftsinteresse an dem Shell-Betreiber gesehen:



  • Das Projekt wurde nicht nur in verschiedenen Listen nützlicher Dienstprogramme für Kubernetes ( awesome-kubernetes , Cloud Zone ) erwähnt, sondern auch in speziellen Webinaren ( Weaveworks ), Meetups ( K8s Meetup Tokyo ) und sogar in einem Buch .
  • ( — K8s- KubeSphere). GitHub , shell-operator ( ).
  • : , .
  • GitHub 600+ — , ! ;-)


Wir freuen uns auch bekannt zu geben, dass auf der bevorstehenden virtuellen Konferenz KubeCon + CloudNativeCon Europe 2020 , die im August stattfinden wird, unser Bericht über den Shell-Betreiber veröffentlicht wird. Details dazu finden Sie auf der Event-Website .



Vielen Dank für Ihr Interesse am Shell-Operator! Wenn Sie Fragen haben, stellen Sie diese hier in den Kommentaren oder im tg-channel @kubeoperator .



PS



Lesen Sie auch in unserem Blog:






All Articles