Tools fir Entwéckler vun Uwendungen déi op Kubernetes lafen

Tools fir Entwéckler vun Uwendungen déi op Kubernetes lafen

Eng modern Approche fir Operatiounen léist vill dréngend Geschäftsproblemer. Container an Orchestratoren maachen et einfach fir Projeten vun all Komplexitéit ze skaléieren, d'Verëffentlechung vun neie Versioune vereinfachen, se méi zouverlässeg maachen, awer gläichzäiteg kreéieren se zousätzlech Probleemer fir Entwéckler. De Programméierer, als éischt, këmmert sech ëm säi Code: Architektur, Qualitéit, Leeschtung, Eleganz - an net wéi et an Kubernetes funktionnéiert a wéi et testen an debuggen nodeems se souguer minimal Ännerungen gemaach hunn. Dofir ass et och ganz natierlech datt d'Tools fir Kubernetes aktiv entwéckelt ginn, hëllefen d'Problemer vu souguer déi "archaesch" Entwéckler ze léisen an et erlaabt hinnen op d'Haaptsach ze fokusséieren.

Dës Iwwerpréiwung liwwert kuerz Informatioun iwwer e puer vun den Tools déi d'Liewe méi einfach maachen fir e Programméierer deem säi Code am Pod'ax vun engem Kubernetes Cluster leeft.

Einfach Helfer

Kubectl-Debug

  • Déi ënnescht Linn: füügt Äre Container an e Pod a kuckt wat dran geschitt.
  • GitHub.
  • Kuerz GH Statistiken: 715 Stären, 54 Verpflichtungen, 9 Mataarbechter.
  • Sprooch: Go.
  • Lizenz: Apache Lizenz 2.0.

Dëse Plugin fir kubectl erlaabt Iech en zousätzleche Container am Pod vun Interesse ze kreéieren, deen de Prozessnameraum mat anere Container deelt. An et kënnt Dir d'Operatioun vum Pod debuggen: d'Netzwierk iwwerpréiwen, den Netzverkéier lauschteren, eng Streck vum Interesseprozess maachen, asw.

Dir kënnt och op de Prozessbehälter wiesselen andeems Dir lafen chroot /proc/PID/root - dëst kann ganz bequem sinn wann Dir eng Root Shell an engem Container braucht fir deen et am Manifest gesat gëtt securityContext.runAs.

D'Tool ass einfach an effektiv, sou datt et fir all Entwéckler nëtzlech ka sinn. Mir geschriwwen méi doriwwer an getrennten Artikel.

Telepresenz

  • Déi ënnescht Linn: Transfert d'Applikatioun op Äre Computer. Entwéckelen an Debug lokal.
  • Websäit; GitHub.
  • Kuerz GH Statistiken: 2131 Stären, 2712 Verpflichtungen, 33 Mataarbechter.
  • Sprooch: Python.
  • Lizenz: Apache Lizenz 2.0.

D'Iddi vun dësem Snap-in ass e Container mat der Applikatioun um lokalen Benotzercomputer ze lancéieren an all Traffic aus dem Cluster erop an zréck ze proxy. Dës Approche erlaabt Iech lokal z'entwéckelen andeems Dir Dateien an Ärer Liiblings-IDE ännert: d'Resultater sinn direkt verfügbar.

D'Virdeeler vum lokalen Laafen sinn d'Bequemlechkeet vun den Ännerungen an direkt Resultater, d'Fäegkeet fir d'Applikatioun op déi üblech Manéier ze debuggen. Den Nodeel ass datt et op d'Verbindungsgeschwindegkeet gefuerdert ass, wat besonnesch bemierkbar ass wann Dir mat enger Applikatioun mat zimlech héije RPS a Traffic schaffe musst. Zousätzlech huet Telepresence Probleemer mat Volumenmounts op Windows, wat eng entscheedend Begrenzung fir Entwéckler sinn, déi mat dësem OS gewinnt sinn.

Mir hunn eis Erfahrung mat Telepresence schonn gedeelt hei.

Ksync

  • Déi ënnescht Linn: bal direkt Synchroniséierung vum Code mam Container am Stärekoup.
  • GitHub.
  • Kuerz GH Statistiken: 555 Stären, 362 Verpflichtungen, 11 Mataarbechter.
  • Sprooch: Go.
  • Lizenz: Apache Lizenz 2.0.

D'Utility erlaabt Iech den Inhalt vun engem lokalen Verzeechnes mat dem Verzeechnes vun engem Container ze synchroniséieren, deen am Cluster leeft. Sou en Tool ass perfekt fir Entwéckler a Skriptprogramméierungssproochen, deenen hiren Haaptproblem Code un e lafende Container liwwert. Ksync ass entwéckelt fir dëse Kappwéi ze entlaaschten.

