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

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

Qashtu i shkurtuar nĂ« menaxhimin e infrastrukturĂ«s zgjidh njĂ« sĂ«rĂ« problemesh tĂ« rĂ«ndĂ«sishme pĂ«r biznesin. KontejnerĂ«t dhe orkestruesit lejojnĂ« shkallĂ«zimin e lehtĂ« tĂ« projekteve tĂ« çdo kompleksiteti, thjeshtojnĂ« lĂ«shimin e versioneve tĂ« reja, duke i bĂ«rĂ« ato mĂ« tĂ« besueshme, por po ashtu krijojnĂ« probleme tĂ« reja pĂ«r zhvilluesit. Programuesi, para sĂ« gjithash, Ă«shtĂ« i shqetĂ«suar pĂ«r kodin e tij: arkitekturĂ«n, cilĂ«sinĂ«, performancĂ«n, elegancĂ«n — dhe jo pĂ«r mĂ«nyrĂ«n se si do tĂ« implementohet nĂ« Kubernetes dhe se si do tĂ« testohet dhe rregullohet pas edhe ndyshimeve mĂ« minimale. Prandaj Ă«shtĂ« e natyrshme qĂ« po zhvillohen me shpejtĂ«si mjete pĂ«r Kubernetes, qĂ« ndihmojnĂ« tĂ« zgjidhin problemet edhe pĂ«r zhvilluesit mĂ« "arkaik", duke u lejuar atyre tĂ« pĂ«rqendrohen te e rĂ«ndĂ«sishmja.

Ky pĂ«rmbledhje paraqet informacion tĂ« shkurtuar mbi disa mjete qĂ« lehtĂ«sojnĂ« jetĂ«n e programuesve, tĂ« cilĂ«t kodet e tyre janĂ« duke funksionuar nĂ« pod’ax e Kubernetes.

Ndihmësit e thjeshtë

Kubectl-debug

  • Thelbi: shtoni konteinerin tuaj nĂ« Pod dhe shihni se çfarĂ« po ndodh nĂ« tĂ«.
  • GitHub.
  • Statistika tĂ« shkurtuara tĂ« GH: 715 yje, 54 komite, 9 kontributorĂ«.
  • Gjuha: Go.
  • Licenca: Apache License 2.0.

Ky kyçës i përgjigjet lidhjes të midis pod-it të interesit një konteineri shtesë, duke ndarë hapësirën e emrave të proceseve me kontejnerët e tjerë. Në të mund të bëni depërtime të funksionimit të pod-it: të kontrolloni funksionimin e rrjetit, të dëgjoni trafikun e rrjetit, të bëni strace të procesit të interesit, etj.

Gjithashtu mund tĂ« kaloni nĂ« konteineren e procesit, duke kryer chroot /proc/PID/root — kjo Ă«shtĂ« shumĂ« e dobishme kur duhen marrĂ« shell root nĂ« kontejnerin, pĂ«r tĂ« cilin Ă«shtĂ« vendosur nĂ« manifest securityContext.runAs.

Kjo mjet është i thjeshtë dhe efektiv, kështu që mund të jetë i dobishëm për çdo zhvillues. Më shumë për të kemi shkruar në një artikull të veçantë.

Telepresence

  • Thelbi: transfero aplikacionin nĂ« kompjuterin tĂ«nd. Zhvilloni dhe debugo lokalisht.
  • Faqja; GitHub.
  • Statistikat e shkurtĂ«r tĂ« GH: 2131 yje, 2712 komitete, 33 kontribues.
  • Gjuha: Python.
  • Licenca: Apache License 2.0.

Idea e kësaj pajisjeje është nisja e një kontejneri me aplikacionin në kompjuterin lokal të përdoruesit dhe proksimi i gjithë trafikut nga klasteri në të dhe prapa. Ky qasje lejon zhvillimin lokal, duke thjesht ndryshuar skedarët në IDE-në tuaj të preferuar: rezultatet do të jenë menjëherë të disponueshme.

Përparësitë e lançimit lokal janë lehtësia e korrigjimeve dhe rezultati i menjëhershëm, si dhe mundësia për të debuguar aplikacionin në një mënyrë të njohur. Ndër defektet është kërkesa për shpejtësinë e lidhjes, e cila bëhet veçanërisht e dukshme kur është e nevojshme të punohet me një aplikacion që ka RPS dhe trafik të mjaftueshëm të lartë. Për më tepër, Telepresence ka probleme me mount volumes në Windows, çka mund të bëhet një kufizim vendimtar për zhvilluesit që janë mësuar me këtë sistem operativ.

