Gereedskap vir ontwikkelaars van toepassings wat op Kubernetes loop

Gereedskap vir ontwikkelaars van toepassings wat op Kubernetes loop

'n Moderne benadering tot bedrywighede los baie dringende sakeprobleme op. Houers en orkestreerders maak dit maklik om projekte van enige kompleksiteit te skaal, die vrystelling van nuwe weergawes te vereenvoudig, hulle meer betroubaar te maak, maar terselfdertyd skep dit bykomende probleme vir ontwikkelaars. Die programmeerder gee eerstens om oor sy kode: argitektuur, kwaliteit, werkverrigting, elegansie - en nie hoe dit in Kubernetes sal werk en hoe om dit te toets en te ontfout nadat jy selfs minimale veranderinge aangebring het nie. Daarom is dit ook redelik natuurlik dat gereedskap vir Kubernetes aktief ontwikkel word, wat help om die probleme van selfs die mees "argaïese" ontwikkelaars op te los en hulle in staat stel om op die belangrikste ding te fokus.

Hierdie resensie verskaf kort inligting oor sommige van die gereedskap wat die lewe makliker maak vir 'n programmeerder wie se kode in die pod'ax van 'n Kubernetes-kluster loop.

Eenvoudige helpers

Kubectl-ontfout

  • Die bottom line: voeg jou houer by 'n Pod en kyk wat daarin gebeur.
  • GitHub.
  • Kort GH-statistieke: 715 sterre, 54 commits, 9 bydraers.
  • Taal: Gaan.
  • Lisensie: Apache-lisensie 2.0.

Hierdie inprop vir kubectl laat jou toe om 'n bykomende houer binne die pod van belang te skep, wat die proses naamruimte met ander houers sal deel. Daarin kan u die werking van die peul ontfout: kyk na die netwerk, luister na netwerkverkeer, doen 'n bietjie van die proses van belang, ens.

Jy kan ook oorskakel na die proseshouer deur te hardloop chroot /proc/PID/root - dit kan baie gerieflik wees wanneer jy 'n worteldop in 'n houer moet kry waarvoor dit in die manifes gestel is securityContext.runAs.

Die instrument is eenvoudig en doeltreffend, so dit kan nuttig wees vir elke ontwikkelaar. Ons het meer daaroor geskryf in afsonderlike artikel.

Tele Presence

  • Die bottom line: dra die toepassing na jou rekenaar oor. Ontwikkel en ontfout plaaslik.
  • Site; GitHub.
  • Kort GH-statistieke: 2131 sterre, 2712 commits, 33 bydraers.
  • Taal: Python.
  • Lisensie: Apache-lisensie 2.0.

Die idee van hierdie snap-in is om 'n houer met die toepassing op die plaaslike gebruikerrekenaar te begin en alle verkeer van die groep daarheen en terug in te staan. Hierdie benadering laat jou toe om plaaslik te ontwikkel deur bloot lêers in jou gunsteling IDE te redigeer: die resultate sal onmiddellik beskikbaar wees.

Die voordele van plaaslik hardloop is die gerief van wysigings en onmiddellike resultate, die vermoë om die toepassing op die gewone manier te ontfout. Die nadeel is dat dit veeleisend is op verbindingspoed, wat veral opvallend is wanneer jy met 'n toepassing met redelik hoë RPS en verkeer moet werk. Daarbenewens het Telepresence probleme met volume-monterings op Windows, wat 'n deurslaggewende beperking kan wees vir ontwikkelaars wat gewoond is aan hierdie bedryfstelsel.

Ons het reeds ons ervaring van die gebruik van Telepresence gedeel hier.

Ksync

  • Die bottom line: byna oombliklike sinchronisasie van kode met die houer in die groepering.
  • GitHub.
  • Kort GH-statistieke: 555 sterre, 362 commits, 11 bydraers.
  • Taal: Gaan.
  • Lisensie: Apache-lisensie 2.0.

Die hulpprogram laat jou toe om die inhoud van 'n plaaslike gids te sinchroniseer met die gids van 'n houer wat in die groepering loop. So 'n instrument is perfek vir ontwikkelaars in script programmeertale, wie se grootste probleem is om kode aan 'n lopende houer te lewer. Ksync is ontwerp om hierdie hoofpyn te verlig.

