
Súčasný prístup k prevádzke rieši množstvo naliehavých problémov podnikania. Kontajnery a orchestrátory umožňujú jednoduché škálovanie projektov akejkoľvek zložitosti, zjednodušujú vydávanie nových verzií, robia ich spoľahlivejšími, ale zároveň vytvárajú aj ďalšie problémy pre vývojárov. Programátora najmä zaujíma jeho kód: architektúra, kvalita, výkon, elegancia — a nie to, ako sa dostane do Kubernetes alebo ako ho testovať a ladenie po zavedení aj minimálnych zmien. Preto nie je prekvapujúce, že sa aktívne vyvíjajú nástroje pre Kubernetes, ktoré pomáhajú riešiť problémy aj tých naj„archaickejších“ vývojárov a umožňujú im zamerať sa na to hlavné.
V tejto recenzii je uvedená stručná informácia o niektorých nástrojoch, ktoré zjednodušujú život programátorovi, jehož kód beží v podoch Kubernetes klastra.
Jednoduchí pomocníci
Kubectl-debug
- Podstata: pridajte svoj kontajner do Pod a sledujte, čo sa v ňom deje.
- .
- Stručná štatistika GH: 715 hviezd, 54 commitov, 9 prispievateľov.
- Jazyk: Go.
- Licencia: Apache License 2.0.
Tento plugin pre kubectl umožňuje vytvoriť vo vnútri zaujímavého podu dodatočný kontajner, ktorý bude zdieľať namespace procesov s ostatnými kontajnermi. V ňom môžete vykonávať ladenie práce podu: skontrolovať sieť, počúvať sieťovú prevádzku, vykonať strace na zaujímavom procese a podobne.
Tiež môžete prepnúť do kontajnera procesu pomocou chroot /proc/PID/root — to býva veľmi praktické, keď potrebujete získať root shell v kontajneri, pre ktorý je v manifeste nastavené securityContext.runAs.
Nástroj je jednoduchý a efektívny, takže sa môže hodiť každému vývojárovi. Viac o ňom sme písali v .
Telepresence
- Podstata: presuň aplikáciu na svoj počítač. Vyvíjaj a ladí lokálne.
- ; .
- Stručná štatistika GH: 2131 hviezda, 2712 commitov, 33 prispievateľov.
- Jazyk: Python.
- Licencia: Apache License 2.0.
Myšlienka tejto súčasti spočíva v spustení kontajnera s aplikáciou na lokálnom počítači používateľa a proxy celého prenosu z klastra do neho a späť. Tento prístup umožňuje lokalnú vývojovú činnosť prostredníctvom jednoduchých zmien súborov v obľúbenej IDE: výsledky budú dostupné okamžite.
Výhody lokálneho spustenia — pohodlné úpravy a okamžitý výsledok, možnosť ladit aplikáciu obvyklým spôsobom. Nevýhody — náročnosť na rýchlosť pripojenia, čo je obzvlášť viditeľné pri práci s aplikáciou s relatívne vysokým RPS a prevádzka. Okrem toho, Telepresence má problémy s volume mounts vo Windows, čo môže byť rozhodujúcim obmedzením pre vývojárov zvyknutých na tento operačný systém.
Už sme sa podelili o naše skúsenosti s používaním Telepresence .
Ksync
- Podstata: takmer okamžitá synchronizácia kódu s kontajnerom v klastri.
- .
- Krátka štatistika GH: 555 hviezd, 362 commitov, 11 prispievateľov.
- Jazyk: Go.
- Licencia: Apache License 2.0.
Nástroj umožňuje synchronizovať obsah lokálneho adresára s adresárom kontajnera, ktorý beží v klastri. Takýto nástroj je ideálny pre vývojárov v skriptovacích programovacích jazykoch, ktorých hlavný problém spočíva v tom, ako dostaviť kód do fungujúceho kontajnera. Ksync má za cieľ odstrániť túto bolesť hlavy.
Pri jednorazovej inicializácii príkazom ksync init sa v klastri vytvorí DaemonSet, ktorý sa používa na sledovanie stavu súborového systému vybraného kontajnera. Na svojom lokálnom počítači vývojár spustí príkaz ksync watch, ktorý sleduje konfigurácie a spúšťa , ktorý vykonáva priamu synchronizáciu súborov s klastrom.
Je potrebné poučiť ksync, čo a s čím synchronizovať. Napríklad, takýto príkaz:
ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/ … vytvorí watcher s názvom myproject, ktorý bude hľadať pod s označením app=backend a pokúsi sa synchronizovať lokálny adresár /home/user/myproject/ s adresárom /var/www/myproject/ kontejneru s názvom php.
Problémy a poznámky k ksync z našich skúseností:
- Na uzloch Kubernetes klastra by sa mal používať
overlay2ako storage driver pre Docker. S inými nástrojmi nebude funkcionovať. - Pri používaní Windows ako OS klienta je možná nesprávna funkčnosť watcher’a súborového systému. Tento bug sa prejavuje pri práci s veľkými adresármi — s veľkým počtom vnorených súborov a adresárov. Vytvorili sme v projekte syncthing, ale doposiaľ (od začiatku júla) nie je pokrok.
- Použite súbor aby ste určili cesty alebo vzory súborov, ktoré sa nemajú synchronizovať (napríklad adresáre
app/cachea.git). - Predvolená hodnota ksync je reštartovať kontajner pri každej zmene súborov. Pre Node.js je to pohodlné, pre PHP úplne zbytočné. Lepšie je vypnúť opcache a použiť prepínač
--reload=false. - Konfiguráciu je vždy možné opraviť v
$HOME/.ksync/ksync.yaml.
Squash
- Podstata: ladíš procesy priamo v klastri.
- .
- Krátka štatistika GH: 1154 hviezd, 279 commitov, 23 prispievateľov.
- Jazyk: Go.
- Licencia: Apache License 2.0.
Tento nástroj je určený na ladenie procesov priamo v pod'och. Nástroj je jednoduchý a v interaktívnom režime umožňuje vybrať potrebného ladíča (pozri nižšie) a namespace + pod, do ktorého treba zasiahnuť. V súčasnosti sú podporované:
- delve — pre aplikácie v Go;
- GDB — cez target remote + presmerovanie portu;
- presmerovanie portu JDWP pre ladenie Java-aplikácií.
Z hľadiska IDE je podpora len vo VScode (s pomocou ), avšak v plánoch na tento (2019) rok sú aj Eclipse a Intellij.
Na ladenie procesov Squash spúšťa na uzloch klastra privilegovaný kontajner, preto je potrebné sa najprv oboznámiť s možnosťami aby ste predišli problémom so zabezpečením.
Komplexné riešenia
Prejdeme k ťažkej artilérii — väčším projektom, ktoré sa snažia naraz pokryť mnohé potreby vývojárov.
Poznámka: V tomto zozname má určite miesto aj náš Open Source nástroj (predtým známy ako dapp). Ale už sme o ňom písali a hovorili, a preto sme sa rozhodli ho nezaradiť do prehľadu. Pre tých, ktorí sa chcú oboznámiť s jeho možnosťami bližšie, odporúčame prečítať si/ vypočuť prednášku „».
DevSpace
- Podstata: pre tých, ktorí chcú začať pracovať v Kubernetes, ale nechcú sa hlboko zaoberať jeho zložitostiami.
- .
- Krátka štatistika GH: 630 hviezd, 1912 commitov, 13 prispievateľov.
- Jazyk: Go.
- Licencia: Apache License 2.0.
Riešenie od rovnomennej spoločnosti, ktorá ponúka spravované klastry s Kubernetes pre tímový vývoj. Nástroj bol vytvorený pre komerčné klastry, ale skvele funguje aj s akýmikoľvek inými.
Pri spustení príkazu devspace init v adresári s projektom vám ponúknu (v interaktívnom režime):
- vybrať pracovný Kubernetes klaster,
- použiť existujúci
Dockerfile(alebo vygenerovať nový) na vytvorenie kontajnera na jeho báze, - vybrať repozitár na ukladanie obrázkov kontajnerov atď.
Po všetkých týchto prípravných krokoch sa môže začať vývoj, vykonaním príkazu devspace dev. Ten zíde kontajner, nahraje ho do repozitára, nasadí deployment do klastru a spustí prenos portov a synchronizáciu kontajnera s lokálnym adresárom.
Voliteľne sa ponúkne možnosť prechodom terminálu do kontajnera. Odmietať to netreba, pretože v skutočnosti sa kontajner spúšťa príkazom sleep a na reálne testovanie je potrebné aplikáciu spustiť manuálne.
Nakoniec, príkaz devspace deploy nasadzuje aplikáciu a súvisiacu infraštruktúru do klastru, po čom všetko začne fungovať v produkčnom režime.
Celá konfigurácia projektu je uložená v súbore devspace.yaml. Okrem nastavení pre vývojové prostredie v ňom možno nájsť aj popis infraštruktúry, podobný štandardným manifestom Kubernetes, avšak značne zjednodušený.