Ne tashmë kemi ndarë përvojën tonë të përdorimit të Telepresence këtu.

Ksync

  • Thelbi: sinkronizimi pothuajse i menjĂ«hershĂ«m i kodit me kontejnerin nĂ« klaster.
  • GitHub.
  • Statistika e shkurtĂ«r e GH: 555 yje, 362 commit-e, 11 kontributorĂ«.
  • Gjuha: Go.
  • Licenca: Apache License 2.0.

Utilitari lejon të sinkronizoni përmbajtjen e drejtorisë lokale me katalogun e kontejnerit të ekzekutuar në klaster. Ky mjet është i përshtatshëm për zhvilluesit që përdorin gjuhë programimi skenar, problemi kryesor i të cilëve është dërgimi i kodit në një kontejner në punë. Ksync është krijuar për të lehtësuar këtë dhimbje koke.

Në një inicializim të vetëm me komandën ksync init Në klaster krijohet një DaemonSet, i cili përdoret për të monitoruar gjendjen e sistemit të skedarëve të kontejnerit të përzgjedhur. Në kompjuterin e tij lokal, zhvilluesi ekzekuton komandën ksync watch, e cila monitoron konfigurimet dhe aktivizon syncthing, e cila kryen sinkronizimin e drejtpërdrejtë të skedarëve me klasterin.

Ka mbetur të udhëzohet ksync se çfarë të sinkronizojë dhe me çfarë. Për shembull, një komandë e 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 me etiketën app=backend dhe do të përpiqet të sinkronizojë drejtorinë lokale /home/user/myproject/ me katalogun /var/www/myproject/ në kontejnerin e quajtur php.

Problemet dhe shënimet për ksync nga eksperience jonë:

  • NĂ« nyjet e klasterit Kubernetes duhet tĂ« pĂ«rdoret overlay2 si driveri i ruajtjes pĂ«r Docker. AsnjĂ« utilitar tjetĂ«r nuk do tĂ« funksionojĂ«.
  • Kur pĂ«rdoret Windows si sistem operational tĂ« klientit, funksionimi i watcher-it tĂ« sistemit tĂ« skedarĂ«ve mund tĂ« jetĂ« i pacaktuar. Ky defekt Ă«shtĂ« vĂ«nĂ« re gjatĂ« punĂ«s me katalogĂ« tĂ« mĂ«dhenj — me njĂ« numĂ«r tĂ« madh skedarĂ«sh dhe direktorish tĂ« palosura. Kemi krijuar njĂ« problem pĂ«rkatĂ«s nĂ« projektin syncthing, por deri tani nuk ka progres (qĂ« nga fillimi i korrikut).
  • pĂ«rdorni skedarin .stignore pĂ«r tĂ« specifikuar rrugĂ«t ose modelet e skedarĂ«ve qĂ« nuk duhet tĂ« sinkronizohen (pĂ«r shembull, katalogĂ«t app/cache dhe .git).
  • NĂ« mĂ«nyrĂ« tĂ« paracaktuar, ksync do tĂ« ripĂ«rkĂ«thejĂ« kontejnerin pĂ«r çdo ndryshim skedari. Kjo Ă«shtĂ« e dobishme pĂ«r Node.js, por pĂ«r PHP Ă«shtĂ« krejtĂ«sisht e panevojshme. MĂ« mirĂ« Ă«shtĂ« tĂ« çaktivizoni opcache dhe tĂ« pĂ«rdorni flamurin --reload=false.
  • Konfigurimin mund ta korrigjoni gjithmonĂ« nĂ« $HOME/.ksync/ksync.yaml.

Squash

  • Thelbi: debogoni proceset direkt nĂ« klaster.
  • GitHub.
  • Statistika e shkurtĂ«r GH: 1154 yjet, 279 komitete, 23 kontribues.
  • Gjuha: Go.
  • Licenca: Apache License 2.0.

