Mjetet për zhvilluesit e aplikacioneve që ekzekutohen në Kubernetes

Mjetet për zhvilluesit e aplikacioneve që ekzekutohen në Kubernetes

Qasja moderne në operimin e uzinave zgjidh shumë probleme të ngutshme për biznesin. Kontejnerët dhe orkestratorët lejojnë që projektet e çdo niveli të shkallëzohen lehtësisht, thjeshtojnë nxjerrjet e versioneve të reja, duke i bërë ato më të besueshme, por përkëthjnë gjithashtu dhe probleme të tjera për zhvilluesit. Zhvilluesi, para së gjithash, shqetësohet për kodin e tij: arkitekturën, cilësinë, performancën, elegancën - dhe jo për atë se si do të zbatohet në Kubernetes dhe si do të testohet e debugohet pas çdo ndryshimi, edhe nëse është minimal. Prandaj është shumë e arsyeshme që veglat për Kubernetes të zhvillohen aktivisht, duke ndihmuar në zgjidhjen e problemeve madje edhe të zhvilluesve më "arkeikë" dhe duke i lejuar ata të përqendrohen në thelb.

NĂ« kĂ«tĂ« pĂ«rmbledhje paraqitet njĂ« informacion i shkurtĂ«r rreth disa veglave qĂ« thjeshtojnĂ« jetĂ«n e programuesve, tĂ« cilĂ«t kodet e tyre funksionojnĂ« nĂ« pod’ët e klasterit Kubernetes.

Ndihmës të thjeshtë

Kubectl-debug

  • Thelbi: shto kontejnerin tĂ«nd nĂ« Pod dhe shiko se çfarĂ« ndodh brenda tij.
  • GitHub.
  • Statistika e shkurtĂ«r e GH: 715 yje, 54 komitete, 9 kontribues.
  • Gjuha: Go.
  • Licenca: Licenca Apache 2.0.

Ky plugin për kubectl lejon krijimin e një kontejneri shtesë brenda pod-it të interesit, i cili do të ndajë hapësirën e emrave të proceseve me kontejnerët e tjerë. Në të, mund të kryesh debugimin e punës së pod-it: të kontrollosh funksionimin e rrjetit, të dëgjosh trafikun e rrjetit, të bësh strace të procesit të interesit etj.

Po ashtu mund tĂ« kalosh nĂ« kontejnerin e procesit, duke ekzekutuar chroot /proc/PID/root — kjo Ă«shtĂ« shumĂ« e dobishme kur duhet tĂ« marrĂ«sh shell-in e root nĂ« kontejnerin pĂ«r tĂ« cilin Ă«shtĂ« vendosur nĂ« manifest securityContext.runAs.

Vegla është e thjeshtë dhe efektive, kështu që mund të jetë e dobishme për çdo zhvillues. Më shumë rreth saj kemi shkruar në një artikull të veçantë.

Telepresence

  • Thelbi: transfero aplikacionin nĂ« kompjuterin tĂ«nd. Zhvillo dhe debugo lokal.
  • Websajti; GitHub.
  • Statistika e shkurtĂ«r e GH: 2131 yjĂ«, 2712 komitete, 33 kontribues.
  • Gjuha: Python.
  • Licenca: Licenca Apache 2.0.

Ideja e këtij mjeti është të niset një kontejner me aplikacionin në kompjuterin lokal të përdoruesit dhe të proksinojë të gjithë trafikun nga klasteri në të dhe nga ai. Ky qasje lejon zhvillimin lokal, thjesht duke modifikuar skedarët në IDE-në tënde të preferuar: rezultatet do të jenë të aksesueshme menjëherë.

Avantazhet e ekzekutimit lokal — lehtĂ«sia e ndryshimeve dhe rezultati nĂ« çast, mundĂ«sia pĂ«r tĂ« ndihmuar aplikacionin nĂ« njĂ« mĂ«nyrĂ« tĂ« njohur. Nga ana tjetĂ«r, kĂ«rkesat pĂ«r shpejtĂ«sinĂ« e lidhjes janĂ« tĂ« theksuara, sidomos kur punoni me njĂ« aplikacion me njĂ« RPS tĂ« lartĂ« dhe trafik. PĂ«r mĂ« tepĂ«r, Telepresence ka probleme me volume mounts nĂ« Windows, qĂ« mund tĂ« jetĂ« njĂ« kufizim vendimtar pĂ«r zhvilluesit qĂ« janĂ« mĂ«suar me kĂ«tĂ« sistem operativ.