Architektúra a základné etapy práce s DevSpace
Okrem toho je do projektu ľahké pridať preddefinovanú komponentu (napríklad DB MySQL) alebo Helm chart. Viac si prečítajte v — nie je to zložitá záležitosť.
Skaffold
- ; .
- Kratšia štatistika GH: 7423 hviezd, 4173 commitov, 136 prispievateľov.
- Jazyk: Go.
- Licencia: Apache License 2.0.
Tento nástroj od Googlu sa snaží pokryť všetky potreby vývojára, ktorého kód bude tak či onak spúšťaný v klastru Kubernetes. Začať ho používať nie je také jednoduché ako devspace: žiadna interaktivita, žiadne určovanie jazyka ani automatické vytváranie Dockerfile tu nenájdete.
Avšak, ak vás to neodradí — tu sú veci, ktoré umožňuje Skaffold:
- Sledovať zmeny v zdrojovom kóde.
- Synchronizovať ho s kontajnerom podu, ak nevyžaduje kompiláciu.
- Kompilovať kontajnery s kódom, ak je programovací jazyk interpretovaný, alebo kompilovať artefakty a balíčkovať ich do kontajnerov.
- Výsledné obrázky automaticky kontrolovať pomocou .
- Označiť a nahrať obrázky do Docker Registry.
- Nasadiť aplikáciu do klastru pomocou kubectl, Helm alebo kustomize.
- Vykonávať prenos portov.
- Ladiť aplikácie napísané v Jave, Node.js, Pythone.
Workflow v rôznych variáciách sa deklaratívne popisuje v súbore skaffold.yaml. Pre projekt je možné tiež definovať niekoľko profilov, v ktorých sa čiastočne alebo úplne menia fázy zostavovania a nasadenia. Napríklad pre vývoj určiť základný obraz vhodný pre vývojára, zatiaľ čo pre staging a produkciu — minimálny (+ použiť securityContext alebo predefinovať klaster, v ktorom bude aplikácia nasadená).
Zostavenie Docker kontajnerov môže prebiehať lokálne alebo vzdialene: v alebo v klastri pomocou . Podporujú sa aj Bazel a Jib Maven/Gradle. Pre tagovanie Skaffold podporuje množstvo stratégií: podľa git commit hash, dátumu/ času, sha256 sumy zdrojov atď.
Samostatne stojí za zmienku možnosť testovania kontajnerov. Už spomenutý rámec container-structure-test ponúka nasledujúce metódy overovania:
- Vykonávanie príkazov v kontexte kontajnera s sledovaním exit statusov a kontrolou textového „výstupu“ príkazu.
- Kontrola prítomnosti súborov v kontajneri a zhodnosti atribútov s uvedenými.
- Kontrola obsahu súborov pomocou regulárnych výrazov.
- Overenie metadát obrazu (
ENV,ENTRYPOINT,VOLUMESa pod.). - Kontrola kompatibility licencií.
Synchronizácia súborov s kontajnerom prebieha nie najoptimálnejším spôsobom: Skaffold jednoducho vytvorí archív so zdrojovými kódmi, skopíruje ho a rozbalí v kontajneri (musí byť nainštalovaný tar). Preto, ak je vašou hlavnou úlohou synchronizácia kódu, je lepšie sa pozrieť na špecializované riešenie (ksync).

Hlavné etapy práce Skaffold
Celkovo nástroj neumožňuje abstrahovať od Kubernetes manifestov a nemá žiadnu interaktivitu, takže sa môže zdať zložitý na osvojenie. Ale na tom je aj jeho výhoda — väčšia sloboda pohybu.
Garden
- ; .
- Krátka štatistika GH: 1063 hviezd, 1927 commitov, 17 prispievateľov.
- Jazyk: TypeScript (plánuje sa rozdeliť projekt na niekoľko komponentov, niektoré z nich budú na Go, ako aj vytvoriť SDK pre vytváranie doplnkov na TypeScript/JavaScript a Go).
- Licencia: Apache License 2.0.
Rovnako ako Skaffold, Garden sa zameriava na automatizáciu procesov dodávky kódu aplikácie do K8s klastra. Na to je najskôr potrebné popísať štruktúru projektu v YAML súbore, po čom spustiť príkaz garden dev. Urobí všetku mágiu:
- Zostaví kontajnery s rôznymi časťami projektu.
- Vykoná integračné a unit testy, ak boli popísané.
- Nasadí všetky komponenty projektu do klastra.
- Pri zmene zdrojového kódu sa znovu spustí celý pipeline.
Hlavný dôraz pri používaní tohto nástroja je na spoluprácu tímu vývojárov s diaľkovým klastrom. V tomto prípade, ak už boli uskutočnené niektoré fázy kompilácie a testovania, to podstatne urýchli celý proces, pretože Garden môže využiť cachované výsledky.
Modulom projektu môže byť kontajner, Maven kontajner, Helm chart, manifest pre kubectl apply alebo dokonca funkcia OpenFaaS. A ktorýkoľvek z modulov je možné ťahať z diaľkového Git repozitára. Modul môže definovať (alebo nemusí) služby, úlohy a testy. Služby a úlohy môžu mať závislosti, čo umožňuje určiť poradie nasadenia tej ktorej služby, usporiadať spúšťanie úloh a testov.
Garden poskytuje používateľovi krásny dashboard (zatiaľ v ), v ktorom sa zobrazuje graf projektu: komponenty, poradie kompilácie, realizácie úloh a testov, ich vzťahy a závislosti. Priamo v prehliadači si môžete prezrieť aj logy všetkých komponentov projektu, skontrolovať, čo daný komponent vracia cez HTTP (ak je pre neho samozrejme vyhlásený zdroj ingress).

Panel pre Garden
Tento nástroj má aj režim hot-reload, ktorý jednoducho synchronizuje zmeny skriptov s kontajnerom v klastri a mnohonásobne urýchľuje proces ladenia aplikácie. Garden má dobrý a slušný , ktoré umožňujú rýchlo sa oboznámiť a začať používať. Mimochodom, nedávno sme zverejnili od jeho autorov.
Záver
Samozrejme, tento zoznam nástrojov na vývoj a ladenie aplikácií v Kubernetes nie je vyčerpávajúci. Existuje ešte mnoho veľmi užitočných a praktických utilít, ktoré si zaslúžia, ak nie samostatný článok, tak minimálne zmienku. Povedzte nám, čo používate vy, s akými problémami ste sa stretli a ako ste ich riešili!
P.S.
Prečítajte si tiež na našom blogu:
- «»;
- «»;
- «»;
- «».
Zdroj: habr.com
