Ark foar ûntwikkelders fan applikaasjes dy't rinne op Kubernetes

Ark foar ûntwikkelders fan applikaasjes dy't rinne op Kubernetes

In moderne oanpak fan operaasjes lost in protte driuwende saaklike problemen op. Containers en orkestrators meitsje it maklik om projekten fan elke kompleksiteit te skaaljen, de frijlitting fan nije ferzjes ferienfâldigje, meitsje se betrouberer, mar tagelyk meitsje se ekstra problemen foar ûntwikkelders. De programmeur, earst fan alle, soarget foar syn koade: arsjitektuer, kwaliteit, prestaasjes, elegânsje - en net hoe't it sil wurkje yn Kubernetes en hoe't jo it testen en debuggen nei it meitsjen fan sels minimale feroarings. Dêrom is it ek frij natuerlik dat ark foar Kubernetes aktyf wurde ûntwikkele, dy't helpe om de problemen fan sels de meast "archayske" ûntwikkelders op te lossen en har te rjochtsjen op it wichtichste ding.

Dizze resinsje jout koarte ynformaasje oer guon fan 'e ark dy't it libben makliker meitsje foar in programmeur waans koade rint yn' e pod'ax fan in Kubernetes-kluster.

Ienfâldige helpers

Kubectl-debug

  • De essinsje: foegje jo kontener ta oan in Pod en sjoch wat der yn bart.
  • GitHub.
  • Koarte GH statistiken: 715 stjerren, 54 commits, 9 bydragen.
  • Taal: Gean.
  • Lisinsje: Apache-lisinsje 2.0.

Dizze plugin foar kubectl lit jo in ekstra kontener meitsje yn 'e pod fan belang, dy't de prosesnammeromte dielt mei oare konteners. Dêryn kinne jo de operaasje fan 'e pod debugge: it netwurk kontrolearje, nei netwurkferkear harkje, in stikje dwaan fan it proses fan belang, ensfh.

Jo kinne ek wikselje nei de proseskontainer troch te rinnen chroot /proc/PID/root - dit kin heul handich wêze as jo in woartelshell moatte krije yn in kontener wêrfoar it yn it manifest is ynsteld securityContext.runAs.

It ark is ienfâldich en effektyf, dus it kin nuttich wêze foar elke ûntwikkelder. Wy hawwe der mear oer skreaun yn apart artikel.

telepresence

  • De essinsje: oerdrage de applikaasje nei jo kompjûter. Untwikkelje en debuggen lokaal.
  • webside; GitHub.
  • Koarte GH statistiken: 2131 stjerren, 2712 commits, 33 bydragen.
  • Taal: Python.
  • Lisinsje: Apache-lisinsje 2.0.

It idee fan dizze snap-in is om in kontener te lansearjen mei de applikaasje op 'e lokale brûkerskomputer en proxy fan alle ferkear fan it kluster nei it en werom. Dizze oanpak lit jo lokaal ûntwikkelje troch gewoan bestannen yn jo favorite IDE te bewurkjen: de resultaten sille direkt beskikber wêze.

De foardielen fan lokaal útfiere binne it gemak fan bewurkingen en direkte resultaten, de mooglikheid om de applikaasje op 'e gewoane manier te debuggen. It neidiel is dat it easket op ferbining snelheid, dat is benammen opfallend as jo moatte wurkje mei in applikaasje mei frij hege RPS en ferkear. Derneist hat Telepresence problemen mei folumemounts op Windows, wat in beslissende beheining kin wêze foar ûntwikkelders dy't wend binne oan dit OS.

Wy hawwe ús ûnderfining fan it brûken fan Telepresence al dield hjir.

Ksync

  • De essinsje: hast instantaneous syngronisaasje fan koade mei de kontener yn it kluster.
  • GitHub.
  • Koarte GH statistiken: 555 stjerren, 362 commits, 11 bydragen.
  • Taal: Gean.
  • Lisinsje: Apache-lisinsje 2.0.

It hulpprogramma lit jo de ynhâld fan in lokale map syngronisearje mei de map fan in kontener dy't yn it kluster rint. Sa'n ark is perfekt foar ûntwikkelders yn skriptprogrammearringstalen, waans haadprobleem is it leverjen fan koade nei in rinnende kontener. Ksync is ûntworpen om dizze hoofdpijn te ferlitten.