Wanneer een keer geïnisialiseer deur die opdrag ksync init 'n DaemonSet word in die cluster geskep, wat gebruik word om die toestand van die lêerstelsel van die geselekteerde houer te monitor. Op sy plaaslike rekenaar voer die ontwikkelaar die opdrag uit ksync watch, wat konfigurasies en lopies monitor sinkronisering, wat lêers direk met die groep sinchroniseer.

Al wat oorbly is om ksync opdrag te gee wat om met wat te sinchroniseer. Byvoorbeeld, hierdie opdrag:

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

... sal 'n kyker met die naam skep myprojectwat sal soek vir 'n peul met 'n etiket app=backend en probeer om die plaaslike gids te sinchroniseer /home/user/myproject/ met katalogus /var/www/myproject/ by die houer geroep php.

Probleme en notas oor ksync uit ons ervaring:

  • Moet op Kubernetes-klusternodusse gebruik word overlay2 as 'n stoorbestuurder vir Docker. Die hulpprogram sal nie met enige ander werk nie.
  • Wanneer Windows as 'n kliënt-bedryfstelsel gebruik word, sal die lêerstelselwaarnemer moontlik nie korrek werk nie. Hierdie fout is opgemerk wanneer met groot gidse gewerk word - met 'n groot aantal geneste lêers en gidse. Ons het geskep relevante kwessie in die sinchronisasieprojek, maar daar is nog geen vordering daarmee nie (sedert die begin van Julie).
  • Gebruik lêer .stignore om paaie of lêerpatrone te spesifiseer wat nie gesinchroniseer hoef te word nie (byvoorbeeld gidse app/cache и .git).
  • By verstek sal ksync die houer herbegin wanneer lêers verander. Vir Node.js is dit gerieflik, maar vir PHP is dit heeltemal onnodig. Dit is beter om opcache af te skakel en die vlag te gebruik --reload=false.
  • Die konfigurasie kan altyd reggestel word in $HOME/.ksync/ksync.yaml.

Squash

  • Die bottom line: ontfout prosesse direk in die groepering.
  • GitHub.
  • Kort GH-statistieke: 1154 sterre, 279 commits, 23 bydraers.
  • Taal: Gaan.
  • Lisensie: Apache-lisensie 2.0.

Hierdie instrument is ontwerp om prosesse direk in peule te ontfout. Die nut is eenvoudig en interaktief laat jou toe om die gewenste ontfouter te kies (sien onder) en naamruimte + peul, in die proses waarvan jy moet ingryp. Tans ondersteun:

  • delf - vir Go-toepassings;
  • GDB - via teikenafstand + poortaanstuur;
  • JDWP-poortaanstuur vir ontfouting van Java-toepassings.

Aan die IDE-kant is ondersteuning slegs beskikbaar in VScode (met behulp van uitbreiding), planne vir die huidige (2019) jaar sluit egter Eclipse en Intellij in.

Om prosesse te ontfout, laat Squash 'n bevoorregte houer op die cluster nodusse loop, so jy moet jouself eers vertroud maak met die vermoëns veilige modus sekuriteitsprobleme te vermy.

Volledige oplossings

Kom ons gaan oor na die swaar artillerie - meer "grootskaalse" projekte wat ontwerp is om onmiddellik aan baie van die behoeftes van ontwikkelaars te voldoen.

NB: In hierdie lys is daar natuurlik 'n plek vir ons Oopbron-hulpmiddel werf (voorheen bekend as dapp). Ons het egter al meer as een keer daaroor geskryf en gepraat, en het daarom besluit om dit nie by die resensie in te sluit nie. Vir diegene wat meer vertroud wil raak met sy vermoëns, beveel ons aan om die verslag te lees/luister "werf is ons hulpmiddel vir CI/CD in Kubernetes".

DevSpace

  • Die bottom line: vir diegene wat in Kubernetes wil begin werk, maar nie diep in sy oerwoud wil delf nie.
  • GitHub.
  • Kort GH-statistieke: 630 sterre, 1912 commits, 13 bydraers.
  • Taal: Gaan.
  • Lisensie: Apache-lisensie 2.0.

'n Oplossing van die maatskappy met dieselfde naam, wat bestuurde groeperings met Kubernetes verskaf vir spanontwikkeling. Die hulpprogram is geskep vir kommersiële groepe, maar werk uitstekend met enige ander.

