Kubernetes Starten Sie Application Developer Tools



Ein moderner Betriebsansatz löst viele dringende geschäftliche Probleme. Container und Orchestratoren machen es einfach, Projekte beliebiger Komplexität zu skalieren, die Veröffentlichung neuer Versionen zu vereinfachen, sie zuverlässiger zu machen und gleichzeitig zusätzliche Probleme für Entwickler zu schaffen. Der Programmierer kümmert sich zuallererst um seinen Code: Architektur, Qualität, Leistung, Eleganz und nicht darum, wie er zu Kubernetes geht und wie er getestet und debuggt wird, nachdem selbst kleinste Änderungen vorgenommen wurden. Daher ist es ziemlich logisch, dass sich die Tools für Kubernetes aktiv weiterentwickeln, um die Probleme selbst der „archaischsten“ Entwickler zu lösen und ihnen zu ermöglichen, sich auf die Hauptsache zu konzentrieren.

Diese Übersicht enthält eine Zusammenfassung einiger Tools, die einem Programmierer, dessen Code sich im pod'ax Kubernetes-Cluster dreht, das Leben erleichtern.

Einfache Helfer


Kubectl-Debug


  • Fazit: Fügen Sie Ihren Container zum Pod hinzu und sehen Sie, was darin passiert .
  • Github
  • Kurze GH-Statistik: 715 Sterne, 54 Commits, 9 Mitwirkende.
  • Sprache: Geh.
  • Lizenz: Apache License 2.0.

Mit diesem Plugin für kubectl können Sie einen zusätzlichen Container innerhalb des Pods erstellen, der Sie interessiert und den Prozess-Namespace mit den übrigen Containern teilt. Es ist möglich, die Arbeit des Pods darin zu debuggen: Überprüfen Sie das Netzwerk, hören Sie den Netzwerkverkehr ab, beschränken Sie den interessierenden Prozess usw.

Sie können auch zum Prozesscontainer wechseln, indem Sie chroot /proc/PID/root ausführen. Dies ist sehr praktisch, wenn Sie die Root-Shell in dem Container abrufen müssen, für den securityContext.runAs im Manifest festgelegt ist.

Das Tool ist einfach und effizient und kann daher für jeden Entwickler nützlich sein. Wir haben mehr darüber in einem separaten Artikel geschrieben .

Telepräsenz


  • Fazit: Übertragen Sie die Anwendung auf Ihren Computer. Lokal entwickeln und debuggen .
  • Site ; Github
  • Kurzstatistik GH: 2131 Sterne, 2712 Commits, 33 Mitwirkende.
  • Sprache: Python.
  • Lizenz: Apache License 2.0.

Die Idee dieses Snap-Ins besteht darin, den Container mit der Anwendung auf dem lokalen Benutzercomputer zu starten und den gesamten Datenverkehr vom Cluster zu diesem und umgekehrt zu übertragen. Mit diesem Ansatz können Sie die Entwicklung lokal durchführen und einfach die Dateien in Ihrer bevorzugten IDE ändern: Die Ergebnisse sind sofort verfügbar.

Die Vorteile des lokalen Starts sind die Bequemlichkeit der Bearbeitung und sofortige Ergebnisse sowie die Möglichkeit, die Anwendung auf die übliche Weise zu debuggen. Zu den Minuspunkten gehört die anspruchsvolle Geschwindigkeit der Verbindung, die sich besonders dann bemerkbar macht, wenn Sie mit einer Anwendung mit relativ hohen RPS und Datenverkehr arbeiten müssen. Darüber hinaus hat Telepresence Probleme mit Volume-Mounts unter Windows, was für Entwickler, die an dieses Betriebssystem gewöhnt sind, ein entscheidender Begrenzer sein kann.

Wir haben unsere Erfahrungen mit Telepresence hier bereits geteilt.

Ksync


  • Fazit: Fast sofortige Codesynchronisation mit dem Container im Cluster .
  • Github
  • Kurze GH-Statistik: 555 Sterne, 362 Commits, 11 Mitwirkende.
  • Sprache: Geh.
  • Lizenz: Apache License 2.0.

Mit dem Dienstprogramm können Sie den Inhalt des lokalen Verzeichnisses mit dem Verzeichnis des im Cluster ausgeführten Containers synchronisieren. Ein solches Tool eignet sich perfekt für Entwickler von Skript-Programmiersprachen, deren Hauptproblem darin besteht, den Code an einen funktionierenden Container zu liefern. Ksync möchte diese Kopfschmerzen lindern.