Wannear't inisjalisearre ien kear troch it kommando ksync init in DaemonSet wurdt makke yn it kluster, dat wurdt brûkt om de tastân fan it bestânsysteem fan 'e selektearre kontener te kontrolearjen. Op syn lokale kompjûter rint de ûntwikkelder it kommando ksync watch, dy't konfiguraasjes kontrolearret en rint syngronisaasje, dy't bestannen direkt syngronisearret mei it kluster.

Alles wat oerbliuwt is om ksync te ynstruearjen wat te syngronisearjen mei wat. Bygelyks dit kommando:

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

... sil in watcher mei de namme oanmeitsje myprojectdy't sil sykje nei in pod mei in label app=backend en besykje de lokale map te syngronisearjen /home/user/myproject/ mei katalogus /var/www/myproject/ by de kontener neamd php.

Problemen en notysjes oer ksync út ús ûnderfining:

  • Moat brûkt wurde op Kubernetes-klusterknooppunten overlay2 as opslachbestjoerder foar Docker. It nut sil net wurkje mei oaren.
  • By it brûken fan Windows as client-OS, kin de bestânsysteemwatcher miskien net goed wurkje. Dizze brek waard opmurken by it wurkjen mei grutte mappen - mei in grut oantal nestele triemmen en mappen. Wy makken relevante kwestje yn it syngronisaasjeprojekt, mar der is noch gjin foarútgong op (sûnt begjin july).
  • Brûk triem .stignore om paden of bestânspatroanen oan te jaan dy't net hoege te syngronisearjen (bygelyks mappen app/cache и .git).
  • Standert sil ksync de kontener opnij starte as triemmen feroarje. Foar Node.js is dit handich, mar foar PHP is it folslein net nedich. It is better om opcache út te skeakeljen en de flagge te brûken --reload=false.
  • De konfiguraasje kin altyd wurde korrizjearre yn $HOME/.ksync/ksync.yaml.

Squash

  • De essinsje: debug prosessen direkt yn it kluster.
  • GitHub.
  • Koarte GH statistiken: 1154 stjerren, 279 commits, 23 bydragen.
  • Taal: Gean.
  • Lisinsje: Apache-lisinsje 2.0.

Dit ark is ûntworpen foar it debuggen fan prosessen direkt yn pods. It hulpprogramma is ienfâldich en ynteraktyf kinne jo de winske debugger selektearje (Sjoch hjirûnder) en nammeromte + pod, yn it proses wêrfan jo moatte yngripe. Op it stuit stipe:

  • delve - foar Go-applikaasjes;
  • GDB - fia doelôfstân + poarte trochstjoere;
  • JDWP-poarte trochstjoere foar debuggen fan Java-applikaasjes.

Oan 'e IDE-kant is stipe allinich beskikber yn VScode (brûkende Untfongen fan "http://fy.wikipedia.org/w/index.php?), lykwols, plannen foar it hjoeddeistige (2019) jier omfetsje Eclipse en Intellij.

Om prosessen te debuggen, rint Squash in befoarrjochte kontener op 'e klusterknooppunten, dus jo moatte jo earst fertroud meitsje mei de mooglikheden feilige modus om feiligensproblemen te foarkommen.

Folsleine oplossingen

Litte wy oergean nei de swiere artillery - mear "grutskalige" projekten ûntworpen om direkt te foldwaan oan in protte fan 'e behoeften fan ûntwikkelders.

NB: Yn dizze list is d'r fansels in plak foar ús Open Source-hulpprogramma werf (earder bekend as dapp). Wy hawwe der lykwols al mear as ien kear oer skreaun en praat, en dêrom besletten om it net op te nimmen yn 'e resinsje. Foar dyjingen dy't mear fertroud wurde wolle mei de mooglikheden, riede wy oan om it rapport te lêzen / te harkjen "werf is ús ark foar CI/CD yn Kubernetes".

DevSpace

  • De essinsje: foar dyjingen dy't wolle begjinne te wurkjen yn Kubernetes, mar net wolle ferdjipje djip yn syn jungle.
  • GitHub.
  • Koarte GH statistiken: 630 stjerren, 1912 commits, 13 bydragen.
  • Taal: Gean.
  • Lisinsje: Apache-lisinsje 2.0.

In oplossing fan it bedriuw mei deselde namme, dy't behearde klusters mei Kubernetes leveret foar teamûntwikkeling. It hulpprogramma is makke foar kommersjele klusters, mar wurket geweldich mei alle oaren.

