Iloj por programistoj de aplikoj kurantaj sur Kubernetes

Iloj por programistoj de aplikoj kurantaj sur Kubernetes

Moderna aliro al operacioj solvas multajn urĝajn komercajn problemojn. Ujoj kaj orkestroj faciligas skali projektojn de ajna komplekseco, simpligas la liberigon de novaj versioj, igas ilin pli fidindaj, sed samtempe ili kreas pliajn problemojn por programistoj. La programisto antaŭ ĉio zorgas pri sia kodo: arkitekturo, kvalito, rendimento, eleganteco - kaj ne kiel ĝi funkcios en Kubernetes kaj kiel testi kaj sencimigi ĝin post eĉ minimumaj ŝanĝoj. Tial, estas ankaŭ tute nature, ke iloj por Kubernetes estas aktive disvolvitaj, helpante solvi la problemojn de eĉ la plej "arkaikaj" programistoj kaj permesante al ili koncentriĝi pri la ĉefa afero.

Ĉi tiu revizio provizas mallongajn informojn pri kelkaj el la iloj, kiuj faciligas la vivon al programisto, kies kodo funkcias en la pod'ax de Kubernetes-areo.

Simplaj helpantoj

Kubectl-sencimigo

  • La esenco: aldonu vian ujon al Pod kaj vidu, kio okazas en ĝi.
  • GitHub.
  • Mallonga GH-statistiko: 715 steloj, 54 engaĝiĝoj, 9 kontribuantoj.
  • Lingvo: Iru.
  • Licenco: Apache License 2.0.

Ĉi tiu kromaĵo por kubectl ebligas al vi krei plian ujon ene de la interesa podo, kiu dividos la procezan nomspacon kun aliaj ujoj. En ĝi vi povas sencimigi la funkciadon de la pod: kontrolu la reton, aŭskulti retan trafikon, fari spuron de la interesa procezo, ktp.

Vi ankaŭ povas ŝanĝi al la proceza ujo kurante chroot /proc/PID/root - ĉi tio povas esti tre oportuna kiam vi bezonas akiri radikan ŝelon en ujo, por kiu ĝi estas fiksita en la manifesto securityContext.runAs.

La ilo estas simpla kaj efika, do ĝi povas esti utila al ĉiu programisto. Ni skribis pli pri ĝi en aparta artikolo.

Teleĉeesto

  • La esenco: translokigu la aplikaĵon al via komputilo. Disvolvi kaj sencimigi loke.
  • retpaĝaro; GitHub.
  • Mallonga GH-statistiko: 2131 steloj, 2712 kommittoj, 33 kontribuantoj.
  • Lingvo: Python.
  • Licenco: Apache License 2.0.

La ideo de ĉi tiu aligaĵo estas lanĉi ujon kun la aplikaĵo sur la loka uzanto-komputilo kaj prokurigi la tutan trafikon de la areto al ĝi kaj reen. Ĉi tiu aliro permesas vin disvolvi loke per simple redaktado de dosieroj en via plej ŝatata IDE: la rezultoj estos disponeblaj tuj.

La avantaĝoj de funkcii loke estas la oportuno de redaktoj kaj tujaj rezultoj, la kapablo sencimigi la aplikaĵon laŭ la kutima maniero. La malavantaĝo estas, ke ĝi postulas pri konektorapideco, kio estas precipe rimarkebla kiam vi devas labori kun aplikaĵo kun sufiĉe alta RPS kaj trafiko. Krome, Telepresence havas problemojn kun volumenaj muntadoj sur Vindozo, kio povas esti decida limigo por programistoj alkutimiĝintaj al ĉi tiu OS.

Ni jam konigis nian sperton pri uzado de Teleĉeesto tie.

Ksync

  • La esenco: preskaŭ tuja sinkronigo de kodo kun la ujo en la areto.
  • GitHub.
  • Mallonga GH-statistiko: 555 steloj, 362 engaĝiĝoj, 11 kontribuantoj.
  • Lingvo: Iru.
  • Licenco: Apache License 2.0.

La ilo permesas al vi sinkronigi la enhavon de loka dosierujo kun la dosierujo de ujo kuranta en la areto. Tia ilo estas perfekta por programistoj en skriptlingvoj, kies ĉefa problemo estas liverado de kodo al funkcianta ujo. Ksync estas desegnita por malpezigi ĉi tiun kapdoloron.

