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

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

Një qasje moderne ndaj operacioneve zgjidh shumë probleme urgjente të biznesit. Kontejnerët dhe orkestruesit e bëjnë të lehtë shkallëzimin e projekteve të çdo kompleksiteti, thjeshtojnë lëshimin e versioneve të reja, i bëjnë ato më të besueshme, por në të njëjtën kohë krijojnë probleme shtesë për zhvilluesit. Programuesi, para së gjithash, kujdeset për kodin e tij: arkitekturën, cilësinë, performancën, elegancën - dhe jo se si do të funksionojë në Kubernetes dhe si ta testojë dhe korrigjojë atë pasi të ketë bërë ndryshime qoftë edhe minimale. Prandaj, është gjithashtu mjaft e natyrshme që mjetet për Kubernetes po zhvillohen në mënyrë aktive, duke ndihmuar në zgjidhjen e problemeve edhe të zhvilluesve më "arkaikë" dhe duke i lejuar ata të përqendrohen në gjënë kryesore.

Ky përmbledhje ofron informacion të shkurtër për disa nga mjetet që e bëjnë jetën më të lehtë për një programues, kodi i të cilit ekzekutohet në pod'ax të një grupi Kubernetes.

Ndihmës të thjeshtë

Kubectl-debug

  • Në fund të fundit: shtoni kontejnerin tuaj në një Pod dhe shikoni se çfarë ndodh në të.
  • GitHub.
  • Statistikat e shkurtra të GH: 715 yje, 54 angazhime, 9 kontribues.
  • Gjuha: Shko.
  • Licenca: Licenca Apache 2.0.

Kjo shtojcë për kubectl ju lejon të krijoni një kontejner shtesë brenda podit të interesit, i cili do të ndajë hapësirën e emrave të procesit me kontejnerët e tjerë. Në të mund të korrigjoni funksionimin e pod: kontrolloni rrjetin, dëgjoni trafikun e rrjetit, bëni një pjesë të procesit të interesit, etj.

Ju gjithashtu mund të kaloni në kontejnerin e procesit duke ekzekutuar chroot /proc/PID/root - kjo mund të jetë shumë e përshtatshme kur ju duhet të merrni një guaskë rrënjë në një enë për të cilën është vendosur në manifest securityContext.runAs.

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

Teleprezenca

  • Në fund të fundit: transferoni aplikacionin në kompjuterin tuaj. Zhvilloni dhe korrigjoni në nivel lokal.
  • Faqe; GitHub.
  • Statistikat e shkurtra të GH: 2131 yje, 2712 angazhime, 33 kontribues.
  • Gjuha: Python.
  • Licenca: Licenca Apache 2.0.

Ideja e këtij snap-in është të lëshojë një kontejnerë me aplikacionin në kompjuterin e përdoruesit lokal dhe të proksojë të gjithë trafikun nga grupi tek ai dhe mbrapa. Kjo qasje ju lejon të zhvilloni në nivel lokal thjesht duke redaktuar skedarët në IDE-në tuaj të preferuar: rezultatet do të jenë të disponueshme menjëherë.

Përparësitë e ekzekutimit në nivel lokal janë komoditeti i modifikimeve dhe rezultateve të menjëhershme, aftësia për të korrigjuar aplikacionin në mënyrën e zakonshme. E keqja është se kërkon shpejtësinë e lidhjes, e cila është veçanërisht e dukshme kur duhet të punoni me një aplikacion me RPS dhe trafik mjaft të lartë. Për më tepër, Telepresence ka probleme me montimet e volumit në Windows, gjë që mund të jetë një kufizim vendimtar për zhvilluesit e mësuar me këtë OS.

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

Ksync

  • Në fund të fundit: sinkronizimi pothuajse i menjëhershëm i kodit me kontejnerin në grup.
  • GitHub.
  • Statistikat e shkurtra të GH: 555 yje, 362 angazhime, 11 kontribues.
  • Gjuha: Shko.
  • Licenca: Licenca Apache 2.0.

Programi ju lejon të sinkronizoni përmbajtjen e një drejtorie lokale me drejtorinë e një kontejneri që funksionon në grup. Një mjet i tillë është i përsosur për zhvilluesit në gjuhët e programimit të skriptimit, problemi kryesor i të cilëve është dërgimi i kodit në një kontejner që funksionon. Ksync është krijuar për të lehtësuar këtë dhimbje koke.

Kur inicializohet një herë nga komanda ksync init në grup krijohet një DaemonSet, i cili përdoret për të monitoruar gjendjen e sistemit të skedarëve të kontejnerit të zgjedhur. Në kompjuterin e tij lokal, zhvilluesi ekzekuton komandën ksync watch, i cili monitoron konfigurimet dhe ekzekuton sinkronizimi, i cili sinkronizon drejtpërdrejt skedarët me grupin.