Wanneer die opdrag uitgevoer word devspace init in die projekkatalogus sal jy (interaktief) aangebied word:

  • kies 'n werkende Kubernetes-kluster,
  • bestaande gebruik Dockerfile (of genereer 'n nuwe een) om 'n houer te skep wat daarop gebaseer is,
  • kies 'n bewaarplek vir die stoor van houerbeelde, ens.

Na al hierdie voorbereidende stappe, kan u ontwikkeling begin deur die opdrag uit te voer devspace dev. Dit sal die houer bou, dit oplaai na die bewaarplek, die ontplooiing na die groep uitrol en poortaanstuur en sinchronisasie van die houer met die plaaslike gids begin.

Opsioneel sal jy gevra word om die terminaal na die houer te skuif. Jy moet nie weier nie, want in werklikheid begin die houer met die slaapopdrag, en vir werklike toetsing moet die toepassing handmatig geloods word.

Uiteindelik die span devspace deploy rol die toepassing en die gepaardgaande infrastruktuur na die cluster uit, waarna alles in gevegsmodus begin funksioneer.

Alle projekkonfigurasies word in 'n lêer gestoor devspace.yaml. Benewens die instellings vir die ontwikkelingsomgewing, kan u ook 'n beskrywing van die infrastruktuur daarin vind, soortgelyk aan standaard Kubernetes-manifeste, net baie vereenvoudig.

Gereedskap vir ontwikkelaars van toepassings wat op Kubernetes loop
Argitektuur en hoofstadia van werk met DevSpace

Daarbenewens is dit maklik om 'n voorafbepaalde komponent (byvoorbeeld 'n MySQL DBMS) of 'n Helm-kaart by die projek te voeg. Lees meer in dokumentasie - dit is nie ingewikkeld nie.

Skaffold

  • Site; GitHub.
  • Kort GH-statistieke: 7423 sterre, 4173 commits, 136 bydraers.
  • Taal: Gaan.
  • Lisensie: Apache-lisensie 2.0.

Hierdie program van Google beweer dat dit al die behoeftes van 'n ontwikkelaar dek wie se kode op een of ander manier op 'n Kubernetes-kluster sal loop. Om dit te begin gebruik is nie so maklik soos devspace nie: geen interaktiwiteit, taalbespeuring en outo-skepping nie Dockerfile hulle sal dit nie hier vir jou aanbied nie.

As dit jou egter nie bang maak nie, is dit wat Skaffold jou toelaat om te doen:

  • Volg bronkode veranderinge.
  • Sinchroniseer dit met die peulhouer as dit nie gemonteer moet word nie.
  • Versamel houers met kode, as die taal geïnterpreteer word, of stel artefakte saam en pak dit in houers.
  • Die resulterende beelde word outomaties nagegaan met behulp van houer-struktuur-toets.
  • Merk en oplaai van beelde na die Docker-register.
  • Ontplooi 'n toepassing in 'n groepering deur kubectl, Helm of kustomize te gebruik.
  • Voer poortaanstuur uit.
  • Ontfout toepassings geskryf in Java, Node.js, Python.

Werkvloei in verskeie variasies word verklarend in die lêer beskryf skaffold.yaml. Vir 'n projek kan jy ook verskeie profiele definieer waarin jy die samestelling en ontplooiingstadiums gedeeltelik of heeltemal kan verander. Byvoorbeeld, vir ontwikkeling, spesifiseer 'n basisbeeld wat gerieflik is vir die ontwikkelaar, en vir opvoering en produksie - 'n minimale een (+ gebruik securityContext houers of herdefinieer die groep waarin die toepassing ontplooi sal word).

Docker-houers kan plaaslik of op afstand gebou word: in Google Wolk Bou of in 'n groep met behulp van Kaniko. Bazel en Jib Maven/Gradle word ook ondersteun. Vir tagging ondersteun Skaffold baie strategieë: deur git commit hash, datum/tyd, sha256-som van bronne, ens.

Afsonderlik is dit die moeite werd om te let op die moontlikheid om houers te toets. Die reeds genoemde houerstruktuur-toetsraamwerk bied die volgende verifikasiemetodes:

  • Voer opdragte uit in die konteks van 'n houer met die naspoor van uitgangstatusse en kontroleer die teksuitvoer van die opdrag.
  • Kontroleer die teenwoordigheid van lêers in die houer en pas by die gespesifiseerde eienskappe.
  • Beheer van lêerinhoud deur gebruik te maak van gereelde uitdrukkings.
  • Beeldmetadataverifikasie (ENV, ENTRYPOINT, VOLUMES en so aan.).
  • Kontroleer lisensieversoenbaarheid.

