
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ë.
- .
- 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ë .
Telepresence
- Thelbi: transfero aplikacionin në kompjuterin tënd. Zhvilloni dhe debugo lokalisht.
- ; .
- 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 .
Ksync
- Thelbi: sinkronizimi pothuajse i menjëhershëm i kodit me kontejnerin në klaster.
- .
- 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 , 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
overlay2si 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 nĂ« projektin syncthing, por deri tani nuk ka progres (qĂ« nga fillimi i korrikut).
- përdorni skedarin për të specifikuar rrugët ose modelet e skedarëve që nuk duhet të sinkronizohen (për shembull, katalogët
app/cachedhe.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.
- .
- 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ë ), 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 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 (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 "».
DevSpace
- Thelbi: për ata që duan të fillojnë të punojnë në Kubernetes, por nuk duan të theksohen thellë në brendësinë e tij.
- .
- 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.

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Ă« â Ă«shtĂ« e thjeshtĂ«.
Skaffold
- ; .
- 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ë .
- 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ë ose në klaster duke përdorur . 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,VOLUMESetj.). - 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).

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

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ë dhe një të këndshëm , që lejojnë të filloni shpejt dhe të filloni ta përdorni. Për më tepër, vetëm së fundmi kemi publikuar 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