E tëra që mbetet është të udhëzojmë ksync se çfarë të sinkronizojë me çfarë. Për shembull, kjo komandë:

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

...do të krijojë një vëzhgues të quajtur myprojecte cila do të kërkojë një pod me një etiketë app=backend dhe përpiquni të sinkronizoni direktorinë lokale /home/user/myproject/ me katalog /var/www/myproject/ në kontejnerin e quajtur php.

Probleme dhe shënime mbi ksync nga përvoja jonë:

  • Duhet të përdoret në nyjet e grupimit Kubernetes overlay2 si një drejtues ruajtjeje për Docker. Shërbimi nuk do të funksionojë me asnjë tjetër.
  • Kur përdorni Windows si një OS klient, vëzhguesi i sistemit të skedarëve mund të mos funksionojë siç duhet. Ky gabim u vu re kur punoni me drejtori të mëdha - me një numër të madh skedarësh dhe drejtorish të mbivendosur. Ne krijuam çështje përkatëse në projektin e sinkronizimit, por ende nuk ka përparim në të (që nga fillimi i korrikut).
  • Përdor skedarin .stignore për të specifikuar shtigjet ose modelet e skedarëve që nuk kanë nevojë të sinkronizohen (për shembull, drejtoritë app/cache и .git).
  • Si parazgjedhje, ksync do të rifillojë kontejnerin sa herë që skedarët ndryshojnë. Për Node.js kjo është e përshtatshme, por për PHP është krejtësisht e panevojshme. Është më mirë të fikni opcache dhe të përdorni flamurin --reload=false.
  • Konfigurimi mund të korrigjohet gjithmonë në $HOME/.ksync/ksync.yaml.

Kungull

  • Në fund të fundit: proceset e korrigjimit direkt në grup.
  • GitHub.
  • Statistikat e shkurtra të GH: 1154 yje, 279 angazhime, 23 kontribues.
  • Gjuha: Shko.
  • Licenca: Licenca Apache 2.0.

Ky mjet është projektuar për korrigjimin e proceseve direkt në pods. Shërbimi është i thjeshtë dhe në mënyrë interaktive ju lejon të zgjidhni korrigjuesin e dëshiruar (Shikoni më poshtë) dhe emri + pod, në procesin e të cilit duhet të ndërhyni. Aktualisht i mbështetur:

  • delve - për aplikacionet Go;
  • GDB - përmes telekomandës së synuar + përcjellja e portit;
  • Përcjellja e portit JDWP për korrigjimin e aplikacioneve Java.

Në anën IDE, mbështetja është e disponueshme vetëm në VScode (duke përdorur zgjerim), megjithatë, planet për vitin aktual (2019) përfshijnë Eclipse dhe Intellij.

Për të korrigjuar proceset, Squash drejton një enë të privilegjuar në nyjet e grupimit, kështu që së pari duhet të njiheni me aftësitë mënyra e sigurt për të shmangur problemet e sigurisë.

Zgjidhje të plota

Le të kalojmë në artilerinë e rëndë - më shumë projekte "në shkallë të gjerë" të krijuara për të përmbushur menjëherë shumë nga nevojat e zhvilluesve.

NB: Në këtë listë, sigurisht, ka një vend për programin tonë me burim të hapur werf (i njohur më parë si dapp). Sidoqoftë, ne kemi shkruar dhe folur tashmë për të më shumë se një herë, dhe për këtë arsye vendosëm të mos e përfshijmë atë në rishikim. Për ata që dëshirojnë të njihen më shumë me aftësitë e tij, ne rekomandojmë leximin/dëgjimin e raportit "werf është mjeti ynë për CI/CD në Kubernetes'.

DevSpace

  • Në fund të fundit: për ata që duan të fillojnë të punojnë në Kubernetes, por nuk duan të gërmojnë thellë në xhunglën e saj.
  • GitHub.
  • Statistikat e shkurtra të GH: 630 yje, 1912 angazhime, 13 kontribues.
  • Gjuha: Shko.
  • Licenca: Licenca Apache 2.0.

Një zgjidhje nga kompania me të njëjtin emër, e cila ofron grupe të menaxhuara me Kubernetes për zhvillimin e ekipit. Shërbimi u krijua për grupe komerciale, por funksionon shkëlqyeshëm me të tjerët.

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

  • zgjidhni një grup pune Kubernetes,
  • përdorni ekzistuese Dockerfile (ose gjeneroni një të re) për të krijuar një enë bazuar në të,
  • zgjidhni një depo për ruajtjen e imazheve të kontejnerëve, etj.