Wann initialiséiert eemol vum Kommando ksync init en DaemonSet gëtt am Cluster erstallt, dee benotzt gëtt fir den Zoustand vum Dateiesystem vum ausgewielten Container ze iwwerwaachen. Op sengem lokalen Computer leeft den Entwéckler de Kommando ksync watch, déi Konfiguratiounen iwwerwaacht a leeft synchroniséiert, déi Dateien direkt mam Cluster synchroniséiert.

Alles wat bleift ass ksync ze instruéieren wat mat wat ze synchroniséieren. Zum Beispill, dëse Kommando:

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

... wäert en Iwwerwaacher erstellen mam Numm myprojectdéi no engem Pod mat engem Label sichen app=backend a probéiert de lokalen Verzeechnes ze synchroniséieren /home/user/myproject/ mat Katalog /var/www/myproject/ um Container genannt php.

Probleemer an Notizen iwwer ksync aus eiser Erfahrung:

  • Muss op Kubernetes Cluster Node benotzt ginn overlay2 als Stockage Chauffer fir Docker. D'Utility funktionnéiert net mat aneren.
  • Wann Dir Windows als Client OS benotzt, kann de Dateisystem Watcher net korrekt funktionnéieren. Dëse Feeler gouf gemierkt wann Dir mat grousse Verzeichnisser geschafft hutt - mat enger grousser Zuel vun nestéierten Dateien a Verzeichnisser. Mir hunn geschaf relevant Thema am Synchroniséierungsprojet, awer et ass nach kee Fortschrëtt dovun (zënter Ufank Juli).
  • Benotzt Datei .stignore fir Weeër oder Dateimuster ze spezifizéieren déi net synchroniséiert musse ginn (zum Beispill Verzeichnisser app/cache и .git).
  • Par défaut wäert ksync de Container nei starten wann d'Dateien änneren. Fir Node.js ass dëst praktesch, awer fir PHP ass et komplett onnéideg. Et ass besser den Opcache auszeschalten an de Fändel ze benotzen --reload=false.
  • D'Konfiguratioun kann ëmmer korrigéiert ginn $HOME/.ksync/ksync.yaml.

Squash

  • Déi ënnescht Linn: Debug Prozesser direkt am Cluster.
  • GitHub.
  • Kuerz GH Statistiken: 1154 Stären, 279 Verpflichtungen, 23 Mataarbechter.
  • Sprooch: Go.
  • Lizenz: Apache Lizenz 2.0.

Dëst Tool ass fir Debugging Prozesser direkt an Pods entworf. D'Utility ass einfach an interaktiv erlaabt Iech de gewënschte Debugger ze wielen (kuckt ënnen) an Nummraum + Pod, am Prozess vun deem Dir musst intervenéieren. Aktuell ënnerstëtzt:

  • verdéiwen - fir Go Uwendungen;
  • GDB - iwwer Zil-Fern + Port Forwarding;
  • JDWP Port Forwarding fir Debugging Java Uwendungen.

Op der IDE Säit ass Ënnerstëtzung nëmmen am VScode verfügbar (benotzt Expansioun), awer Pläng fir dat aktuellt (2019) Joer enthalen Eclipse an Intellij.

Fir Prozesser ze debuggen, leeft Squash e privilegiéierte Container op de Clusternoden, also musst Dir Iech als éischt mat de Fäegkeeten vertraut maachen Sécherheetsmodus Sécherheetsproblemer ze vermeiden.

Komplett Léisungen

Loosst eis op déi schwéier Artillerie goen - méi "grouss-Skala" Projeten entwéckelt fir direkt vill Bedierfnesser vun den Entwéckler ze treffen.

NB: An dëser Lëscht gëtt et natierlech eng Plaz fir eis Open Source Utility werf (fréier als dapp bekannt). Mir hunn awer scho méi wéi eng Kéier driwwer geschriwwen a geschwat, an dofir decidéiert et net an der Iwwerpréiwung opzehuelen. Fir déi, déi méi mat senge Fäegkeete vertraut wëllen, empfeelen mir de Bericht ze liesen / nolauschteren "werf ass eisen Tool fir CI/CD zu Kubernetes".

DevSpace

  • Déi ënnescht Linn: fir déi, déi zu Kubernetes schaffen wëllen ufänken, mä wëllen net déif a sengem Dschungel ze verdéiwen.
  • GitHub.
  • Kuerz GH Statistiken: 630 Stären, 1912 Verpflichtungen, 13 Mataarbechter.
  • Sprooch: Go.
  • Lizenz: Apache Lizenz 2.0.

Eng Léisung vun der Firma mam selwechten Numm, déi geréiert Cluster mat Kubernetes fir Teamentwécklung ubitt. D'Utility gouf fir kommerziell Cluster erstallt, awer funktionnéiert gutt mat all aneren.

