Għodod għall-iżviluppaturi ta' applikazzjonijiet li jaħdmu fuq Kubernetes

Għodod għall-iżviluppaturi ta' applikazzjonijiet li jaħdmu fuq Kubernetes

Approċċ modern għall-operazzjonijiet issolvi ħafna problemi urġenti tan-negozju. Kontenituri u orkestraturi jagħmluha faċli biex jiġu skalati proġetti ta 'kwalunkwe kumplessità, jissimplifikaw ir-rilaxx ta' verżjonijiet ġodda, jagħmluhom aktar affidabbli, iżda fl-istess ħin joħolqu problemi addizzjonali għall-iżviluppaturi. Il-programmatur, l-ewwel nett, jimpurtah mill-kodiċi tiegħu: arkitettura, kwalità, prestazzjoni, eleganti - u mhux kif se taħdem f'Kubernetes u kif tittestja u tiddibaggja wara li tagħmel bidliet anke minimi. Għalhekk, huwa wkoll pjuttost naturali li l-għodod għall-Kubernetes qed jiġu żviluppati b'mod attiv, li jgħinu biex isolvu l-problemi ta 'anki l-aktar żviluppaturi "arkajċi" u jippermettulhom jiffokaw fuq il-ħaġa prinċipali.

Din ir-reviżjoni tipprovdi informazzjoni qasira dwar xi wħud mill-għodod li jagħmlu l-ħajja aktar faċli għal programmatur li l-kodiċi tiegħu jimxi fil-pod'ax ta 'cluster Kubernetes.

Helpers sempliċi

Kubectl-debug

  • L-essenza: żid il-kontenitur tiegħek ma' Pod u ara x'jiġri fih.
  • GitHub.
  • Statistika qasira tal-GH: 715 stilel, 54 impenn, 9 kontributuri.
  • Lingwa: Mur.
  • Liċenzja: Apache License 2.0.

Dan il-plugin għal kubectl jippermettilek toħloq kontenitur addizzjonali ġewwa l-pod ta 'interess, li jaqsam l-ispazju tal-isem tal-proċess ma' kontenituri oħra. Fiha tista 'tiddibaggja l-operat tal-pod: iċċekkja n-netwerk, tisma' traffiku tan-netwerk, tagħmel strace tal-proċess ta 'interess, eċċ.

Tista 'wkoll taqleb għall-kontenitur tal-proċess billi taħdem chroot /proc/PID/root - dan jista 'jkun konvenjenti ħafna meta jkollok bżonn tikseb qoxra ta' l-għeruq f'kontenitur li għalih tkun issettjata fil-manifest securityContext.runAs.

L-għodda hija sempliċi u effettiva, għalhekk tista 'tkun utli għal kull żviluppatur. Aħna ktibna aktar dwarha fi artikolu separat.

Telepreżenza

  • L-essenza: ittrasferixxi l-applikazzjoni għall-kompjuter tiegħek. Żviluppa u debug lokalment.
  • Sit; GitHub.
  • Statistika qasira tal-GH: 2131 stilla, 2712 impenn, 33 kontributur.
  • Lingwa: Python.
  • Liċenzja: Apache License 2.0.

L-idea ta 'dan is-snap-in hija li tniedi kontenitur bl-applikazzjoni fuq il-kompjuter tal-utent lokali u tipprokura t-traffiku kollu mill-cluster lejh u lura. Dan l-approċċ jippermettilek tiżviluppa lokalment billi sempliċement teditja fajls fl-IDE favorit tiegħek: ir-riżultati jkunu disponibbli immedjatament.

Il-vantaġġi tat-tħaddim lokalment huma l-konvenjenza tal-editjar u r-riżultati immedjati, il-kapaċità li tiddibaggja l-applikazzjoni bil-mod tas-soltu. L-iżvantaġġ huwa li huwa eżiġenti fuq il-veloċità tal-konnessjoni, li hija speċjalment notevoli meta jkollok taħdem ma 'applikazzjoni b'RPS u traffiku pjuttost għoli. Barra minn hekk, Telepresence għandha problemi bil-muntaturi tal-volum fuq il-Windows, li tista 'tkun limitazzjoni deċiżiva għall-iżviluppaturi mdorrijin b'dan l-OS.