Bei einmaliger Initialisierung mit dem Befehl ksync init wird im Cluster ein ksync init erstellt, mit dem der Status des Dateisystems des ausgewählten Containers überwacht wird. Auf seinem lokalen Computer führt der Entwickler den ksync watch , der die Konfigurationen überwacht und die Synchronisierung ausführt , mit der Dateien direkt mit dem Cluster synchronisiert werden.

Es bleibt ksync anzuweisen, mit was und was synchronisiert werden soll. Zum Beispiel ein Befehl wie dieser:

 ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/ 

... erstellt einen Watcher namens myproject , der nach einem Pod mit der Bezeichnung app=backend sucht und versucht, das lokale Verzeichnis /home/user/myproject/ mit dem Verzeichnis /var/www/myproject/ im Container php zu synchronisieren.

Probleme und Hinweise zu ksync aus unserer Erfahrung:

  • Auf Knoten des Kubernetes-Clusters sollte overlay2 als Speichertreiber für Docker verwendet werden. Das Dienstprogramm funktioniert nicht mit anderen.
  • Wenn Sie Windows als Client-Betriebssystem verwenden, funktioniert das Watcher-Dateisystem möglicherweise nicht ordnungsgemäß. Dieser Fehler wurde beim Arbeiten mit großen Verzeichnissen festgestellt - mit einer großen Anzahl von Dateianhängen und Verzeichnissen. Wir haben ein entsprechendes Problem im Synchronisierungsprojekt erstellt, aber bisher wurden keine Fortschritte erzielt (seit Anfang Juli).
  • Verwenden Sie die .stignore Datei, um Pfade oder Dateivorlagen anzugeben, die nicht synchronisiert werden müssen (z. B. die .git app/cache und .git ).
  • Standardmäßig lädt ksync den Container jedes Mal neu, wenn Dateien geändert werden. Dies ist praktisch für Node.js, aber für PHP völlig redundant. Es ist besser, den Opcache auszuschalten und das Flag --reload=false .
  • Die Konfiguration kann immer in $HOME/.ksync/ksync.yaml .

Squash


  • Fazit: Debug-Prozesse direkt im Cluster .
  • Github
  • Kurze GH-Statistik: 1154 Sterne, 279 Commits, 23 Mitwirkende.
  • Sprache: Geh.
  • Lizenz: Apache License 2.0.

Dieses Tool dient zum Debuggen von Prozessen direkt in Pods. Das Dienstprogramm ist einfach und ermöglicht es Ihnen interaktiv, den gewünschten Debugger (siehe unten) und den Namespace + Pod auszuwählen, in den Sie eingreifen müssen. Derzeit unterstützt:

  • delve - für Anwendungen auf Go;
  • GDB - über Ziel-Remote + Port-Weiterleitung;
  • JDWP-Portweiterleitung zum Debuggen von Java-Anwendungen.

Von der IDE-Seite ist die Unterstützung nur in VScode verfügbar (mithilfe einer Erweiterung ). Für das laufende Jahr (2019) sind jedoch Eclipse und Intellij geplant.

Zum Debuggen von Prozessen führt Squash einen privilegierten Container auf den Clusterknoten aus. Sie müssen sich daher zunächst mit den Funktionen des abgesicherten Modus vertraut machen, um Sicherheitsprobleme zu vermeiden.

Integrierte Lösungen


Wir wenden uns der schweren Artillerie zu - mehr "Großprojekten", die darauf ausgelegt sind, viele der Bedürfnisse von Entwicklern sofort zu erfüllen.

NB : Unsere Liste hat sicherlich einen Platz in unserem Open Source werf Dienstprogramm (früher bekannt als dapp). Wir haben jedoch mehr als einmal darüber geschrieben und gesprochen und uns daher entschlossen, es nicht in die Rezension aufzunehmen. Für diejenigen, die sich mit seinen Fähigkeiten vertraut machen möchten, empfehlen wir, den Bericht „ werf - unser Tool für CI / CD in Kubernetes “ zu lesen / anzuhören .

Devspace


  • Fazit: Für diejenigen, die bei Kubernetes arbeiten möchten, aber nicht tief in den Dschungel vordringen möchten .
  • Github
  • Kurze GH-Statistik: 630 Sterne, 1912 Commits, 13 Mitwirkende.
  • Sprache: Geh.
  • Lizenz: Apache License 2.0.

Die Lösung stammt von einem gleichnamigen Unternehmen, das verwaltete Cluster mit Kubernetes für die Teamentwicklung bereitstellt. Das Dienstprogramm wurde für kommerzielle Cluster erstellt, funktioniert aber hervorragend mit anderen.