Kemi ndarë tashmë përvojën tonë me përdorimin e Telepresence këtu.

Ksync

  • Thelbi: pĂ«rgj nearly instant synchronization of code with the container in the cluster.
  • GitHub.
  • Statistika e shkurtĂ«r e GH: 555 yje, 362 commit-e, 11 kontributorĂ«.
  • Gjuha: Go.
  • Licenca: Licenca Apache 2.0.

Utlilitarja lejon të sinkronizoni përmbajtjen e një direktorie lokale me direktorinë e një konteineri të cilin e drejton klasteri. Ky instrument është i shkëlqyer për zhvilluesit e gjuhëve të programimit të skriptit, problemin kryesor të të cilëve është që të dorëzojnë kodin në një konteiner në punë. Ksync është dizajnuar për të hequr këtë shqetësim.

Me inicializimin e vetëm një herë me komandën ksync init në klaster krijohet një DaemonSet që përdoret për të ndjekur gjendjen e sistemit dosjeve të konteinerit të zgjedhur. Në kompjuterin e tij lokal, zhvilluesi ekzekuton komandën ksync watch, e cila ndjek konfigurimet dhe nis syncthing, e cila kryen sinkronizimin e drejtpërdrejtë të skedarëve me klasterin.

Mbetej të instruktojmë ksync, se çfarë dhe me çfarë të sinkronizojë. Për shembull, komandë të tillë:

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


 do të krijojë një watcher me emrin myproject, i cili do të kërkojë pod-in me etiketën app=backend dhe të tentojë të sinkronizojë direktorinë lokale /home/user/myproject/ me direktorinë /var/www/myproject/ në konteinerin e emërtuar php.

Problemet dhe shënimet rreth ksync nga përvoja jonë:

  • NĂ« nyjet e klasterit Kubernetes duhet tĂ« pĂ«rdoret overlay2 si drejtor i ruajtjes pĂ«r Docker. AsnjĂ« vegĂ«l tjetĂ«r nuk do tĂ« funksionojĂ«.
  • Kur pĂ«rdoret Windows si sistem operativ klient, mund tĂ« ketĂ« funksionim tĂ« gabuar tĂ« watcher-it tĂ« sistemit tĂ« dosjeve. Ky defekt Ă«shtĂ« vĂ«nĂ« re gjatĂ« punĂ«s me katalogĂ« tĂ« mĂ«dhenj — me shumĂ« skedarĂ« dhe direktori tĂ« thella. Ne krijuam njĂ« issue pĂ«rkatĂ«s nĂ« projektin syncthing, por deri tani (nga fillimi i korrikut) nuk ka progres.
  • PĂ«rdorni skedarin .stignore pĂ«r tĂ« pĂ«rcaktuar shtegtarĂ«t ose shabllonet e skedarĂ«ve qĂ« nuk duhet tĂ« sinkronizohen (p.sh., katalogĂ«t app/cache dhe .git).
  • PĂ«r default, ksync do tĂ« rinisĂ« konteinerin pĂ«r çdo ndryshim tĂ« skedarĂ«ve. Kjo Ă«shtĂ« e pĂ«rshtatshme pĂ«r Node.js, por pĂ«r PHP Ă«shtĂ« krejtĂ«sisht e panevojshme. MĂ« mirĂ« Ă«shtĂ« tĂ« çaktivizohet opcache dhe tĂ« pĂ«rdoret flaka --reload=false.
  • Konfigurimi gjithmonĂ« mund tĂ« korigjohet nĂ« $HOME/.ksync/ksync.yaml.

Squash

  • Thelbi: shkallĂ«zo proceset direkt nĂ« grumbull.
  • GitHub.
  • Statistika e shkurtĂ«r GH: 1154 yje, 279 komitete, 23 kontribues.
  • Gjuha: Go.
  • Licenca: Licenca Apache 2.0.

Ky mjet është i destinuar për shkallëzimin e proceseve drejtpërdrejt në pod-at. Utileta është e thjeshtë dhe në mënyrë interaktive lejon zgjedhjen e debugerit të duhur (shih më poshtë) dhe namespace + pod, në procesin e të cilit duhet të ndërhyhet. Në këtë moment janë të mbështetur:

  • delve — pĂ«r aplikacionet nĂ« Go;
  • GDB — pĂ«rmes target remote + kalimi i portit;
  • kalimi i portit JDWP pĂ«r shkallĂ«zimin e aplikacioneve Java.