Diġà qsamna l-esperjenza tagħna tal-użu tat-Telepresence hawn.

Ksync

  • L-essenza: sinkronizzazzjoni kważi istantanja tal-kodiċi mal-kontenitur fil-cluster.
  • GitHub.
  • Statistika qasira tal-GH: 555 stilel, 362 impenn, 11 kontributuri.
  • Lingwa: Mur.
  • Liċenzja: Apache License 2.0.

L-utilità tippermettilek tissinkronizza l-kontenut ta 'direttorju lokali mad-direttorju ta' kontenitur li jaħdem fil-cluster. Għodda bħal din hija perfetta għall-iżviluppaturi f'lingwi ta 'programmar ta' skripts, li l-problema ewlenija tagħhom hija li jwasslu kodiċi f'kontenitur li qed jaħdem. Ksync hija mfassla biex ittaffi din l-uġigħ ta 'ras.

Meta initialized darba mill-kmand ksync init jinħoloq DaemonSet fil-cluster, li jintuża biex jimmonitorja l-istat tas-sistema tal-fajls tal-kontenitur magħżul. Fuq il-kompjuter lokali tiegħu, l-iżviluppatur imexxi l-kmand ksync watch, li jimmonitorja l-konfigurazzjonijiet u l-ġirjiet sintetizzazzjoni, li jissinkronizza direttament il-fajls mal-cluster.

Li jibqa 'huwa li tagħti struzzjonijiet lil ksync x'jissinkronizza ma' xiex. Per eżempju, dan il-kmand:

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

...se toħloq watcher jismu myprojectli se tfittex pod b'tikketta app=backend u tipprova tissinkronizza d-direttorju lokali /home/user/myproject/ bil-katalgu /var/www/myproject/ fil-kontenitur imsejjaħ php.

Problemi u noti dwar ksync mill-esperjenza tagħna:

  • Għandu jintuża fuq in-nodi tal-cluster Kubernetes overlay2 bħala sewwieq tal-ħażna għal Docker. L-utilità mhux se taħdem ma 'oħrajn.
  • Meta tuża l-Windows bħala OS klijent, l-osservatur tas-sistema tal-fajls jista 'ma jaħdimx b'mod korrett. Dan il-bug kien innutat meta taħdem ma 'direttorji kbar - b'numru kbir ta' fajls u direttorji nested. Ħloqna kwistjoni rilevanti fil-proġett ta' syncthing, iżda għad m'hemm l-ebda progress dwaru (mill-bidu ta' Lulju).
  • Uża fajl .stignore biex tispeċifika mogħdijiet jew mudelli ta' fajls li m'għandhomx għalfejn jiġu sinkronizzati (per eżempju, direttorji app/cache и .git).
  • B'mod awtomatiku, ksync jerġa' jibda l-kontenitur kull meta jinbidlu l-fajls. Għal Node.js dan huwa konvenjenti, iżda għal PHP huwa kompletament bla bżonn. Huwa aħjar li titfi l-opcache u tuża l-bandiera --reload=false.
  • Il-konfigurazzjoni tista 'dejjem tiġi kkoreġuta fi $HOME/.ksync/ksync.yaml.

Squash

  • L-essenza: debug proċessi direttament fil-cluster.
  • GitHub.
  • Statistika qasira tal-GH: 1154 stilel, 279 impenn, 23 kontributur.
  • Lingwa: Mur.
  • Liċenzja: Apache License 2.0.

Din l-għodda hija mfassla għal proċessi ta 'debugging direttament fil-miżwed. L-utilità hija sempliċi u interattiva tippermettilek tagħżel id-debugger mixtieq (ara isfel) u namespace + pod, li fil-proċess tagħhom trid tintervjeni. Bħalissa appoġġjat:

  • delve - għall-applikazzjonijiet Go;
  • GDB - permezz ta 'mira remota + port forwarding;
  • JDWP port forwarding għad-debugging ta' applikazzjonijiet Java.