Wann Dir de Kommando leeft devspace init am Projetskatalog kritt Dir (interaktiv):

  • wielt e schaffende Kubernetes Cluster,
  • benotzen bestehend Dockerfile (oder generéiert en neien) fir e Container op der Basis ze kreéieren,
  • wielt e Repository fir Container Biller ze späicheren, etc.

No all dëse Virbereedungsschrëtt kënnt Dir d'Entwécklung starten andeems Dir de Kommando leeft devspace dev. Et wäert de Container bauen, en an de Repository eroplueden, d'Deployment an de Cluster ausrollen an d'Port Forwarding an d'Synchroniséierung vum Container mam lokalen Verzeechnes starten.

Optional wäert Dir opgefuerdert ginn den Terminal an de Container ze réckelen. Dir sollt net refuséieren, well a Wierklechkeet fänkt de Container mam Schlofkommando un, a fir richteg Tester muss d'Applikatioun manuell gestart ginn.

Endlech, d'Equipe devspace deploy rullt d'Applikatioun an d'assoziéiert Infrastruktur an de Stärekoup eraus, duerno fänkt alles am Kampfmodus ze funktionéieren.

All Projet Konfiguratioun ass an enger Datei gespäichert devspace.yaml. Zousätzlech zu den Entwécklungsëmfeld Astellungen, kënnt Dir och eng Beschreiwung vun der Infrastruktur an et fannen, ähnlech wéi Standard Kubernetes Manifestatiounen, nëmme staark vereinfacht.

Tools fir Entwéckler vun Uwendungen déi op Kubernetes lafen
Architektur an Haaptstadien vun der Aarbecht mat DevSpace

Zousätzlech ass et einfach e virdefinéierte Komponent (zum Beispill e MySQL DBMS) oder e Helm Diagramm un de Projet ze addéieren. Liest méi an Dokumentatioun - et ass net komplizéiert.

Skaffold

  • Websäit; GitHub.
  • Kuerz GH Statistiken: 7423 Stären, 4173 Verpflichtungen, 136 Mataarbechter.
  • Sprooch: Go.
  • Lizenz: Apache Lizenz 2.0.

Dëst Utility vu Google behaapt all Bedierfnesser vun engem Entwéckler ze decken deem säi Code iergendwéi op engem Kubernetes Cluster leeft. Et ze benotzen ass net sou einfach wéi devspace: keng Interaktivitéit, Sproocherkennung an Auto-Creatioun Dockerfile si bidden Iech et net hei.

Wéi och ëmmer, wann dëst Iech net Angscht mécht, hei ass wat Skaffold Iech erlaabt ze maachen:

  • Streck Quelltext Ännerungen.
  • Synchroniséiert et mam Podcontainer wann et keng Versammlung erfuerdert.
  • Sammelt Container mat Code, wann d'Sprooch interpretéiert gëtt, oder kompiléiert Artefakte a packt se a Container.
  • Déi doraus resultéierend Biller ginn automatesch iwwerpréift benotzt Container-Struktur-Test.
  • Tagging an eropluede Biller an d'Docker Registry.
  • Deploy eng Applikatioun an engem Cluster mat kubectl, Helm oder kustomize.
  • Leeschtung port Forwarding.
  • Debug Uwendungen geschriwwen op Java, Node.js, Python.

Workflow a verschiddene Variatiounen gëtt deklarativ an der Datei beschriwwen skaffold.yaml. Fir e Projet kënnt Dir och verschidde Profiler definéieren, an deenen Dir d'Versammlung an d'Deploymentstadien deelweis oder komplett verännere kënnt. Zum Beispill, fir d'Entwécklung, spezifizéiert e Basisbild bequem fir den Entwéckler, a fir Inszenéierung a Produktioun - e Minimum (+ benotzen securityContext Container oder nei definéieren de Cluster an deem d'Applikatioun ofgesat gëtt).

Docker Container kënnen lokal oder op afstand gebaut ginn: in Google Cloud Build oder an engem Cluster benotzt Kaniko. Bazel a Jib Maven / Gradle ginn och ënnerstëtzt. Fir Tagging ënnerstëtzt Skaffold vill Strategien: duerch git commit Hash, Datum / Zäit, sha256-Zomm vu Quellen, etc.

Separat ass et derwäert ze notéieren d'Méiglechkeet fir Container ze testen. De scho genannte Container-Struktur-Test Kader bitt déi folgend Verifizéierungsmethoden:

  • Befehl ausféieren am Kontext vun engem Container mat Ausgangsstatusen ze verfolgen an den Textausgang vum Kommando ze kontrolléieren.
  • Iwwerpréift d'Präsenz vu Dateien am Container an entsprécht den spezifizéierten Attributer.
  • Kontroll vum Dateiinhalt mat reguläre Ausdréck.
  • Bild Metadaten Verifizéierung (ENV, ENTRYPOINT, VOLUMES an dergläichen).
  • Iwwerpréift Lizenz Kompatibilitéit.