By it útfieren fan it kommando devspace init yn 'e projektkatalogus sille jo (ynteraktyf) oanbean wurde:

  • selektearje in wurkjend Kubernetes-kluster,
  • besteande gebrûk Dockerfile (of generearje in nije) om in kontener te meitsjen basearre op it,
  • selektearje in repository foar it bewarjen fan kontenerôfbyldings, ensfh.

Nei al dizze tariedende stappen kinne jo de ûntwikkeling begjinne troch it kommando út te fieren devspace dev. It sil de kontener bouwe, it uploade nei it repository, de ynset útrolje nei it kluster en begjinne poarte trochstjoere en syngronisaasje fan 'e kontener mei de lokale map.

Opsjoneel wurde jo frege om de terminal nei de kontener te ferpleatsen. Jo moatte net wegerje, om't yn werklikheid de kontener begjint mei it sliepkommando, en foar echte testen moat de applikaasje manuell wurde lansearre.

As lêste, it team devspace deploy rôlet de applikaasje en de byhearrende ynfrastruktuer út nei it kluster, wêrnei't alles begjint te funksjonearjen yn fjochtsmodus.

Alle projekt konfiguraasje wurdt opslein yn in triem devspace.yaml. Neist de ynstellings foar ûntwikkelingsomjouwing kinne jo ek in beskriuwing fine fan 'e ynfrastruktuer dêryn, fergelykber mei standert Kubernetes-manifesten, allinich sterk ferienfâldige.

Ark foar ûntwikkelders fan applikaasjes dy't rinne op Kubernetes
Arsjitektuer en wichtichste stadia fan wurkjen mei DevSpace

Derneist is it maklik om in foarôf definieare komponint (bygelyks in MySQL DBMS) of in Helm-diagram oan it projekt ta te foegjen. Lês mear yn dokumintaasje - it is net yngewikkeld.

Skaffold

  • webside; GitHub.
  • Koarte GH statistiken: 7423 stjerren, 4173 commits, 136 bydragen.
  • Taal: Gean.
  • Lisinsje: Apache-lisinsje 2.0.

Dit hulpprogramma fan Google beweart alle behoeften te dekken fan in ûntwikkelder waans koade op ien of oare manier sil rinne op in Kubernetes-kluster. It begjinnen te brûken is net sa maklik as devspace: gjin ynteraktiviteit, taaldeteksje en auto-oanmeitsjen Dockerfile se sille it jo hjir net oanbiede.

As dit jo lykwols net bang makket, is hjir wat Skaffold jo kinne dwaan:

  • Track boarne koade feroarings.
  • Syngronisearje it mei de podcontainer as it gjin montage nedich is.
  • Sammelje konteners mei koade, as de taal wurdt ynterpretearre, of kompilearje artefakten en pak se yn konteners.
  • De resultearjende ôfbyldings wurde automatysk kontrolearre mei container-struktuer-test.
  • Ofbyldings taggen en uploaden nei it Docker Registry.
  • Implementearje in applikaasje yn in kluster mei kubectl, Helm of kustomize.
  • Utfiere haven trochstjoere.
  • Debug applikaasjes skreaun yn Java, Node.js, Python.

Workflow yn ferskate farianten wurdt deklaratyf beskreaun yn it bestân skaffold.yaml. Foar in projekt kinne jo ek ferskate profilen definiearje wêryn jo de gearstalling- en ynsetstadia foar in part of folslein feroarje kinne. Foar ûntwikkeling, spesifisearje bygelyks in basisôfbylding handich foar de ûntwikkelder, en foar staging en produksje - in minimale (+ gebrûk securityContext konteners of it kluster opnij definiearje wêryn de applikaasje sil wurde ynset).

Docker-konteners kinne lokaal of op ôfstân wurde boud: yn Google Cloud Build of yn in kluster mei help Kaniko. Bazel en Jib Maven / Gradle wurde ek stipe. Foar tagging stipet Skaffold in protte strategyen: troch git commit hash, datum / tiid, sha256-som fan boarnen, ensfh.

Apart is it de muoite wurdich op te merken de mooglikheid om konteners te testen. It al neamde ramt foar kontenerstruktuer-test biedt de folgjende ferifikaasjemetoaden:

  • It útfieren fan kommando's yn 'e kontekst fan in kontener mei it folgjen fan útgongstatussen en it kontrolearjen fan de tekstútfier fan it kommando.
  • Kontrolearje de oanwêzigens fan bestannen yn 'e kontener en oerienkomme mei de oantsjutte attributen.
  • Kontrolearje fan triemynhâld mei help fan reguliere útdrukkingen.
  • Ofbylding metadata ferifikaasje (ENV, ENTRYPOINT, VOLUMES ensfh.).
  • Kontrolearje lisinsje komptabiliteit.