Min-naħa IDE, l-appoġġ huwa disponibbli biss f'VScode (bl-użu espansjoni), madankollu, il-pjanijiet għas-sena kurrenti (2019) jinkludu Eclipse u Intellij.

Biex tiddibaggja l-proċessi, Squash imexxi kontenitur privileġġjat fuq in-nodi tal-cluster, għalhekk l-ewwel trid tiffamiljarizza ruħek mal-kapaċitajiet mod sigur biex jiġu evitati problemi ta' sigurtà.

Soluzzjonijiet kompluti

Ejja ngħaddu għall-artillerija tqila - aktar proġetti "fuq skala kbira" iddisinjati biex jissodisfaw immedjatament ħafna mill-ħtiġijiet tal-iżviluppaturi.

NB: F'din il-lista, ovvjament, hemm post għall-utilità Open Source tagħna werf (magħrufa qabel bħala dapp). Madankollu, diġà ktibna u tkellimna dwarha aktar minn darba, u għalhekk iddeċidejna li ma nkluduhiex fir-reviżjoni. Għal dawk li jixtiequ jsiru aktar familjari mal-kapaċitajiet tiegħu, nirrakkomandaw li jaqraw/jisimgħu r-rapport "werf hija l-għodda tagħna għal CI/CD f'Kubernetes".

DevSpace

  • L-essenza: għal dawk li jixtiequ jibdew jaħdmu f'Kubernetes, iżda ma jridux jidħlu fil-fond fil-ġungla tiegħu.
  • GitHub.
  • Statistika qasira tal-GH: 630 stilla, 1912 impenn, 13-il kontributur.
  • Lingwa: Mur.
  • Liċenzja: Apache License 2.0.

Soluzzjoni mill-kumpanija tal-istess isem, li tipprovdi clusters ġestiti ma' Kubernetes għall-iżvilupp tat-tim. L-utilità ġiet maħluqa għal clusters kummerċjali, iżda taħdem tajjeb ma 'kwalunkwe oħrajn.