Wenn Sie den Befehl devspace init in dem Verzeichnis mit dem Projekt devspace init , bieten sie Ihnen (im interaktiven Modus):

  • Wählen Sie einen funktionierenden Kubernetes-Cluster aus.
  • Verwenden Sie die vorhandene Dockerfile (oder generieren Sie eine neue), um einen darauf basierenden Container zu erstellen.
  • Wählen Sie ein Repository zum Speichern von Containerbildern usw.

Nach all diesen vorbereitenden Schritten können Sie mit der Entwicklung beginnen, indem Sie den Befehl devspace dev . Der Container wird gesammelt, in das Repository hochgeladen, die Bereitstellung im Cluster bereitgestellt, die Portweiterleitung gestartet und der Container mit dem lokalen Verzeichnis synchronisiert.

Es wird optional angeboten, zum Container am Terminal zu gehen. Sie sollten dies nicht ablehnen, da der Container in Wirklichkeit mit dem Befehl sleep beginnt und für echte Tests die Anwendung manuell gestartet werden muss.

Schließlich rollt der Befehl devspace deploy die Anwendung und die zugehörige Infrastruktur in den Cluster, woraufhin im Kampfmodus alles funktioniert.

Die gesamte Konfiguration des Projekts wird in der Datei devspace.yaml gespeichert. Zusätzlich zu den Umgebungseinstellungen für die Entwicklung finden Sie darin eine Beschreibung der Infrastruktur, ähnlich den Standard-Kubernetes-Manifesten, die nur stark vereinfacht ist.


Architektur und Meilensteine ​​mit DevSpace

Darüber hinaus ist es einfach, einem Projekt eine vordefinierte Komponente (z. B. MySQL DBMS) oder ein Helmdiagramm hinzuzufügen. Lesen Sie mehr in der Dokumentation - es ist einfach.

Gerüst


  • Site ; Github
  • Kurze GH-Statistik: 7423 Sterne, 4173 Commits, 136 Mitwirkende.
  • Sprache: Geh.
  • Lizenz: Apache License 2.0.

Dieses Dienstprogramm von Google soll alle Anforderungen eines Entwicklers abdecken, dessen Code irgendwie in einem Kubernetes-Cluster ausgeführt wird. Die Verwendung ist nicht so einfach wie bei devspace: Es wird Ihnen keine Interaktivität, Sprachdefinition oder Dockerfile .

Wenn es Ihnen jedoch keine Angst macht, können Sie mit Skaffold Folgendes tun:

  • Verfolgen Sie Änderungen im Quellcode.
  • Synchronisieren Sie es mit dem Pod-Container, wenn keine Montage erforderlich ist.
  • Sammeln Sie Container mit dem Code, wenn die Sprache interpretiert wird, oder kompilieren Sie Artefakte und packen Sie sie in Container.
  • Die resultierenden Bilder werden automatisch mit dem Container-Struktur-Test überprüft.
  • Kennzeichnen Sie Bilder und laden Sie sie in die Docker-Registrierung hoch.
  • Stellen Sie eine Anwendung in einem Cluster mit kubectl, Helm oder kustomize bereit.
  • Portweiterleitung durchführen.
  • Debug-Anwendungen, die in Java, Node.js, Python geschrieben wurden.

Der Workflow in verschiedenen Variationen wird deklarativ in der Datei skaffold.yaml . Für ein Projekt können Sie auch mehrere Profile definieren, in denen die Montage- und Bereitstellungsphasen teilweise oder vollständig geändert werden sollen. Geben Sie beispielsweise für die Entwicklung ein Basisimage an, das für den Entwickler und für die Bereitstellung und Produktion geeignet ist - das Minimum (+ verwenden Sie securityContext für Container oder definieren Sie den Cluster neu, in dem die Anwendung bereitgestellt wird).

Docker-Container können lokal oder remote erstellt werden: in Google Cloud Build oder in einem Cluster mit Kaniko . Bazel und Jib Maven / Gradle werden ebenfalls unterstützt. Für das Taggen unterstützt Skaffold viele Strategien: durch Git-Commit-Hash, Datum / Uhrzeit, sha256-Summe der Quellen usw.

Unabhängig davon ist die Möglichkeit zu erwähnen, Behälter zu testen. Das bereits erwähnte Container-Struktur-Test-Framework bietet die folgenden Überprüfungsmethoden:

  • Ausführung von Befehlen im Kontext des Containers mit Verfolgung des Exit-Status und Überprüfung des Textes "Auspuff" des Befehls.
  • Überprüfen, ob Dateien im Container vorhanden sind und ob die entsprechenden Attribute übereinstimmen.
  • Regelmäßige Ausdruckskontrolle des Dateiinhalts.
  • Überprüfung der Bildmetadaten ( ENV , ENTRYPOINT , VOLUMES usw.).
  • Überprüfen Sie die Lizenzkompatibilität.