Pas gjithë këtyre hapave përgatitor, mund të filloni zhvillimin duke ekzekutuar komandën devspace dev. Ai do të ndërtojë kontejnerin, do ta ngarkojë atë në depo, do të hapë vendosjen në grup dhe do të fillojë përcjelljen e portit dhe sinkronizimin e kontejnerit me direktorinë lokale.

Opsionale, do t'ju kërkohet të zhvendosni terminalin në kontejner. Ju nuk duhet të refuzoni, sepse në realitet kontejneri fillon me komandën e gjumit, dhe për testim real, aplikacioni duhet të lansohet manualisht.

Më në fund, ekipi devspace deploy nxjerr aplikacionin dhe infrastrukturën e lidhur në grup, pas së cilës gjithçka fillon të funksionojë në modalitetin luftarak.

I gjithë konfigurimi i projektit ruhet në një skedar devspace.yaml. Përveç cilësimeve të mjedisit të zhvillimit, mund të gjeni gjithashtu një përshkrim të infrastrukturës në të, i ngjashëm me manifestimet standarde të Kubernetes, vetëm të thjeshtuar shumë.

Mjete për zhvilluesit e aplikacioneve që funksionojnë në Kubernetes
Arkitektura dhe fazat kryesore të punës me DevSpace

Përveç kësaj, është e lehtë të shtoni një komponent të paracaktuar (për shembull, një MySQL DBMS) ose një diagram Helm në projekt. Lexo më shumë në dokumentacionin - nuk është e komplikuar.

Skeli

  • Faqe; GitHub.
  • Statistikat e shkurtra të GH: 7423 yje, 4173 angazhime, 136 kontribues.
  • Gjuha: Shko.
  • Licenca: Licenca Apache 2.0.

Ky mjet i Google pretendon se mbulon të gjitha nevojat e një zhvilluesi, kodi i të cilit do të funksionojë disi në një grup Kubernetes. Fillimi i përdorimit të tij nuk është aq i lehtë sa devspace: pa interaktivitet, zbulim gjuhësor dhe krijim automatik Dockerfile ata nuk do t'ju ofrojnë këtu.

Sidoqoftë, nëse kjo nuk ju tremb, ja çfarë ju lejon Skaffold të bëni:

  • Gjurmo ndryshimet e kodit burimor.
  • Sinkronizoni atë me kontejnerin e pod nëse nuk kërkon montim.
  • Mblidhni kontejnerë me kod, nëse gjuha është interpretuar, ose përpiloni objekte dhe paketoni ato në kontejnerë.
  • Imazhet që rezultojnë kontrollohen automatikisht duke përdorur kontejner-strukturë-provë.
  • Etiketimi dhe ngarkimi i imazheve në Regjistrin Docker.
  • Vendosni një aplikacion në një grup duke përdorur kubectl, Helm ose kustomize.
  • Kryeni transferimin e portit.
  • Debug aplikacionet e shkruara në Java, Node.js, Python.

Rrjedha e punës në variacione të ndryshme përshkruhet në mënyrë deklarative në skedar skaffold.yaml. Për një projekt, ju gjithashtu mund të përcaktoni disa profile në të cilat mund të ndryshoni pjesërisht ose plotësisht fazat e montimit dhe vendosjes. Për shembull, për zhvillim, specifikoni një imazh bazë të përshtatshëm për zhvilluesin, dhe për vendosjen dhe prodhimin - një minimal (+ përdorim securityContext kontejnerët ose ripërcaktoni grupin në të cilin do të vendoset aplikacioni).

Kontejnerët Docker mund të ndërtohen në nivel lokal ose në distancë: në Ndërtimi i Google Cloud ose në një grup duke përdorur Kaniko. Bazel dhe Jib Maven/Gradle janë gjithashtu të mbështetur. Për etiketimin, Skaffold mbështet shumë strategji: nga git commit hash, data/ora, sha256-shuma e burimeve, etj.

Më vete, vlen të përmendet mundësia e testimit të kontejnerëve. Korniza tashmë e përmendur e testit të strukturës së kontejnerit ofron metodat e mëposhtme të verifikimit:

  • Ekzekutimi i komandave në kontekstin e një kontejneri me gjurmimin e statuseve të daljes dhe kontrollimin e daljes së tekstit të komandës.
  • Kontrollimi i pranisë së skedarëve në kontejner dhe përputhja me atributet e specifikuara.
  • Kontrolli i përmbajtjes së skedarit duke përdorur shprehje të rregullta.
  • Verifikimi i meta të dhënave të imazhit (ENV, ENTRYPOINT, VOLUMES dhe kështu me radhë.).
  • Kontrollimi i përputhshmërisë së licencës.