Kiam pravigita unufoje per la komando ksync init DaemonSet estas kreita en la areto, kiu estas uzata por kontroli la staton de la dosiersistemo de la elektita ujo. Sur sia loka komputilo, la programisto kuras la komandon ksync watch, kiu monitoras agordojn kaj kurojn sintaksado, kiu rekte sinkronigas dosierojn kun la areto.

Restas nur instrukcii ksync kion sinkronigi kun kio. Ekzemple, ĉi tiu komando:

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

...kreos observanton nomitan myprojectkiu serĉos balgon kun etikedo app=backend kaj provu sinkronigi la lokan dosierujon /home/user/myproject/ kun katalogo /var/www/myproject/ ĉe la ujo nomita php.

Problemoj kaj notoj pri ksync el nia sperto:

  • Devas esti uzata sur Kubernetes-clusternodoj overlay2 kiel stoka pelilo por Docker. La ilo ne funkcios kun iuj aliaj.
  • Kiam vi uzas Vindozon kiel klienta OS, la dosiersistema observanto eble ne funkcias ĝuste. Ĉi tiu cimo estis rimarkita kiam oni laboras kun grandaj dosierujoj - kun granda nombro da nestitaj dosieroj kaj dosierujoj. Ni kreis koncerna afero en la sinkroniga projekto, sed ankoraŭ ne estas progreso pri ĝi (ekde la komenco de julio).
  • Uzu dosieron .stignore por specifi padojn aŭ dosierpadronojn kiuj ne bezonas esti sinkronigitaj (ekzemple dosierujoj app/cache и .git).
  • Defaŭlte, ksync rekomencos la ujon kiam ajn dosieroj ŝanĝiĝas. Por Node.js tio estas oportuna, sed por PHP ĝi estas tute nenecesa. Estas pli bone malŝalti opcache kaj uzi la flagon --reload=false.
  • La agordo ĉiam povas esti korektita en $HOME/.ksync/ksync.yaml.

Kvasko

  • La esenco: sencimigi procezojn rekte en la areto.
  • GitHub.
  • Mallongaj GH-statistikoj: 1154 steloj, 279 komitoj, 23 kontribuantoj.
  • Lingvo: Iru.
  • Licenco: Apache License 2.0.

Ĉi tiu ilo estas desegnita por sencimigi procezojn rekte en podoj. La ilo estas simpla kaj interage permesas elekti la deziratan erarserĉilon (Vidu suben) kaj nomspaco + pod, en kies procezo vi devas interveni. Nuntempe subtenata:

  • delve - por Go-aplikoj;
  • GDB - per celo fora + haveno plusendado;
  • JDWP-havendisendado por sencimigi Java-aplikaĵojn.

Sur la IDE-flanko, subteno disponeblas nur en VScode (uzante pligrandigo), tamen, planoj por la nuna (2019) jaro inkluzivas Eclipse kaj Intellij.

Por sencimigi procezojn, Squash funkciigas privilegian ujon sur la grapolnodoj, do vi unue devas konatiĝi kun la kapabloj. sekuran modon por eviti problemojn pri sekureco.

Kompletaj solvoj

Ni transiru al la peza artilerio - pli "grandskalaj" projektoj destinitaj por tuj renkonti multajn el la bezonoj de programistoj.

NB: En ĉi tiu listo, kompreneble, estas loko por nia Malfermfonta ilo werf (antaŭe konata kiel dapp). Tamen ni jam skribis kaj parolis pri ĝi pli ol unu fojon, kaj tial ni decidis ne enmeti ĝin en la recenzon. Por tiuj, kiuj volas konatiĝi pli kun ĝiaj kapabloj, ni rekomendas legi/aŭskulti la raporton "werf estas nia ilo por CI/KD en Kubernetes".

DevSpace

  • La esenco: por tiuj, kiuj volas eklabori en Kubernetes, sed ne volas profundiĝi en ĝian ĝangalon.
  • GitHub.
  • Mallonga GH-statistiko: 630 steloj, 1912 engaĝiĝoj, 13 kontribuantoj.
  • Lingvo: Iru.
  • Licenco: Apache License 2.0.

Solvo de la samnoma kompanio, kiu provizas administritajn aretojn kun Kubernetes por teama disvolviĝo. La ilo estis kreita por komercaj aretoj, sed funkcias bonege kun iuj aliaj.