Dateien werden nicht optimal mit dem Container synchronisiert: Skaffold erstellt einfach ein Archiv mit den Quellen, kopiert es und entpackt es im Container (tar muss installiert sein). Wenn Ihre Hauptaufgabe darin besteht, den Code zu synchronisieren, ist es daher besser, nach einer speziellen Lösung (ksync) zu suchen.


Meilensteine ​​bei Skaffold

Im Allgemeinen erlaubt das Tool keine Abstraktion von Kubernetes-Manifesten und weist keine Interaktivität auf, sodass es schwierig zu beherrschen scheint. Dies ist aber auch das Plus - eine große Handlungsfreiheit.

Garten


  • Site ; Github
  • Kurzstatistik GH: 1063 Sterne, 1927 Commits, 17 Mitwirkende.
  • Sprache: TypeScript (es ist geplant, das Projekt in mehrere Komponenten aufzuteilen, von denen einige auf Go sein werden, sowie ein SDK zum Erstellen von Add-Ons auf TypeScript / JavaScript und Go zu erstellen) .
  • Lizenz: Apache License 2.0.

Wie Skaffold zielt Garden darauf ab, den Prozess der Bereitstellung von Anwendungscode für den K8s-Cluster zu automatisieren. Dazu müssen Sie zuerst die Projektstruktur in einer YAML-Datei beschreiben und dann den Befehl garden dev ausführen. Sie wird die ganze Magie machen:

  • Sammelt Container mit verschiedenen Teilen des Projekts.
  • Führt gegebenenfalls Integrations- und Komponententests durch.
  • Rollt alle Projektkomponenten in den Cluster.
  • Wenn sich der Quellcode ändert, wird die gesamte Pipeline neu gestartet.

Das Hauptaugenmerk bei der Verwendung dieses Tools liegt auf der Freigabe eines Remote-Clusters durch ein Entwicklerteam. In diesem Fall wird der gesamte Prozess erheblich beschleunigt, wenn bereits einige Montage- und Testphasen durchgeführt wurden, da Garden die zwischengespeicherten Ergebnisse verwenden kann.

Ein Projektmodul kann ein Container, ein Maven-Container, ein kubectl apply , ein Manifest für kubectl apply oder sogar eine OpenFaaS-Funktion sein. Und jedes der Module kann aus einem entfernten Git-Repository abgerufen werden. Ein Modul kann Dienste, Aufgaben und Tests bestimmen (oder auch nicht). Dienste und Aufgaben können Abhängigkeiten aufweisen, sodass Sie die Reihenfolge der Bereitstellung eines Dienstes bestimmen und den Start von Aufgaben und Tests organisieren können.

Garden bietet dem Benutzer ein schönes Dashboard (noch in einem experimentellen Zustand ), in dem das Projektdiagramm angezeigt wird: Komponenten, Montagereihenfolge, Aufgaben und Tests, ihre Beziehungen und Abhängigkeiten. Direkt im Browser können Sie auch die Protokolle aller Projektkomponenten anzeigen und überprüfen, was diese oder jene Komponente über HTTP anzeigt (es sei denn, die Eingangsressource ist dafür deklariert).


Panel für Garten

Dieses Tool verfügt außerdem über einen Hot-Reload-Modus, der Skriptänderungen einfach mit dem Container im Cluster synchronisiert und so den Debugging-Prozess für Anwendungen um ein Vielfaches beschleunigt. Garden verfügt über eine gute Dokumentation und eine Reihe guter Beispiele, um schnell loszulegen und die Verwendung zu starten. Übrigens haben wir erst kürzlich eine Übersetzung des Artikels von seinen Autoren veröffentlicht.

Fazit


Natürlich ist die Liste der Tools zum Entwickeln und Debuggen von Anwendungen in Kubernetes nicht beschränkt. Es gibt viele weitere sehr nützliche und praktische Dienstprogramme, die es wert sind, erwähnt zu werden, wenn nicht sogar einen separaten Artikel. Sagen Sie uns, was Sie verwenden, auf welche Probleme Sie gestoßen sind und wie Sie sie gelöst haben!

PS


Lesen Sie auch in unserem Blog:

Source: https://habr.com/ru/post/de462707/


All Articles