Die sinchronisering van lêers met die houer word nie op die mees optimale manier uitgevoer nie: Skaffold skep bloot 'n argief met die bronne, kopieer dit en pak dit in die houer uit (tar moet geïnstalleer word). Daarom, as u hooftaak kodesinchronisasie is, is dit beter om na 'n gespesialiseerde oplossing (ksync) te kyk.

Gereedskap vir ontwikkelaars van toepassings wat op Kubernetes loop
Hoofstadia van Skaffold-operasie

Oor die algemeen laat die instrument jou nie toe om uit Kubernetes-manifeste te abstraheer nie en het dit geen interaktiwiteit nie, so dit lyk dalk moeilik om te bemeester. Maar dit is ook die voordeel daarvan – groter vryheid van optrede.

Garden

  • Site; GitHub.
  • Kort GH-statistieke: 1063 sterre, 1927 commits, 17 bydraers.
  • Taal: TypeScript (Daar word beplan om die projek in verskeie komponente te verdeel, waarvan sommige in Go sal wees, en ook 'n SDK te maak vir die skep van byvoegings in TypeScript/JavaScript en Go).
  • Lisensie: Apache-lisensie 2.0.

Soos Skaffold, beoog Garden om die prosesse van die lewering van aansoekkode aan die K8s-groepering te outomatiseer. Om dit te doen, moet jy eers die projekstruktuur in 'n YAML-lêer beskryf en dan die opdrag uitvoer garden dev. Sy sal al die towerkrag doen:

  • Versamel houers met verskeie dele van die projek.
  • Voer integrasie- en eenheidstoetse uit, indien enige beskryf is.
  • Rol alle projekkomponente uit na die groepering.
  • As die bronkode verander, sal dit die hele pyplyn herbegin.

Die hooffokus van die gebruik van hierdie instrument is om 'n afgeleë groepering met 'n ontwikkelingspan te deel. In hierdie geval, as sommige van die bou- en toetsstappe reeds gedoen is, sal dit die hele proses aansienlik versnel, aangesien Garden die kasresultate sal kan gebruik.

'n Projekmodule kan 'n houer, 'n Maven-houer, 'n Roerkaart, 'n manifes vir wees kubectl apply of selfs 'n OpenFaaS-funksie. Boonop kan enige van die modules uit 'n afgeleë Git-bewaarplek getrek word. 'n Module kan dienste, take en toetse definieer of nie. Dienste en take kan afhanklikhede hê, so jy kan die ontplooiingsvolgorde van 'n spesifieke diens bepaal en die bekendstelling van take en toetse organiseer.

Garden bied die gebruiker 'n pragtige paneelbord (tans in eksperimentele toestand), wat die projekgrafiek vertoon: komponente, samestellingvolgorde, uitvoering van take en toetse, hul verbindings en afhanklikhede. Reg in die blaaier kan u die logs van alle projekkomponente bekyk en kyk wat 'n spesifieke komponent via HTTP uitstuur (indien natuurlik 'n ingangsbron daarvoor verklaar is).

Gereedskap vir ontwikkelaars van toepassings wat op Kubernetes loop
Paneel vir Tuin

Hierdie instrument het ook 'n warm-herlaai-modus, wat eenvoudig skrifveranderinge sinchroniseer met die houer in die groepie, wat die toepassingsontfoutingsproses aansienlik bespoedig. Tuin het 'n goeie een dokumentasie en nie sleg nie stel voorbeelde, sodat jy vinnig daaraan gewoond kan raak en dit kan begin gebruik. Terloops, ons het onlangs gepubliseer artikel vertaling van sy skrywers.

Gevolgtrekking

Natuurlik is hierdie lys gereedskap vir die ontwikkeling en ontfouting van toepassings in Kubernetes nie beperk tot. Daar is baie meer baie nuttige en praktiese hulpmiddels wat waardig is, indien nie 'n aparte artikel nie, dan ten minste 'n vermelding. Vertel ons wat jy gebruik, watter probleme jy teëgekom het en hoe jy dit opgelos het!

PS

Lees ook op ons blog:

Bron: will.com

Voeg 'n opmerking