Kiam vi ruliĝas la komandon devspace init en la projekt-katalogo vi estos ofertita (interage):

  • elektu funkciantan Kubernetes-areton,
  • uzi ekzistantan Dockerfile (aŭ generi novan) por krei ujon bazitan sur ĝi,
  • elektu deponejon por stoki ujajn bildojn, ktp.

Post ĉiuj ĉi tiuj preparaj paŝoj, vi povas komenci disvolviĝon per la ordono devspace dev. Ĝi konstruos la ujon, alŝutos ĝin al la deponejo, lanĉos la disfaldiĝon al la areto kaj komencos havenon plusendon kaj sinkronigon de la ujo kun la loka dosierujo.

Laŭvole, oni petos vin movi la terminalon al la ujo. Vi ne devus rifuzi, ĉar fakte la ujo komenciĝas per la dorma komando, kaj por vera testado la aplikaĵo devas esti lanĉita permane.

Fine, la teamo devspace deploy ruliĝas la aplikaĵon kaj la rilatan infrastrukturon al la areto, post kio ĉio komencas funkcii en batalreĝimo.

Ĉiu projekta agordo estas konservita en dosiero devspace.yaml. Krom la agordoj de evolumedio, vi ankaŭ povas trovi priskribon de la infrastrukturo en ĝi, simila al normaj manifestoj de Kubernetes, nur tre simpligita.

Iloj por programistoj de aplikoj kurantaj sur Kubernetes
Arkitekturo kaj ĉefaj etapoj de laboro kun DevSpace

Krome, estas facile aldoni antaŭdifinitan komponanton (ekzemple MySQL-DBMS) aŭ Helm-diagramon al la projekto. Legu pli en dokumentado - ĝi ne estas komplika.

Skafodo

  • retpaĝaro; GitHub.
  • Mallongaj GH-statistikoj: 7423 steloj, 4173 komitoj, 136 kontribuantoj.
  • Lingvo: Iru.
  • Licenco: Apache License 2.0.

Ĉi tiu utileco de Google asertas kovri ĉiujn bezonojn de programisto, kies kodo iel ruliĝos sur Kubernetes-areo. Komenci uzi ĝin ne estas tiel facila kiel devspace: neniu interagado, lingvodetekto kaj aŭtomata kreado Dockerfile ili ĉi tie ne proponos ĝin al vi.

Tamen, se ĉi tio ne timigas vin, jen kion Skaffold permesas al vi fari:

  • Spuri fontkodŝanĝojn.
  • Sinkronigu ĝin kun la podujo se ĝi ne postulas muntadon.
  • Kolektu ujojn kun kodo, se la lingvo estas interpretita, aŭ kompilu artefaktojn kaj paku ilin en ujojn.
  • La rezultaj bildoj estas aŭtomate kontrolataj uzante ujo-strukturo-testo.
  • Etikedado kaj alŝuto de bildoj al la Docker-Registro.
  • Deploji aplikaĵon en areto uzante kubectl, Helm aŭ kustomize.
  • Faru havensendadon.
  • Sencimigi aplikaĵojn skribitajn en Java, Node.js, Python.

Laborfluo en diversaj varioj estas deklare priskribita en la dosiero skaffold.yaml. Por projekto, vi ankaŭ povas difini plurajn profilojn, en kiuj vi povas parte aŭ tute ŝanĝi la muntadon kaj disfaldajn stadiojn. Ekzemple, por disvolviĝo, specifu bazan bildon konvenan por la programisto, kaj por surscenigo kaj produktado - minimuma (+ uzo securityContext ujoj aŭ redifini la areton en kiu la aplikaĵo estos deplojita).

Docker-ujoj povas esti konstruitaj loke aŭ malproksime: en Google Cloud Build aŭ en areto uzante Kaniko. Bazel kaj Jib Maven/Gradle ankaŭ estas subtenataj. Por etikedado, Skaffold subtenas multajn strategiojn: per git commit hash, dato/tempo, sha256-sumo de fontoj ktp.

Aparte, indas noti la eblecon testi ujojn. La jam menciita ujo-struktura-testkadro ofertas la jenajn konfirmmetodojn:

  • Plenumante komandojn en la kunteksto de ujo kun spurado de elirstatutoj kaj kontrolado de la teksta eligo de la komando.
  • Kontrolante la ĉeeston de dosieroj en la ujo kaj kongruante kun la specifitaj atributoj.
  • Kontrolo de dosierenhavoj uzante regulajn esprimojn.
  • Konfirmo de bildatumoj (ENV, ENTRYPOINT, VOLUMES kaj tiel plu.).
  • Kontrolante kongruon de permesilo.

