
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.
- .
- 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ë .
Telepresence
- Thelbi: transfero aplikacionin në kompjuterin tënd. Zhvillo dhe debugo lokal.
- ; .
- 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 .
Ksync
- Thelbi: përgj nearly instant synchronization of code with the container in the cluster.
- .
- 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 , 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
overlay2si 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 nĂ« projektin syncthing, por deri tani (nga fillimi i korrikut) nuk ka progres.
- Përdorni skedarin për të përcaktuar shtegtarët ose shabllonet e skedarëve që nuk duhet të sinkronizohen (p.sh., katalogët
app/cachedhe.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.
- .
- 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 ), 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 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 (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 "».
DevSpace
- Thelbi: për ata që duan të fillojnë të punojnë në Kubernetes, por nuk duan të thellohen shumë në thellësirat e tij.
- .
- 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.

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Ă« â ajo nuk Ă«shtĂ« e komplikuar.
Skaffold
- ; .
- 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 .
- 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ë apo në një grup me ndihmën e . 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,VOLUMESetj.). - 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).

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
- ; .
- 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ë ), 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).

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ë dhe një , që lejojnë një adaptim të shpejtë dhe fillim të përdorimit. Për më tepër, shumë kohë më parë ne publikuam 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