Syngronisearjen fan triemmen mei de kontener wurdt net op de meast optimale manier útfierd: Skaffold makket gewoan in argyf mei de boarnen, kopiearret it en pakt it út yn 'e kontener (tar moat ynstalleare wurde). Dêrom, as jo haadtaak koadesyngronisaasje is, is it better om te sjen nei in spesjalisearre oplossing (ksync).

Ark foar ûntwikkelders fan applikaasjes dy't rinne op Kubernetes
Main stadia fan Skaffold operaasje

Yn 't algemien lit it ark jo net abstrahere fan Kubernetes-manifesten en hat gjin ynteraktiviteit, dus it kin lestich lykje te behearskjen. Mar dit is ek syn foardiel - gruttere frijheid fan hanneljen.

Tún

  • webside; GitHub.
  • Koarte GH statistiken: 1063 stjerren, 1927 commits, 17 bydragen.
  • Taal: TypeScript (it is pland om it projekt te splitsen yn ferskate komponinten, wêrfan guon yn Go sille wêze, en ek in SDK meitsje foar it meitsjen fan tafoegings yn TypeScript/JavaScript en Go).
  • Lisinsje: Apache-lisinsje 2.0.

Lykas Skaffold is Garden fan doel de prosessen te automatisearjen foar it leverjen fan applikaasjekoade oan it K8s-kluster. Om dit te dwaan, moatte jo earst de projektstruktuer beskriuwe yn in YAML-bestân, en dan it kommando útfiere garden dev. Se sil alle magy dwaan:

  • Sammelje konteners mei ferskate dielen fan it projekt.
  • Fiert yntegraasje- en ienheidstests út, as ien binne beskreaun.
  • Rôlet alle projektkomponinten út nei it kluster.
  • As de boarnekoade feroaret, sil it de heule pipeline opnij starte.

De wichtichste fokus fan it brûken fan dit ark is om in kluster op ôfstân te dielen mei in ûntwikkelteam. Yn dit gefal, as guon fan 'e bou- en teststappen al binne dien, sil dit it heule proses signifikant fersnelle, om't Garden de cacheresultaten kin brûke.

In projekt module kin wêze in kontener, in Maven container, in Helm chart, in manifest foar kubectl apply of sels in OpenFaaS-funksje. Boppedat kin elk fan 'e modules wurde helle út in Git-repository op ôfstân. In module kin al dan net tsjinsten, taken en tests definiearje. Tsjinsten en taken kinne ôfhinklikens hawwe, sadat jo de ynsetsekwinsje fan in bepaalde tsjinst kinne bepale en de lansearring fan taken en tests organisearje.

Garden biedt de brûker in prachtich dashboard (op it stuit yn eksperimintele steat), dy't de projektgrafyk toant: komponinten, gearstallingssekwinsje, útfiering fan taken en tests, har ferbiningen en ôfhinklikens. Rjochts yn 'e blêder kinne jo de logs fan alle projektkomponinten besjen en kontrolearje wat in bepaalde komponint fia HTTP útfiert (as, fansels, in yngongsboarne dêrfoar ferklearre is).

Ark foar ûntwikkelders fan applikaasjes dy't rinne op Kubernetes
Panel foar Garden

Dit ark hat ek in hot-reload-modus, dy't gewoan skriptwizigingen syngronisearret mei de kontener yn it kluster, wat it proses foar debuggen fan 'e applikaasje sterk fersnelt. Tún hat in goede dokumintaasje en net min set fan foarbylden, sadat jo der gau oan wenne kinne en it begjinne te brûken. Troch de wei, krekt koartlyn hawwe wy publisearre artikel oersetting fan syn skriuwers.

konklúzje

Fansels is dizze list mei ark foar it ûntwikkeljen en debuggen fan applikaasjes yn Kubernetes net beheind ta. D'r binne folle mear heul nuttige en praktyske nutsfoarsjenningen dy't wurdich binne, as net in apart artikel, dan op syn minst in fermelding. Fertel ús wat jo brûke, hokker problemen jo tsjinkamen en hoe't jo se hawwe oplost!

PS

Lês ek op ús blog:

Boarne: www.habr.com

Add a comment