Sinkronigi dosierojn kun la ujo ne estas farita en la plej optimuma maniero: Skaffold simple kreas arkivon kun la fontoj, kopias kaj malpakigas ĝin en la ujo (gudro devas esti instalita). Tial, se via ĉefa tasko estas koda sinkronigado, estas pli bone rigardi al speciala solvo (ksync).

Iloj por programistoj de aplikoj kurantaj sur Kubernetes
Ĉefaj stadioj de Skaffold-operacio

Ĝenerale, la ilo ne permesas vin abstrakti de Kubernetes-manifestoj kaj ne havas ajnan interagadon, do ĝi povas ŝajni malfacile regi. Sed ĉi tio estas ankaŭ ĝia avantaĝo - pli granda agadlibereco.

ĝardeno

  • retpaĝaro; GitHub.
  • Mallongaj GH-statistikoj: 1063 steloj, 1927 komitoj, 17 kontribuantoj.
  • Lingvo: TypeScript (estas planite dividi la projekton en plurajn komponantojn, iuj el kiuj estos en Go, kaj ankaŭ fari SDK por krei aldonaĵojn en TypeScript/JavaScript kaj Go).
  • Licenco: Apache License 2.0.

Kiel Skaffold, Garden celas aŭtomatigi la procezojn de liverado de aplikaĵokodo al la K8s-areto. Por fari tion, vi unue devas priskribi la projektostrukturon en YAML-dosiero, kaj poste ruli la komandon garden dev. Ŝi faros la tutan magion:

  • Kolektu ujojn kun diversaj partoj de la projekto.
  • Faras integriĝon kaj unutestojn, se iuj estis priskribitaj.
  • Disvolvas ĉiujn projektkomponentojn al la areto.
  • Se la fontkodo ŝanĝiĝas, ĝi rekomencos la tutan dukton.

La ĉefa fokuso de uzado de ĉi tiu ilo estas kunhavigi fora areto kun evolua teamo. En ĉi tiu kazo, se iuj el la konstruaj kaj testaj paŝoj jam estis faritaj, ĉi tio signife akcelos la tutan procezon, ĉar Garden povos uzi la kaŝmemorigitajn rezultojn.

Projekta modulo povas esti ujo, Maven-ujo, Helm-diagramo, manifesto por kubectl apply aŭ eĉ OpenFaaS-funkcio. Plie, iu ajn el la moduloj povas esti eltiritaj de fora Git-deponejo. Modulo povas aŭ ne difini servojn, taskojn kaj testojn. Servoj kaj taskoj povas havi dependecojn, do vi povas determini la deplojan sekvencon de aparta servo kaj organizi la lanĉon de taskoj kaj testoj.

Garden provizas la uzanton per bela panelo (nuntempe en eksperimenta stato), kiu montras la projektan grafeon: komponantoj, asembleosekvenco, plenumo de taskoj kaj testoj, iliaj ligoj kaj dependecoj. Ĝuste en la retumilo, vi povas vidi la protokolojn de ĉiuj projektkomponentoj kaj kontroli kion aparta komponanto eligas per HTTP (se, kompreneble, enira rimedo estas deklarita por ĝi).

Iloj por programistoj de aplikoj kurantaj sur Kubernetes
Panelo por Ĝardeno

Ĉi tiu ilo ankaŭ havas varman reŝargan reĝimon, kiu simple sinkronigas skriptoŝanĝojn kun la ujo en la areto, multe plirapidigante la aplikaĵan sencimigan procezon. Ĝardeno havas bonan dokumentado kaj ne malbona aro da ekzemploj, permesante al vi rapide alkutimiĝi al ĝi kaj ekuzi ĝin. Cetere, ĵus ĵus ni publikigis artikolo traduko de ĝiaj aŭtoroj.

konkludo

Kompreneble, ĉi tiu listo de iloj por disvolvi kaj sencimigi aplikojn en Kubernetes ne estas limigita al. Estas multaj pli tre utilaj kaj praktikaj utilecoj, kiuj estas indaj, se ne aparta artikolo, do almenaŭ mencio. Diru al ni, kion vi uzas, kiajn problemojn vi renkontis kaj kiel vi solvis ilin!

PS

Legu ankaŭ en nia blogo:

fonto: www.habr.com

Aldoni komenton