Ky mjet është i destinuar për debogimin e proceseve të drejtpërdrejta në pod'ë. Utilitari është i thjeshtë dhe në modin interaktiv lejon të zgjidhni debogerin e nevojshëm (shih më poshtë) dhe namespace + pod, në procesin e të cilit duhet të ndërhyni. Aktualisht mbështeten:

  • delve — pĂ«r aplikacionet nĂ« Go;
  • GDB — pĂ«rmes target remote + kalimin e portit;
  • kalimin e portit JDWP pĂ«r debogimin e aplikacioneve Java.

Nga ana e IDE, mbështetje ka vetëm në VScode (me anë të shtesës), megjithatë plani për këtë vit (2019) përfshin Eclipse dhe Intellij.

PĂ«r tĂ« debug-uar proceset, Squash nis nĂ« nyjat e klasterit njĂ« kontenier tĂ« privilegjuar, prandaj Ă«shtĂ« e nevojshme tĂ« njiheni sĂ« pari me funksionalitetet e Ń€Đ”Đ¶ĐžĐŒit tĂ« sigurisĂ« pĂ«r tĂ« shmangur probleme me sigurinĂ«.

Zgjidhje komplekse

Po kalojmĂ« nĂ« artilerinĂ« e rĂ«ndĂ« — projekte mĂ« "tĂ« mĂ«dha", tĂ« destinuara pĂ«r tĂ« pĂ«rmbushur menjĂ«herĂ« shumĂ« nevoja tĂ« zhvilluesve.

NB: NĂ« kĂ«tĂ« listĂ«, padyshim qĂ« ka njĂ« vend edhe pĂ«r utilitarin tonĂ« Open Source werf (mĂ« parĂ« e njohur si dapp). SidoqoftĂ«, ne kemi shkruar dhe treguar disa herĂ« pĂ«r tĂ«, ndaj vendosĂ«m ta lĂ«mĂ« jashtĂ« kĂ«tij shqyrtimi. PĂ«r ata qĂ« duan tĂ« njihen mĂ« nga afĂ«r me funksionalitetet e saj, rekomandojmĂ« tĂ« lexojnĂ«/dĂ«gjojnĂ« prezantimin "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Ă« theksohen thellĂ« nĂ« brendĂ«sinĂ« e tij.
  • GitHub.
  • Statistika e shkurtĂ«r e GH: 630 yje, 1912 commit-e, 13 kontribuues.
  • Gjuha: Go.
  • Licenca: Apache License 2.0.

Një zgjidhje nga firma e njëjtë, që ofron klastere të menaxhuara me Kubernetes për zhvillim në ekip. Utilitari u krijua për klastere komerciale, por funksionon shkëlqyer edhe me çfarëdo tjetrë.

Kur ekzekutohet komandën devspace init në katalogun e projektit, do t'ju propozohet (në modin interaktiv):

  • zgjidhni njĂ« Kubernetes-cluster aktiv,
  • pĂ«rdorni atĂ« ekzistues, Dockerfile (ose gjeneroni njĂ« tĂ« ri) pĂ«r tĂ« krijuar njĂ« enĂ« mbi tĂ«,
  • zgjidhni njĂ« depo pĂ«r ruajtjen e imazheve tĂ« enĂ«ve, etj.

Pas këtyre veprimeve përgatitore, mund të filloni zhvillimin duke e ekzekutuar komandën devspace dev. Ajo do të përgatisë enën, do ta ngarkojë atë në depo, do të vendosë një deployment në cluster dhe do të fillojë kalimin e portave dhe sinkronizimin e enës me katalogun lokal.

Opcionalisht, do të ofrohet kalimi me terminal në enë. Mos e refuzoni, pasi në realitet enë e fillon me komandën sleep, dhe për testimin real, aplikacioni duhet të niset manualisht.

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

Të gjitha konfigurimet e projektit ruhet në dosjen devspace.yaml. Përveç konfigurimeve të mjedisit për zhvillim, aty mund të gjeni edhe përshkrimin e infrastrukturës, i ngjashëm me manifestet standarde të Kubernetes, vetëm shumë i thjeshtuar.

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

PĂ«r mĂ« tepĂ«r, Ă«shtĂ« e lehtĂ« tĂ« shtosh njĂ« komponent tĂ« paracaktuar nĂ« projekt (p.sh., DBMS MySQL) ose njĂ« Helm-chart. MĂ« shumĂ« informacion mund tĂ« gjeni nĂ« dokumentacion — Ă«shtĂ« e thjeshtĂ«.