Nga ana e IDE, mbështetje ka vetëm në VScode (me ndihmën e zgjerimet), megjithatë, në planet për vitin e tanishëm (2019) janë Eclipe dhe Intellij.

Për shkallëzimin e proceseve, Squash aktivizon një konteiner të privilegjuar në nyjat e grumbullit, prandaj duhet së pari të njihet me mundësitë e modo të sigurisë për të shmangur probleme me sigurinë.

Zgjidhje komplekse

KalojmĂ« nĂ« artilerinĂ« e rĂ«ndĂ« — projekte mĂ« 'tĂ« mĂ«dha', tĂ« destinuara pĂ«r tĂ« mbyllur shumĂ« nevoja tĂ« zhvilluesve.

NB: NĂ« kĂ«tĂ« listĂ«, padyshim, ka vend edhe pĂ«r utilitarin tonĂ« Open Source werf (mĂ« parĂ« i njohur si dapp). SidoqoftĂ«, ne tashmĂ« kemi shkruar dhe folur shumĂ« pĂ«r tĂ«, prandaj vendosĂ«m tĂ« mos e pĂ«rfshijmĂ« nĂ« rishikim. PĂ«r ata qĂ« dĂ«shirojnĂ« tĂ« njihen mĂ« afĂ«r me mundĂ«sitĂ« e tij, rekomandojmĂ« tĂ« lexoni/dĂ«gjoni paraqitjen "werf — mjeti ynĂ« pĂ«r CI/CD nĂ« Kubernetes».

DevSpace

  • Thelbi: pĂ«r ata qĂ« duan tĂ« fillojnĂ« tĂ« punojnĂ« nĂ« Kubernetes, por nuk duan tĂ« thellohen shumĂ« nĂ« thellĂ«sirat e tij.
  • GitHub.
  • Statistika e shkurtĂ«r GH: 630 yje, 1912 komitete, 13 kontribues.
  • Gjuha: Go.
  • Licenca: Licenca Apache 2.0.

Zgjidhje nga kompania e njëjtë, që ofron grumbuj të menaxhuar me Kubernetes për zhvillimin ekipor. Utilitarja u krijua për grumbujt komercial, por funksionon gjithashtu shumë mirë me çdo tjetër.

Gjatë ekzekutimit të komandës devspace init në katalogun me projektin, do t'ju ofrohet (në mënyrë interaktive):

  • tĂ« zgjidhni grumbullin tuaj tĂ« punĂ«s Kubernetes,
  • tĂ« pĂ«rdorni atĂ« ekzistues Dockerfile (ose tĂ« gjeneroni njĂ« tĂ« ri) pĂ«r tĂ« krijuar njĂ« konteiner mbi tĂ«,
  • tĂ« zgjidhni njĂ« depo pĂ«r ruajtjen e imazheve tĂ« konteinerĂ«ve dhe kĂ«shtu me radhĂ«.

Pas të gjitha këtyre veprimeve përgatitore, mund të filloni zhvillimin duke ekzekutuar komandën devspace dev. Ajo do të mbledhë kontejnerin, do ta ngarkojë atë në depo, do të publikojë një shpërndarje në klaster dhe do të fillojë përcjelljen e porteve dhe sinkronizimin e kontejnerit me katalogun lokal.

Opcionalisht do të ofrohet të kaloni në kontejner përmes terminalit. Mos e refuzoni, pasi në realitet, kontejneri nis me komandën sleep, dhe për testimin e vërtetë, aplikacioni duhet të niset manualisht.

Në fund, komanda devspace deploy publikon aplikacionin dhe infrastrukturën e lidhur në klaster, pas së cilës gjithçka fillon të funksionojë në mënyrë operative.

Të gjitha konfigurimet e projektit ruhen në skedarin devspace.yaml. Përveç konfigurimeve për mjedisin e zhvillimit, në të mund të gjeni përshkrimin e infrastrukturës, i ngjashëm me manifestet standarde Kubernetes, vetëm shumë i thjeshtuar.

Mjetet për zhvilluesit e aplikacioneve që ekzekutohen në Kubernetes
Arkitektura dhe hapat kryesorë të punës me DevSpace

PĂ«r mĂ« tepĂ«r, nĂ« projekt Ă«shtĂ« e lehtĂ« tĂ« shtosh njĂ« komponent tĂ« paracaktuar (pĂ«r shembull, DBMS MySQL) ose Helm-chart. Lexoni mĂ« shumĂ« nĂ« dokumentacionin — ajo nuk Ă«shtĂ« e komplikuar.