D'Synchroniséierung vun Dateien mam Container gëtt net op déi optimal Manéier duerchgefouert: Skaffold erstellt einfach en Archiv mat de Quellen, kopéiert et an packt et am Container (Tar muss installéiert ginn). Dofir, wann Är Haaptaufgab Code Synchroniséierung ass, ass et besser fir eng spezialiséiert Léisung (ksync) ze kucken.

Tools fir Entwéckler vun Uwendungen déi op Kubernetes lafen
Haaptstadien vun Skaffold Operatioun

Am Allgemengen erlaabt d'Tool Iech net aus Kubernetes Manifestatiounen ze abstrakt an huet keng Interaktivitéit, sou datt et schwiereg ka schéngen ze beherrschen. Awer dëst ass och säi Virdeel - méi Handlungsfräiheet.

Gaart

  • Websäit; GitHub.
  • Kuerz GH Statistiken: 1063 Stären, 1927 Verpflichtungen, 17 Mataarbechter.
  • Sprooch: TypeScript (et ass geplangt de Projet a verschidde Komponenten opzedeelen, vun deenen e puer am Go sinn, an och en SDK maachen fir Add-ons an TypeScript/JavaScript a Go ze kreéieren).
  • Lizenz: Apache Lizenz 2.0.

Wéi Skaffold, zielt Garden d'Prozesser fir d'Applikatiounscode an de K8s Cluster ze liwweren. Fir dëst ze maachen, musst Dir als éischt d'Projektstruktur an enger YAML-Datei beschreiwen, an dann de Kommando ausféieren garden dev. Si wäert all Magie maachen:

  • Sammelt Container mat verschiddenen Deeler vum Projet.
  • Féiert Integratioun an Eenheetstester, wa se beschriwwe goufen.
  • Rollt all Projetkomponenten an de Cluster aus.
  • Wann de Quellcode ännert, wäert et d'ganz Pipeline nei starten.

Den Haaptfokus fir dëst Tool ze benotzen ass e Ferncluster mat engem Entwécklungsteam ze deelen. An dësem Fall, wann e puer vun de Bau- an Testschrëtt scho gemaach gi sinn, wäert dëst de ganze Prozess wesentlech beschleunegen, well Garden fäeg ass déi cache Resultater ze benotzen.

E Projet Modul kann e Container ginn, engem Maven Container, engem Helm Chart, e Manifest fir kubectl apply oder souguer eng OpenFaaS Funktioun. Ausserdeem kann ee vun de Moduler aus engem Remote Git Repository gezunn ginn. E Modul kann Servicer, Aufgaben an Tester definéieren oder net. Servicer an Aufgaben kënnen Ofhängegkeeten hunn, sou datt Dir d'Deployment Sequenz vun engem bestëmmte Service bestëmmen an de Start vun Aufgaben an Tester organiséieren.

Garden bitt de Benotzer e schéint Dashboard (aktuell an experimentell Staat), déi d'Projetgrafik weist: Komponenten, Assemblée Sequenz, Ausféierung vun Aufgaben an Tester, hir Verbindungen an Ofhängegkeeten. Direkt am Browser kënnt Dir d'Logbicher vun all de Projetskomponenten kucken a kucken wat e bestëmmte Komponent iwwer HTTP ausgitt (wann natierlech eng Ingressressource dofir deklaréiert ass).

Tools fir Entwéckler vun Uwendungen déi op Kubernetes lafen
Panel fir Gaart

Dëst Tool huet och e Hot-Reload Modus, deen einfach Skriptännerungen mam Container am Cluster synchroniséiert, wat den Applikatioun Debugging Prozess staark beschleunegt. Gaart huet eng gutt Dokumentatioun an net schlecht Set vu Beispiller, wat Iech erlaabt Iech séier drun ze gewinnen an ze benotzen. Iwwregens, viru kuerzem hu mir publizéiert Artikel Iwwersetzung vu sengen Auteuren.

Konklusioun

Natierlech ass dës Lëscht vun Tools fir Uwendungen an Kubernetes z'entwéckelen an ze Debugging net limitéiert op. Et gi vill méi ganz nëtzlech a praktesch Utilities déi wäertvoll sinn, wann net en separaten Artikel, dann op d'mannst eng Ernimmung. Sot eis wat Dir benotzt, wéi eng Problemer Dir begéint hutt a wéi Dir se geléist hutt!

PS

Liest och op eisem Blog:

Source: will.com

Setzt e Commentaire