Skaffold

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

Ky mjet nga Google pretendon tĂ« pĂ«rmbushĂ« tĂ« gjitha nevojat e zhvilluesit, i cili kodohet, nĂ« njĂ«farĂ« mĂ«nyre, pĂ«r t’u ekzekutuar nĂ« njĂ« klaster Kubernetes. TĂ« fillosh ta pĂ«rdorĂ«sh nuk Ă«shtĂ« kaq e thjeshtĂ« sa devspace: nuk ka interaktivitet, pĂ«rcaktim gjuhe ose krijim automatik Dockerfile kĂ«tu nuk do t’ju ofrohet.

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

  • TĂ« monitorojĂ« ndryshimet nĂ« kodin burimor.
  • TĂ« sinkronizojĂ« kĂ«tĂ« me kontejnerin e pod, nĂ«se nuk kĂ«rkon ndĂ«rtim.
  • TĂ« ndĂ«rtojĂ« kontejnerĂ«t me kodin, nĂ«se gjuha e programimit Ă«shtĂ« interpretuese, ose tĂ« kompilojĂ« artefaktet dhe t’i paketojĂ« ato nĂ« kontejnerĂ«.
  • TĂ« verifikojĂ« automatikisht imazhet e krijuara me anĂ« tĂ« container-structure-test.
  • TĂ« etiketojĂ« dhe ngarkojĂ« imazhet nĂ« Docker Registry.
  • TĂ« zbulojĂ« aplikacione nĂ« klaster, duke pĂ«rdorur kubectl, Helm ose kustomize.
  • TĂ« bĂ«jĂ« port forwarding.
  • TĂ« debagojĂ« aplikacione tĂ« shkruara nĂ« Java, Node.js, Python.

Workflow në variacione të ndryshme përshkruhet deklarativisht në skedarin skaffold.yaml. Për projektin gjithashtu mund të përcaktoni disa profile, në të cilat mund të ndryshoni pjesërisht ose plotësisht fazat e mbledhjes dhe implementimit. Për shembull, për zhvillimin, përcaktoni një imazh bazë të përshtatshëm për zhvilluesin, ndërsa për staging dhe production - minimal (+ përdorni securityContext të konteinerëve ose r redefinoni klasterin në të cilin aplikacioni do të jetë i veprueshëm).

Ndërtohen konteinerët Docker mund të realizohen lokal ose në distancë: në Google Cloud Build ose në klaster duke përdorur Kaniko. Gjithashtu mbështeten Bazel dhe Jib Maven/Gradle. Për etiketimin, Skaffold mbështet shumë strategji: sipas hash-it të commit-it git, datës/orës, sha256-ës së burimeve, etj.

Veçanërisht është e rëndësishme të theksohet mundësia e testimit të konteinerëve. Që e përmendur më herët, framework-u container-structure-test ofron metodat e mëposhtme të verifikimit:

  • Ekzekutimi i komandave nĂ« kontekstin e konteinerit me ndjekjen e statusit tĂ« daljes dhe kontrollin e “dĂ«shmitarĂ«ve” tĂ« komandĂ«s.
  • Kontrolli i pranisĂ« sĂ« skedarĂ«ve nĂ« konteiner dhe pĂ«rputhshmĂ«ria e atributeve me ato tĂ« caktuara.
  • Kontrolli i pĂ«rmbajtjeve tĂ« skedarĂ«ve sipas shprehjeve tĂ« rregullta.
  • PĂ«rqĂ«ndrimi i metadatat tĂ« imazhit (ENV, ENTRYPOINT, VOLUMES etj.).
  • Kontrolli i pĂ«rputhshmĂ«risĂ« sĂ« licencave.

Sinkronizimi i skedarëve me kontejnerin nuk po bëhet në mënyrën më optimale: Skaffold thjesht krijon një arshiv me burimet, e kopjon atë dhe e shkarkon në kontejner (tar duhet të jetë i instaluar). Prandaj, nëse detyra juaj kryesore është sinkronizimi i kodit, është më mirë të shqyrtoni një zgjidhje të specializuar (ksync).

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