Skaffold

  • Websajti; GitHub.
  • Statistika e shkurtĂ«r e GH: 7423 yje, 4173 komitĂ«, 136 kontribues.
  • Gjuha: Go.
  • Licenca: Licenca Apache 2.0.

Kjo utilitet nga Google pretendon të mbulojë të gjitha nevojat e zhvilluesit, i cili kodi i tij do të ekzekutohet në një klaster Kubernetes. Të fillosh ta përdorësh atë nuk është aq e lehtë si devspace: nuk ka asnjë interaktivitet, përcaktimi i gjuhës dhe automatikisht krijimi Dockerfile këtu nuk do t'ju ofrohen.

MegjithatĂ«, nĂ«se kjo nuk ju frikĂ«son — ja se çfarĂ« lejon tĂ« bĂ«ni Skaffold:

  • TĂ« monitoroni ndryshimet nĂ« kodin burimor.
  • TĂ« sinkronizoni atĂ« me kontejnerin e pod-it, nĂ«se ai nuk kĂ«rkon ndĂ«rtim.
  • TĂ« ndĂ«rtoni kontejnerĂ« me kodin, nĂ«se gjuha e programimit Ă«shtĂ« interpretues, ose tĂ« kompiloni artefaktet dhe t'i paketoni ato nĂ« kontejnerĂ«.
  • Imazhet e marra t'i kontrolloni automatikisht me ndihmĂ«n e container-structure-test.
  • TĂ« etiketoni dhe ngarkoni imazhet nĂ« Docker Registry.
  • TĂ« zhvilloni aplikacione nĂ« klaster, duke pĂ«rdorur kubectl, Helm ose kustomize.
  • TĂ« bĂ«ni pĂ«rcjelljen e porteve.
  • TĂ« debuggoni aplikacione tĂ« shkruara nĂ« Java, Node.js, Python.

Workflow nĂ« variacione tĂ« ndryshme pĂ«rshkruhet nĂ« mĂ«nyrĂ« deklarative nĂ« skedarin skaffold.yaml. PĂ«r projektin mund tĂ« pĂ«rcaktoni gjithashtu disa profile, nĂ« tĂ« cilat mund tĂ« ndryshoni pjesĂ«risht ose plotĂ«sisht fazat e ndĂ«rtimit dhe shpĂ«rndarjes. PĂ«r shembull, pĂ«r zhvillimin, tĂ« pĂ«rcaktoni njĂ« imazh bazĂ« tĂ« pĂ«rshtatshĂ«m pĂ«r zhvilluesin, dhe pĂ«r staging dhe production — minimal (+ tĂ« pĂ«rdorni securityContext tĂ« kontejnerĂ«ve apo tĂ« ribĂ«rni klasterin nĂ« tĂ« cilin aplikacioni do tĂ« shpĂ«rndahet).

Ndërtimi i konteinerëve Docker mund të bëhet lokal ose në distancë: në Google Cloud Build apo në një grup me ndihmën e Kaniko. Po ashtu, përkrahja jepet për Bazel dhe Jib Maven/Gradle. Për etiketimin, Skaffold mbështet shumë strategji: sipas hash-it të commit git, datës/ora, shifrat sha256 të burimeve, etj.

Veçanërisht vlen të përmendet mundësia e testimit të konteinerëve. Korniza e përmendur container-structure-test ofron metodat e mëposhtme të verifikimit:

  • Ekzekutimi i komandave nĂ« kontekstin e konteinerit duke monitoruar statuset e daljes dhe duke verifikuar 'rezultatin' tekstual tĂ« komandĂ«s.
  • Kontrolli i pranisĂ« sĂ« skedave nĂ« konteiner dhe pĂ«rputhja e atributeve me ato tĂ« caktuara.
  • Kontrolli i pĂ«rmbajtjes sĂ« skedave pĂ«rmes shprehjeve tĂ« rregullta.
  • Krahasimi i metadatas sĂ« imazhit (ENV, ENTRYPOINT, VOLUMES etj.).
  • Kontrolli i pĂ«rputhshmĂ«risĂ« sĂ« licencave.

Sinkronizimi i skedave me konteinerin realizohet në një mënyrë që nuk është më e optimizuar: Skaffold thjesht krijon një arkiv me burimet, e kopjon dhe e nxjerr në konteiner (duhet të jetë instaluar tar). Prandaj, nëse detyra juaj kryesore është sinkronizimi i kodit, më mirë të shikoni një zgjidhje të specializuar (ksync).