Meta tmexxi l-kmand devspace init fil-katalgu tal-proġett inti tkun offrut (b'mod interattiv):

  • agħżel cluster Kubernetes li jaħdem,
  • użu eżistenti Dockerfile (jew tiġġenera waħda ġdida) biex toħloq kontenitur ibbażat fuqu,
  • agħżel repożitorju għall-ħażna ta 'immaġini ta' kontenitur, eċċ.

Wara dawn il-passi preparatorji kollha, tista 'tibda l-iżvilupp billi tmexxi l-kmand devspace dev. Hija se tibni l-kontenitur, ittellah fir-repożitorju, ttella 'l-iskjerament fil-cluster u tibda t-trażmissjoni tal-port u s-sinkronizzazzjoni tal-kontenitur mad-direttorju lokali.

B'għażla, inti tkun imħeġġeġ biex tmexxi t-terminal għall-kontenitur. M'għandekx tirrifjuta, għax fir-realtà l-kontenitur jibda bil-kmand tal-irqad, u għal ttestjar reali l-applikazzjoni jeħtieġ li titnieda manwalment.

Fl-aħħarnett, it-tim devspace deploy rolls out l-applikazzjoni u l-infrastruttura assoċjata mal-cluster, u wara kollox jibda jaħdem fil-modalità ta 'ġlieda.

Il-konfigurazzjoni kollha tal-proġett hija maħżuna f'fajl devspace.yaml. Minbarra l-issettjar tal-ambjent tal-iżvilupp, tista 'ssib ukoll deskrizzjoni tal-infrastruttura fiha, simili għall-manifesti standard ta' Kubernetes, simplifikata ħafna biss.

Għodod għall-iżviluppaturi ta' applikazzjonijiet li jaħdmu fuq Kubernetes
Arkitettura u l-istadji ewlenin tal-ħidma ma DevSpace

Barra minn hekk, huwa faċli li żżid komponent predefinit (per eżempju, DBMS MySQL) jew chart Helm mal-proġett. Aqra aktar fi dokumentazzjoni - mhux ikkumplikat.

Skaffold

  • Sit; GitHub.
  • Statistika qasira tal-GH: 7423 stilel, 4173 impenn, 136 kontributur.
  • Lingwa: Mur.
  • Liċenzja: Apache License 2.0.

Din l-utilità minn Google tippretendi li tkopri l-ħtiġijiet kollha ta 'żviluppatur li l-kodiċi tiegħu b'xi mod se jaħdem fuq cluster Kubernetes. Li tibda tużah mhux faċli daqs devspace: l-ebda interattività, skoperta tal-lingwa u ħolqien awtomatiku Dockerfile dawn mhux se joffru lilek hawn.

Madankollu, jekk dan ma jibżax, hawn x'jista' jippermettilek tagħmel Skaffold:

  • Track bidliet fil-kodiċi tas-sors.
  • Issinkronizzaha mal-kontenitur tal-miżwed jekk ma teħtieġx assemblaġġ.
  • Iġbor kontenituri bil-kodiċi, jekk il-lingwa hija interpretata, jew ikkumpila artifacts u ippakkjahom f'kontenituri.
  • L-immaġini li jirriżultaw huma kkontrollati awtomatikament bl-użu kontenitur-istruttura-test.
  • It-tikkettar u t-tlugħ ta' immaġini fir-Reġistru Docker.
  • Uża applikazzjoni fi cluster billi tuża kubectl, Helm jew kustomize.
  • Wettaq port forwarding.
  • Debug applikazzjonijiet miktuba fl-Java, Node.js, Python.

Il-fluss tax-xogħol f'diversi varjazzjonijiet huwa deskritt b'mod dikjarattiv fil-fajl skaffold.yaml. Għal proġett, tista 'wkoll tiddefinixxi diversi profili li fihom tista' tbiddel parzjalment jew kompletament l-istadji ta 'assemblaġġ u skjerament. Pereżempju, għall-iżvilupp, speċifika immaġni bażi konvenjenti għall-iżviluppatur, u għall-istadji u l-produzzjoni - waħda minima (+ uża securityContext kontenituri jew tiddefinixxi mill-ġdid il-cluster li fih se tiġi skjerata l-applikazzjoni).

Kontenituri Docker jistgħu jinbnew lokalment jew mill-bogħod: in Google Cloud Ibni jew fi cluster bl-użu Kaniko. Bazel u Jib Maven/Gradle huma appoġġjati wkoll. Għat-tikkettar, Skaffold jappoġġja ħafna strateġiji: minn git commit hash, data/ħin, sha256-somma tas-sorsi, eċċ.

Separatament, ta 'min jinnota l-possibbiltà li jiġu ttestjati kontenituri. Il-qafas tat-test tal-istruttura tal-kontenitur diġà msemmi joffri l-metodi ta’ verifika li ġejjin:

  • Eżekuzzjoni ta 'kmandi fil-kuntest ta' kontenitur b'intraċċar ta 'status ta' ħruġ u verifika tal-output tat-test tal-kmand.
  • Iċċekkja l-preżenza ta 'fajls fil-kontenitur u tqabbel l-attributi speċifikati.
  • Kontroll tal-kontenut tal-fajl bl-użu ta' espressjonijiet regolari.
  • Verifika tal-metadejta tal-immaġni (ENV, ENTRYPOINT, VOLUMES u affarijiet simili).
  • Iċċekkjar tal-kompatibilità tal-liċenzja.

Is-sinkronizzazzjoni tal-fajls mal-kontenitur ma titwettaqx bl-aħjar mod: Skaffold sempliċement toħloq arkivju bis-sorsi, tikkopjah u tiżpakkjah fil-kontenitur (qatran irid jiġi installat). Għalhekk, jekk il-kompitu ewlieni tiegħek huwa s-sinkronizzazzjoni tal-kodiċi, huwa aħjar li tħares lejn soluzzjoni speċjalizzata (ksync).

Għodod għall-iżviluppaturi ta' applikazzjonijiet li jaħdmu fuq Kubernetes
L-istadji ewlenin tal-operat tal-Skaffold

B'mod ġenerali, l-għodda ma tippermettix li tagħmel astratt mill-manifesti ta 'Kubernetes u m'għandha l-ebda interattività, għalhekk tista' tidher diffiċli biex tikkontrolla. Iżda dan huwa wkoll il-vantaġġ tiegħu - libertà akbar ta 'azzjoni.

Garden

  • Sit; GitHub.
  • Statistika qasira tal-GH: 1063 stilel, 1927 impenn, 17-il kontributur.
  • Lingwa: TypeScript (huwa ppjanat li l-proġett jinqasam f'diversi komponenti, li wħud minnhom se jkunu f'Go, u wkoll jagħmel SDK għall-ħolqien ta' add-ons f'TypeScript/JavaScript u Go).
  • Liċenzja: Apache License 2.0.

Bħal Skaffold, Garden għandu l-għan li awtomat il-proċessi tat-twassil tal-kodiċi tal-applikazzjoni lill-cluster K8s. Biex tagħmel dan, l-ewwel trid tiddeskrivi l-istruttura tal-proġett f'fajl YAML, u mbagħad tmexxi l-kmand garden dev. Hi se tagħmel il-maġija kollha:

  • Iġbor kontenituri b'diversi partijiet tal-proġett.
  • Iwettaq testijiet tal-integrazzjoni u tal-unità, jekk ikunu ġew deskritti.
  • Jirrombla l-komponenti kollha tal-proġett fil-cluster.
  • Jekk il-kodiċi tas-sors jinbidel, jerġa 'jibda l-pipeline kollu.

Il-fokus ewlieni tal-użu ta 'din l-għodda huwa li taqsam cluster remot ma' tim ta 'żvilupp. F'dan il-każ, jekk xi wħud mill-passi tal-bini u l-ittestjar diġà saru, dan iħaffef b'mod sinifikanti l-proċess kollu, peress li Garden ikun jista 'juża r-riżultati fil-cache.

Modulu ta 'proġett jista' jkun kontenitur, kontenitur Maven, chart Helm, manifest għal kubectl apply jew saħansitra funzjoni OpenFaaS. Barra minn hekk, kwalunkwe modulu jista 'jinġibed minn repożitorju Git remot. Modulu jista 'jew ma jistax jiddefinixxi servizzi, kompiti, u testijiet. Is-servizzi u l-kompiti jista 'jkollhom dipendenzi, sabiex inti tista' tiddetermina s-sekwenza ta 'skjerament ta' servizz partikolari u torganizza t-tnedija ta 'kompiti u testijiet.

Garden jipprovdi lill-utent b'daxxbord sabiħ (bħalissa fi stat sperimentali), li turi l-graff tal-proġett: komponenti, sekwenza tal-assemblaġġ, eżekuzzjoni tal-kompiti u testijiet, il-konnessjonijiet u d-dipendenzi tagħhom. Dritt fil-browser, tista 'tara r-reġistri tal-komponenti kollha tal-proġett u tiċċekkja dak li joħroġ komponent partikolari permezz ta' HTTP (jekk, ovvjament, tiġi ddikjarata riżorsa ta 'dħul għaliha).

Għodod għall-iżviluppaturi ta' applikazzjonijiet li jaħdmu fuq Kubernetes
Panel għall-Ġnien

Din l-għodda għandha wkoll modalità hot-reload, li sempliċement tissinkronizza l-bidliet tal-iskript mal-kontenitur fil-cluster, u tħaffef ħafna l-proċess ta 'debugging tal-applikazzjoni. Ġnien għandu wieħed tajjeb dokumentazzjoni u mhux ħażin sett ta’ eżempji, li jippermettilek tidra malajr u tibda tużaha. Mill-mod, dan l-aħħar ppubblikajna traduzzjoni tal-artiklu mill-awturi tagħha.

Konklużjoni

Naturalment, din il-lista ta 'għodod għall-iżvilupp u d-debugging ta' applikazzjonijiet f'Kubernetes mhijiex limitata għal. Hemm ħafna aktar utilitajiet utli ħafna u prattiċi li huma denji, jekk mhux artikolu separat, allura mill-inqas aċċenn. Għidilna x'tuża, liema problemi ltqajt magħhom u kif solvuthom!

PS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment