Orodja za razvijalce aplikacij, ki se izvajajo na Kubernetesu

Orodja za razvijalce aplikacij, ki se izvajajo na Kubernetesu

Sodoben pristop k poslovanju rešuje številne pereče poslovne težave. Vsebniki in orkestratorji olajšajo prilagajanje projektov katere koli kompleksnosti, poenostavijo izdajo novih različic, jih naredijo bolj zanesljive, hkrati pa ustvarjajo dodatne težave razvijalcem. Programerja najprej skrbi njegova koda: arhitektura, kakovost, zmogljivost, eleganca – in ne, kako bo delovala v Kubernetesu in kako jo preizkusiti in odpraviti napake, potem ko narediš že minimalne spremembe. Zato je tudi povsem naravno, da se aktivno razvijajo orodja za Kubernetes, ki pomagajo rešiti težave tudi najbolj "arhaičnih" razvijalcev in jim omogočajo, da se osredotočijo na glavno stvar.

Ta pregled ponuja kratke informacije o nekaterih orodjih, ki olajšajo življenje programerju, katerega koda se izvaja v pod'axu gruče Kubernetes.

Preprosti pomočniki

Kubectl-debug

  • Spodnja vrstica: dodajte svojo posodo v Pod in poglejte, kaj se zgodi v njej.
  • GitHub.
  • Kratka statistika GH: 715 zvezdic, 54 obvez, 9 sodelavcev.
  • Jezik: Pojdi.
  • Licenca: licenca Apache 2.0.

Ta vtičnik za kubectl vam omogoča ustvarjanje dodatnega vsebnika znotraj sklopa, ki vas zanima, ki bo delil imenski prostor procesa z drugimi vsebniki. V njem lahko odpravljate napake v delovanju enote: preverite omrežje, poslušate omrežni promet, izvedete analizo procesa, ki vas zanima, itd.

Na vsebnik procesa lahko preklopite tudi z zagonom chroot /proc/PID/root - to je lahko zelo priročno, ko morate dobiti korensko lupino v vsebniku, za katerega je nastavljena v manifestu securityContext.runAs.

Orodje je preprosto in učinkovito, zato je lahko uporabno vsakemu razvijalcu. Več o tem smo pisali v ločen članek.

Teleprisotnost

  • Spodnja vrstica: prenesite aplikacijo na svoj računalnik. Razvijajte in odpravljajte napake lokalno.
  • Stran; GitHub.
  • Kratka statistika GH: 2131 zvezdic, 2712 obvez, 33 sodelavcev.
  • Jezik: Python.
  • Licenca: licenca Apache 2.0.

Ideja tega snap-ina je zagnati vsebnik z aplikacijo na lokalnem uporabniškem računalniku in posredovati ves promet iz gruče do njega in nazaj. Ta pristop vam omogoča lokalni razvoj s preprostim urejanjem datotek v vašem priljubljenem IDE: rezultati bodo na voljo takoj.

Prednosti lokalnega izvajanja so udobje urejanja in takojšnji rezultati ter možnost odpravljanja napak v aplikaciji na običajen način. Slaba stran je, da je zahteven glede hitrosti povezave, kar je še posebej opazno, ko morate delati z aplikacijo z dokaj visokim RPS in prometom. Poleg tega ima Telepresence težave z namestitvijo glasnosti v Windows, kar je lahko odločilna omejitev za razvijalce, ki so vajeni tega OS.

Delili smo že svoje izkušnje z uporabo Telepresence tukaj.

Ksync

  • Spodnja vrstica: skoraj takojšnja sinhronizacija kode z vsebnikom v gruči.
  • GitHub.
  • Kratka statistika GH: 555 zvezdic, 362 obvez, 11 sodelavcev.
  • Jezik: Pojdi.
  • Licenca: licenca Apache 2.0.

Pripomoček vam omogoča sinhronizacijo vsebine lokalnega imenika z imenikom vsebnika, ki se izvaja v gruči. Takšno orodje je kot nalašč za razvijalce skriptnih programskih jezikov, katerih glavna težava je dostava kode v tekoči vsebnik. Ksync je zasnovan za lajšanje tega glavobola.

Ko se enkrat inicializira z ukazom ksync init v gruči se ustvari DaemonSet, ki se uporablja za spremljanje stanja datotečnega sistema izbranega vsebnika. Na svojem lokalnem računalniku razvijalec zažene ukaz ksync watch, ki spremlja konfiguracije in se izvaja syncthing, ki neposredno sinhronizira datoteke z gručo.

Vse, kar ostane, je, da ukažemo ksyncu, kaj naj s čim sinhronizira. Na primer ta ukaz:

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

... bo ustvaril opazovalca z imenom myprojectki bo poiskal pod z oznako app=backend in poskusite sinhronizirati lokalni imenik /home/user/myproject/ s katalogom /var/www/myproject/ pri zabojniku, imenovanem php.

Težave in opombe o ksync iz naših izkušenj:

  • Uporabiti ga je treba na vozliščih gruče Kubernetes overlay2 kot gonilnik za shranjevanje za Docker. Pripomoček ne bo deloval z drugimi.
  • Ko uporabljate Windows kot odjemalski OS, opazovalec datotečnega sistema morda ne bo deloval pravilno. Ta napaka je bila opažena pri delu z velikimi imeniki - z velikim številom ugnezdenih datotek in imenikov. Ustvarili smo zadevno vprašanje v projektu sinhronizacije, vendar še ni napredka (od začetka julija).
  • Uporabi datoteko .stignore da določite poti ali vzorce datotek, ki jih ni treba sinhronizirati (na primer imenike app/cache и .git).
  • Privzeto bo ksync znova zagnal vsebnik vsakič, ko se datoteke spremenijo. Za Node.js je to priročno, za PHP pa popolnoma nepotrebno. Bolje je izklopiti opcache in uporabiti zastavico --reload=false.
  • Konfiguracijo je mogoče vedno popraviti $HOME/.ksync/ksync.yaml.

Squash

  • Spodnja vrstica: razhroščevanje procesov neposredno v gruči.
  • GitHub.
  • Kratka statistika GH: 1154 zvezdic, 279 obvez, 23 sodelavcev.
  • Jezik: Pojdi.
  • Licenca: licenca Apache 2.0.

To orodje je zasnovano za odpravljanje napak v procesih neposredno v sklopih. Pripomoček je preprost in interaktivno omogoča izbiro želenega razhroščevalnika (glej spodaj) in imenski prostor + pod, v procesu katerega morate posredovati. Trenutno podprto:

  • delve - za aplikacije Go;
  • GDB - prek ciljne oddaljenosti + posredovanje vrat;
  • Posredovanje vrat JDWP za odpravljanje napak v aplikacijah Java.

Na strani IDE je podpora na voljo samo v VScode (z uporabo širitev), vendar načrti za tekoče (2019) leto vključujejo Eclipse in Intellij.

Za odpravljanje napak v procesih Squash zažene privilegiran vsebnik na vozliščih gruče, zato se morate najprej seznaniti z zmožnostmi varni način da bi se izognili varnostnim težavam.

Celovite rešitve

Preidimo na težko artilerijo - bolj "obsežne" projekte, zasnovane tako, da takoj zadovoljijo številne potrebe razvijalcev.

NB: Na tem seznamu je seveda mesto za naš odprtokodni pripomoček werf (prej znan kot dapp). Vendar smo o tem že večkrat pisali in govorili, zato smo se odločili, da ga ne bomo vključili v recenzijo. Tistim, ki se želijo bolje seznaniti z njegovimi zmožnostmi, priporočamo branje/poslušanje poročila “werf je naše orodje za CI/CD v Kubernetesu".

DevSpace

  • Spodnja vrstica: za tiste, ki želijo začeti delati v Kubernetesu, vendar se ne želijo poglobiti v njegovo džunglo.
  • GitHub.
  • Kratka statistika GH: 630 zvezdic, 1912 obvez, 13 sodelavcev.
  • Jezik: Pojdi.
  • Licenca: licenca Apache 2.0.

Rešitev istoimenskega podjetja, ki zagotavlja upravljane gruče s Kubernetesom za timski razvoj. Pripomoček je bil ustvarjen za komercialne grozde, vendar odlično deluje z vsemi drugimi.

Pri izvajanju ukaza devspace init v katalogu projektov vam bodo na voljo (interaktivno):

  • izberite delujočo gručo Kubernetes,
  • uporabite obstoječe Dockerfile (ali ustvarite novega), da ustvarite vsebnik na njegovi podlagi,
  • izberite repozitorij za shranjevanje slik vsebnika itd.

Po vseh teh pripravljalnih korakih lahko začnete z razvojem z izvajanjem ukaza devspace dev. Zgradil bo vsebnik, ga naložil v repozitorij, uvedel uvedbo v gručo in začel posredovanje vrat ter sinhronizacijo vsebnika z lokalnim imenikom.

Po želji boste pozvani, da premaknete terminal v vsebnik. Ne smete zavrniti, ker se v resnici vsebnik začne z ukazom spanja, za resnično testiranje pa je treba aplikacijo zagnati ročno.

Končno ekipa devspace deploy uvede aplikacijo in pripadajočo infrastrukturo v gručo, nakar vse začne delovati v bojnem načinu.

Vse konfiguracije projekta so shranjene v datoteki devspace.yaml. Poleg nastavitev razvojnega okolja lahko v njem najdete tudi opis infrastrukture, podoben standardnim manifestom Kubernetes, le da je močno poenostavljen.

Orodja za razvijalce aplikacij, ki se izvajajo na Kubernetesu
Arhitektura in glavne faze dela z DevSpace

Poleg tega je projektu enostavno dodati vnaprej določeno komponento (na primer MySQL DBMS) ali Helmov grafikon. Preberite več v dokumentacijo - ni zapleteno.

Skafold

  • Stran; GitHub.
  • Kratka statistika GH: 7423 zvezdic, 4173 obvez, 136 sodelavcev.
  • Jezik: Pojdi.
  • Licenca: licenca Apache 2.0.

Ta Googlov pripomoček trdi, da pokriva vse potrebe razvijalca, katerega koda se bo nekako izvajala v gruči Kubernetes. Začetek uporabe ni tako enostaven kot devspace: brez interaktivnosti, zaznavanja jezika in samodejnega ustvarjanja Dockerfile tukaj vam tega ne bodo ponudili.

Če pa vas to ne prestraši, vam Skaffold omogoča:

  • Sledite spremembam izvorne kode.
  • Sinhronizirajte ga s posodo za stroke, če ne zahteva sestavljanja.
  • Zberite vsebnike s kodo, če se jezik razlaga, ali prevedite artefakte in jih zapakirajte v vsebnike.
  • Dobljene slike se samodejno preverijo z uporabo test strukture vsebnika.
  • Označevanje in nalaganje slik v register Docker.
  • Razmestite aplikacijo v gruči z uporabo kubectl, Helm ali kustomize.
  • Izvedite posredovanje vrat.
  • Aplikacije za odpravljanje napak, napisane v Javi, Node.js, Python.

Potek dela v različnih različicah je deklarativno opisan v datoteki skaffold.yaml. Za projekt lahko določite tudi več profilov, v katerih lahko delno ali v celoti spremenite faze montaže in razmestitve. Na primer, za razvoj določite osnovno sliko, ki je primerna za razvijalca, za uprizoritev in produkcijo pa minimalno (+ uporabite securityContext vsebnike ali na novo definirajte gručo, v kateri bo nameščena aplikacija).

Docker vsebnike je mogoče zgraditi lokalno ali na daljavo: v Google Cloud Build ali v gruči z uporabo Kaniko. Podprta sta tudi Bazel in Jib Maven/Gradle. Za označevanje Skaffold podpira številne strategije: z git commit hash, datumom/časom, sha256-vsoto virov itd.

Ločeno je treba omeniti možnost testiranja posod. Že omenjeno ogrodje za testiranje strukture vsebnika ponuja naslednje metode preverjanja:

  • Izvajanje ukazov v kontekstu vsebnika s sledenjem izhodnih statusov in preverjanjem izpisa besedila ukaza.
  • Preverjanje prisotnosti datotek v vsebniku in ujemanja z navedenimi atributi.
  • Nadzor vsebine datoteke z uporabo regularnih izrazov.
  • Preverjanje metapodatkov slike (ENV, ENTRYPOINT, VOLUMES itd.).
  • Preverjanje združljivosti licence.

Sinhronizacija datotek z vsebnikom ni izvedena najbolj optimalno: Skaffold preprosto ustvari arhiv z viri, ga skopira in razpakira v vsebnik (tar mora biti nameščen). Če je torej vaša glavna naloga sinhronizacija kode, je bolje, da se obrnete na specializirano rešitev (ksync).

Orodja za razvijalce aplikacij, ki se izvajajo na Kubernetesu
Glavne faze delovanja Skaffolda

Na splošno vam orodje ne omogoča abstrahiranja iz manifestov Kubernetes in nima nobene interaktivnosti, zato se morda zdi težko obvladati. A to je tudi njegova prednost - večja svoboda delovanja.

Vrt

  • Stran; GitHub.
  • Kratka statistika GH: 1063 zvezdic, 1927 obvez, 17 sodelavcev.
  • Jezik: TypeScript (načrtovana je razdelitev projekta na več komponent, od katerih bodo nekatere v Go, in tudi izdelava SDK za ustvarjanje dodatkov v TypeScript/JavaScript in Go).
  • Licenca: licenca Apache 2.0.

Tako kot Skaffold želi Garden avtomatizirati procese dostave aplikacijske kode v gručo K8s. Če želite to narediti, morate najprej opisati strukturo projekta v datoteki YAML in nato zagnati ukaz garden dev. Ona bo naredila vse čarovnije:

  • Zberite posode z različnimi deli projekta.
  • Izvaja integracijske in enotne teste, če so bili opisani.
  • Razširi vse komponente projekta v gručo.
  • Če se izvorna koda spremeni, se ponovno zažene celoten cevovod.

Glavni poudarek uporabe tega orodja je souporaba oddaljene gruče z razvojno skupino. V tem primeru, če so bili nekateri koraki gradnje in testiranja že opravljeni, bo to bistveno pospešilo celoten proces, saj bo Garden lahko uporabil predpomnjene rezultate.

Projektni modul je lahko vsebnik, vsebnik Maven, grafikon Helm, manifest za kubectl apply ali celo funkcijo OpenFaaS. Poleg tega je mogoče katerega koli od modulov potegniti iz oddaljenega repozitorija Git. Modul lahko definira storitve, naloge in teste ali pa ne. Storitve in naloge so lahko odvisne, tako da lahko določite zaporedje uvajanja določene storitve in organizirate zagon nalog in testov.

Garden uporabniku ponuja čudovito armaturno ploščo (trenutno v eksperimentalno stanje), ki prikazuje graf projekta: komponente, zaporedje sestavljanja, izvajanje nalog in testov, njihove povezave in odvisnosti. Kar v brskalniku si lahko ogledate dnevnike vseh komponent projekta in preverite, kaj posamezna komponenta izpiše prek HTTP (če je seveda zanjo deklariran vhodni vir).

Orodja za razvijalce aplikacij, ki se izvajajo na Kubernetesu
Panel za vrt

To orodje ima tudi način vročega ponovnega nalaganja, ki preprosto sinhronizira spremembe skripta z vsebnikom v gruči, kar močno pospeši postopek odpravljanja napak v aplikaciji. Garden ima dobrega dokumentacijo in ni slabo nabor primerov, kar vam omogoča, da se nanjo hitro navadite in jo začnete uporabljati. Mimogrede, pred kratkim smo objavili prevod članka od njegovih avtorjev.

Zaključek

Seveda ta seznam orodij za razvoj in odpravljanje napak v aplikacijah v Kubernetesu ni omejen na. Obstaja veliko več zelo uporabnih in praktičnih pripomočkov, ki so vredni, če ne ločenega članka, pa vsaj omembe. Povejte nam, kaj uporabljate, na kakšne težave ste naleteli in kako ste jih rešili!

PS

Preberite tudi na našem blogu:

Vir: www.habr.com

Dodaj komentar