PĂ«rgjithĂ«sisht, ky mjet nuk lejon qĂ« tĂ« abstohej nga manifestet e Kubernetes dhe nuk ka ndonjĂ« interaktivitet, prandaj mund tĂ« duket i vĂ«shtirĂ« pĂ«r t'u mĂ«suar. Por, nĂ« tĂ« njĂ«jtĂ«n kohĂ«, kjo Ă«shtĂ« pĂ«rparĂ«sia e tij — njĂ« liri mĂ« e madhe veprimi.

Garden

  • Faqja; GitHub.
  • Statistika e shkurtĂ«r e GH: 1063 yje, 1927 komitete, 17 kontribues.
  • Gjuha: TypeScript (planifikohet ndarja e projektit nĂ« disa komponentĂ«, disa prej tĂ« cilave do jenĂ« nĂ« Go, si dhe bĂ«ni njĂ« SDK pĂ«r krijimin e shtesave nĂ« TypeScript/JavaScript dhe Go).
  • Licenca: Apache License 2.0.

Si Skaffold, Garden synon në automatizimin e proceseve të shpërndarjes së kodit të aplikacionit në K8s-klastër. Për këtë, fillimisht është e nevojshme të përshkruhet struktura e projektit në një skedar YAML, pas çka do të niset komanda garden dev. Ajo do të bëjë të gjithë magjinë:

  • Do tĂ« ndĂ«rtojĂ« kontejnerĂ«t me pjesĂ« tĂ« ndryshme tĂ« projektit.
  • Do tĂ« kryejĂ« testet e integrimit dhe unit-testet, nĂ«se ato janĂ« pĂ«rshkruar.
  • Do tĂ« nxjerrĂ« tĂ« gjitha komponentĂ«t e projektit nĂ« kluster.
  • NĂ« rastin e ndryshimit tĂ« kodit burimor — do tĂ« rinisĂ« tĂ« gjithĂ« pipeline-in.

Theksi kryesor gjatë përdorimit të këtij instrumenti është në ndarjen e klustrit të largët nga ekipi i zhvilluesve. Në këtë rast, nëse disa faza të ndërtimit dhe testimit tashmë janë bërë, kjo do ta përshpejtojë shumë të gjithë procesin, pasi Garden do të mund të përdorë rezultatet e ruajtura.

Moduli i projektit mund tĂ« jetĂ« njĂ« kontejner, njĂ« kontejner Maven, njĂ« chart Helm, njĂ« manifest pĂ«r kubectl aplikoni ose madje njĂ« funksion OpenFaaS. Çdo modul mund tĂ« tĂ«rhiqet nga njĂ« repository Git i largĂ«t. Moduli mund tĂ« pĂ«rcaktojĂ« (ose jo) shĂ«rbimet, detyrat dhe testet. ShĂ«rbimet dhe detyrat mund tĂ« kenĂ« varĂ«si, duke e bĂ«rĂ« tĂ« mundur pĂ«rcaktimin e rendit kronologjik tĂ« shpĂ«rndarjes sĂ« shĂ«rbimeve tĂ« ndryshme, renditjen 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 dhe varësitë e tyre. Drejt në shfletues mund të shikoni dhe logjet e të gjitha componenteve të projektit, kontrolloni se çfarë jep çdo komponent nëpërmjet HTTP (nëse, natyrisht, për të është shpallur burimi ingress).

Mjetet për zhvilluesit e aplikacioneve që funksionojnë në Kubernetes
Panelet për Garden

Ky mjet ka gjithashtu një mënyrë hot-reload, e cila thjesht sinkronizon ndryshimet e skripteve me kontejnerin në klaster, duke e përshpejtuar shumë procesin e depurimit të aplikacionit. Garden ka një dokumentacija dhe një të këndshëm set të mirë shembujsh, që lejojnë të filloni shpejt dhe të filloni ta përdorni. Për më tepër, vetëm së fundmi kemi publikuar përkthimi i artikullit nga autorët e tij.

Përfundimi

Sigurisht, ky listë nuk i shfrytëzon të gjitha mjetet për zhvillimin dhe depurimin e aplikacioneve në Kubernetes. Ka shumë utilitare të tjera mjaft të dobishme dhe praktike, të cilat meritojnë të përmenden, nëse jo për një artikull të veçantë. Tregoni se me çfarë përdorni, çfarë probleme keni hasur dhe si i keni zgjidhur!

P.S.

Lexoni gjithashtu në blogun tonë:

Burimi: habr.com

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