Sinkronizimi i skedarëve me kontejnerin nuk kryhet në mënyrën më optimale: Skaffold thjesht krijon një arkiv me burimet, e kopjon dhe e shpaketon në kontejner (katrani duhet të instalohet). Prandaj, nëse detyra juaj kryesore është sinkronizimi i kodit, është më mirë të shikoni drejt një zgjidhjeje të specializuar (ksync).

Mjete për zhvilluesit e aplikacioneve që funksionojnë në Kubernetes
Fazat kryesore të funksionimit të Skaffold

Në përgjithësi, mjeti nuk ju lejon të abstraktoni nga manifestimet e Kubernetes dhe nuk ka ndonjë ndërveprim, kështu që mund të duket e vështirë për t'u zotëruar. Por ky është edhe avantazhi i tij - liri më e madhe veprimi.

Kopsht

  • Faqe; GitHub.
  • Statistikat e shkurtra të GH: 1063 yje, 1927 angazhime, 17 kontribues.
  • Gjuha: TypeScript (është planifikuar të ndahet projekti në disa komponentë, disa prej të cilëve do të jenë në Go, dhe gjithashtu të bëhet një SDK për krijimin e shtesave në TypeScript/JavaScript dhe Go).
  • Licenca: Licenca Apache 2.0.

Ashtu si Skaffold, Garden synon të automatizojë proceset e dërgimit të kodit të aplikacionit në grupin K8s. Për ta bërë këtë, së pari duhet të përshkruani strukturën e projektit në një skedar YAML dhe më pas të ekzekutoni komandën garden dev. Ajo do të bëjë të gjithë magjinë:

  • Mblidhni kontejnerë me pjesë të ndryshme të projektit.
  • Kryen testet e integrimit dhe të njësisë, nëse janë përshkruar.
  • Përmbledh të gjithë komponentët e projektit në grup.
  • Nëse kodi burim ndryshon, ai do të rifillojë të gjithë tubacionin.

Fokusi kryesor i përdorimit të këtij mjeti është ndarja e një grupi të largët me një ekip zhvillimi. Në këtë rast, nëse disa nga hapat e ndërtimit dhe testimit janë bërë tashmë, kjo do të përshpejtojë ndjeshëm të gjithë procesin, pasi Garden do të jetë në gjendje të përdorë rezultatet e ruajtura në memorie.

Një modul projekti mund të jetë një kontejner, një enë Maven, një tabelë Helm, një manifest për kubectl apply apo edhe një funksion OpenFaaS. Për më tepër, cilido nga modulet mund të tërhiqet nga një depo e largët Git. Një modul mund ose nuk mund të përcaktojë shërbime, detyra dhe teste. Shërbimet dhe detyrat mund të kenë varësi, kështu që ju mund të përcaktoni sekuencën e vendosjes së një shërbimi të caktuar dhe të organizoni nisjen e detyrave dhe testeve.

Garden i ofron përdoruesit një pult të bukur (aktualisht në gjendje eksperimentale), i cili shfaq grafikun e projektit: komponentët, sekuenca e montimit, ekzekutimi i detyrave dhe testeve, lidhjet dhe varësitë e tyre. Pikërisht në shfletues, ju mund të shikoni regjistrat e të gjithë komponentëve të projektit dhe të kontrolloni se çfarë nxjerr një komponent i veçantë nëpërmjet HTTP (nëse, sigurisht, deklarohet një burim hyrës për të).

Mjete për zhvilluesit e aplikacioneve që funksionojnë në Kubernetes
Paneli për Kopshtin

Ky mjet ka gjithashtu një modalitet të rifreskimit të nxehtë, i cili thjesht sinkronizon ndryshimet e skriptit me kontejnerin në grup, duke përshpejtuar shumë procesin e korrigjimit të aplikacionit. Kopshti ka një të mirë dokumentacionin dhe jo keq grup shembujsh, duke ju lejuar të mësoheni shpejt me të dhe të filloni ta përdorni. Nga rruga, vetëm kohët e fundit kemi publikuar përkthimi i artikullit nga autorët e saj.

Përfundim

Sigurisht, kjo listë e mjeteve për zhvillimin dhe korrigjimin e aplikacioneve në Kubernetes nuk kufizohet në. Ka shumë më tepër shërbime shumë të dobishme dhe praktike që janë të denjë, nëse jo një artikull i veçantë, atëherë të paktën një përmendje. Na tregoni se çfarë përdorni, çfarë problemesh keni hasur dhe si i keni zgjidhur ato!

PS

Lexoni edhe në blogun tonë:

Burimi: www.habr.com

Shto një koment