Mjetet për zhvilluesit e aplikacioneve që ekzekutohen në Kubernetes
Hapat kryesorë të punës Skaffold

NĂ« tĂ«rĂ«si, ky mjet nuk lejon tĂ« abstrahohet nga manifestet Kubernetes dhe nuk ka asnjĂ« interaktivitet, prandaj mund tĂ« duket i komplikuar pĂ«r t'u mĂ«suar. Por nĂ« kĂ«tĂ« gjĂ«, qĂ«ndron edhe shkĂ«lqimi i tij — liria e madhe e veprimit.

Garden

  • Websajti; GitHub.
  • Statistika e shkurtĂ«r GH: 1063 yje, 1927 commit-e, 17 kontributorĂ«.
  • Gjuha: TypeScript (planifikohet tĂ« ndahet projekti nĂ« disa komponentĂ«, disa prej tĂ« cilĂ«ve do tĂ« jenĂ« nĂ« Go, si dhe tĂ« krijohet njĂ« SDK pĂ«r krijimin e shtesave nĂ« TypeScript/JavaScript dhe Go).
  • Licenca: Licenca Apache 2.0.

Ashtu si Skaffold, Garden është i fokusuar në automatizimin e proceseve të dorëzimit të kodit të aplikacionit në klasterin K8s. Për këtë, së pari duhet të përshkruhet struktura e projektit në një skedar YAML, pas së cilës duhet të ekzekutohet komanda garden dev. Ajo do të bëjë gjithë magjinë:

  • Do tĂ« mbledhĂ« konteinerĂ«t me pjesĂ«t e ndryshme tĂ« projektit.
  • Do tĂ« kryejĂ« teste integrimi dhe teste unitore, nĂ«se janĂ« pĂ«rshkruar.
  • Do tĂ« lĂ«shojĂ« tĂ« gjitha komponentĂ«t e projektit nĂ« klaster.
  • NĂ« rast tĂ« ndryshimit tĂ« kodit burimor — do tĂ« rilançojĂ« tĂ« gjithĂ« pipeline-n.

Fokusi kryesor me përdorimin e këtij instrumenti është ndarja e një klasteri të largët nga ekipi i zhvilluesve. Në këtë rast, nëse disa faza e ndërtimit dhe testimit tashmë janë realizuar, kjo do të përshpejtojë ndjeshëm të gjithë procesin, pasi Garden do të mund të përdorë rezultatet e ruajtura.

Moduli i projektit mund të jetë një konteiner, konteiner Maven, diagram Helm, manifest për kubectl apply ose madje një funksion OpenFaaS. Cdo modul mund të tërheqë informacione nga një repository të largët Git. Një modul mund të përcaktojë (apo jo) shërbimet, detyrat dhe testet. Shërbimet dhe detyrat mund të kenë varësi, çka mundëson përcaktimin e rendit të vendosjes së shërbimeve të caktuara, organizimin e ekzekutimit të detyrave dhe testeve.

Garden i ofron përdoruesit një dashboard të bukur (për momentin në gjendje eksperimentale), në të cilin shfaqet grafiku i projektit: komponentët, rendi i ndërtimit, ekzekutimi i detyrave dhe testeve, lidhjet e tyre dhe varësitë. Përmes shfletuesit mund të shikoni log-et e të gjitha komponenteve të projektit dhe të kontrolloni se çfarë jep çdo komponent përmes HTTP (nëse, natyrisht, për të është shpallur një burim ingress).

Mjetet për zhvilluesit e aplikacioneve që ekzekutohen në Kubernetes
Paneli për Garden

Ky instrument ka gjithashtu një mod hot-reload, i cili thjesht sinkronizon ndryshimet e skripteve me konteinerin në klaster, duke përshpejtuar shumë procesin e debug-ut të aplikacionit. Garden ka një dokumentacioni dhe një grup të mirë shembujsh, që lejojnë një adaptim të shpejtë dhe fillim të përdorimit. Për më tepër, shumë kohë më parë ne publikuam përkthimi i artikullit nga autorët e tij.

Përfundim

Natyrisht, ky listë nuk përfshin të gjitha mjetet për zhvillimin dhe debug-un e aplikacioneve në Kubernetes. Ka shumë mjete të tjera jashtëzakonisht të dobishme dhe praktike, të cilat meritojnë, nëse jo një artikull të veçantë, të paktën një përmendje. Na tregoni se çfarë përdorni, cilat probleme keni hasur dhe si i keni zgjidhur ato!

P.S.

Lexoni gjithashtu në blogun tonë:

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster