Nástroje pro vývojáře aplikací běžících na Kubernetes

Nástroje pro vývojáře aplikací běžících na Kubernetes

Moderní přístup k provozu řeší mnoho naléhavých obchodních problémů. Kontejnery a orchestrátory usnadňují škálování projektů jakékoli složitosti, zjednodušují vydávání nových verzí, činí je spolehlivějšími, ale zároveň vytvářejí další problémy pro vývojáře. Programátor se v první řadě stará o svůj kód: architekturu, kvalitu, výkon, eleganci – a ne o to, jak to bude fungovat v Kubernetes a jak ho po provedení i minimálních změn testovat a ladit. Proto je také zcela přirozené, že se aktivně vyvíjejí nástroje pro Kubernetes, které pomáhají řešit problémy i těch „archaičtějších“ vývojářů a umožňují jim soustředit se na to hlavní.

Tato recenze poskytuje stručné informace o některých nástrojích, které usnadňují život programátorovi, jehož kód běží v pod'ax clusteru Kubernetes.

Jednoduché pomocníky

Kubectl-debug

  • Spodní linie: přidejte svůj kontejner do podu a uvidíte, co se v něm stane.
  • GitHub.
  • Stručné statistiky GH: 715 hvězdiček, 54 odevzdání, 9 přispěvatelů.
  • Jazyk: Jdi.
  • Licence: Apache License 2.0.

Tento plugin pro kubectl vám umožňuje vytvořit další kontejner uvnitř zájmového modulu, který bude sdílet jmenný prostor procesu s jinými kontejnery. V něm můžete ladit provoz modulu: kontrolovat síť, poslouchat síťový provoz, provádět sledování procesu, který vás zajímá, atd.

Do kontejneru procesu se můžete přepnout také spuštěním chroot /proc/PID/root - to může být velmi výhodné, když potřebujete získat kořenový shell v kontejneru, pro který je nastaven v manifestu securityContext.runAs.

Nástroj je jednoduchý a efektivní, takže může být užitečný pro každého vývojáře. Více jsme o tom psali v samostatný článek.

Teleprezence

  • Spodní linie: přeneste aplikaci do počítače. Vyvíjet a ladit lokálně.
  • Site; GitHub.
  • Stručné statistiky GH: 2131 hvězdiček, 2712 commitů, 33 přispěvatelů.
  • Jazyk: Python.
  • Licence: Apache License 2.0.

Myšlenkou tohoto modulu snap-in je spustit kontejner s aplikací na místním počítači uživatele a proxy veškerý provoz z clusteru do něj a zpět. Tento přístup vám umožňuje vyvíjet lokálně jednoduchou úpravou souborů ve vašem oblíbeném IDE: výsledky budou k dispozici okamžitě.

Výhodou lokálního běhu je pohodlí úprav a okamžitých výsledků, možnost ladit aplikaci běžným způsobem. Nevýhodou je, že je náročný na rychlost připojení, což je znát zejména ve chvíli, kdy musíte pracovat s aplikací s dosti vysokým RPS a provozem. Telepresence má navíc problémy s připojením svazku na Windows, což může být pro vývojáře zvyklé na tento OS rozhodující omezení.

Již jsme se podělili o naše zkušenosti s používáním Telepresence zde.

Ksync

  • Spodní linie: téměř okamžitá synchronizace kódu s kontejnerem v clusteru.
  • GitHub.
  • Stručné statistiky GH: 555 hvězdiček, 362 odevzdání, 11 přispěvatelů.
  • Jazyk: Jdi.
  • Licence: Apache License 2.0.

Obslužný program umožňuje synchronizovat obsah místního adresáře s adresářem kontejneru spuštěného v clusteru. Takový nástroj je ideální pro vývojáře ve skriptovacích programovacích jazycích, jejichž hlavním problémem je doručení kódu do běžícího kontejneru. Ksync je navržen tak, aby zmírnil tuto bolest hlavy.

Při inicializaci jednou příkazem ksync init v clusteru je vytvořena sada DaemonSet, která slouží ke sledování stavu souborového systému vybraného kontejneru. Na svém místním počítači vývojář spustí příkaz ksync watch, který sleduje konfigurace a běhy syncthing, který přímo synchronizuje soubory s clusterem.

Zbývá pouze instruovat ksync, co má s čím synchronizovat. Například tento příkaz:

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

...vytvoří pozorovatele s názvem myprojectkterý bude hledat pod se štítkem app=backend a pokuste se synchronizovat místní adresář /home/user/myproject/ s katalogem /var/www/myproject/ u kontejneru tzv php.

Problémy a poznámky k ksync z našich zkušeností:

  • Musí být použit na uzlech clusteru Kubernetes overlay2 jako ovladač úložiště pro Docker. Nástroj nebude fungovat s žádnými jinými.
  • Při použití Windows jako klientského operačního systému nemusí nástroj pro sledování systému souborů fungovat správně. Tato chyba byla zaznamenána při práci s velkými adresáři - s velkým počtem vnořených souborů a adresářů. Vytvořili jsme relevantní problém v projektu synchronizace, ale zatím v něm (od začátku července) není žádný pokrok.
  • Použít soubor .stignore k určení cest nebo vzorů souborů, které není třeba synchronizovat (například adresáře app/cache и .git).
  • Ve výchozím nastavení ksync restartuje kontejner při každé změně souborů. Pro Node.js je to pohodlné, ale pro PHP je to zcela zbytečné. Je lepší opcache vypnout a použít příznak --reload=false.
  • Konfigurace může být vždy opravena $HOME/.ksync/ksync.yaml.

Squash

  • Spodní linie: ladění procesů přímo v clusteru.
  • GitHub.
  • Stručné statistiky GH: 1154 hvězdiček, 279 commitů, 23 přispěvatelů.
  • Jazyk: Jdi.
  • Licence: Apache License 2.0.

Tento nástroj je určen pro ladění procesů přímo v podech. Nástroj je jednoduchý a interaktivně umožňuje vybrat požadovaný debugger (viz. níže) a jmenný prostor + pod, do jehož procesu musíte zasáhnout. Aktuálně podporované:

  • delve - pro aplikace Go;
  • GDB - přes cílové dálkové ovládání + přesměrování portů;
  • Přesměrování portů JDWP pro ladění aplikací Java.

Na straně IDE je podpora dostupná pouze ve VScode (pomocí rozšíření), nicméně plány na aktuální (2019) rok zahrnují Eclipse a Intellij.

Pro ladění procesů spouští Squash na uzlech clusteru privilegovaný kontejner, takže se musíte nejprve seznámit s možnostmi bezpečný režim abyste se vyhnuli bezpečnostním problémům.

Kompletní řešení

Přejděme k těžkému dělostřelectvu – více „rozsáhlým“ projektům navrženým tak, aby okamžitě uspokojily mnohé potřeby vývojářů.

NB: V tomto seznamu je samozřejmě místo pro náš Open Source nástroj werf (dříve známý jako dapp). Už jsme o něm ale psali a mluvili nejednou, a proto se rozhodli jej do recenze nezařadit. Těm, kteří se chtějí blíže seznámit s jeho schopnostmi, doporučujeme přečíst/poslechnout si zprávu „werf je náš nástroj pro CI/CD v Kubernetes".

DevSpace

  • Spodní linie: pro ty, kteří chtějí začít pracovat v Kubernetes, ale nechtějí se nořit hluboko do jeho džungle.
  • GitHub.
  • Stručné statistiky GH: 630 hvězd, 1912 závazků, 13 přispěvatelů.
  • Jazyk: Jdi.
  • Licence: Apache License 2.0.

Řešení od stejnojmenné společnosti, která poskytuje spravované clustery s Kubernetes pro týmový vývoj. Nástroj byl vytvořen pro komerční clustery, ale funguje skvěle s ostatními.

Při spuštění příkazu devspace init v katalogu projektů vám bude nabídnuto (interaktivně):

  • vyberte funkční cluster Kubernetes,
  • použít existující Dockerfile (nebo vygenerovat nový) a vytvořit na něm založený kontejner,
  • vyberte úložiště pro ukládání obrázků kontejnerů atd.

Po všech těchto přípravných krocích můžete spustit vývoj spuštěním příkazu devspace dev. Vytvoří kontejner, nahraje jej do úložiště, zavede nasazení do clusteru a spustí předávání portů a synchronizaci kontejneru s místním adresářem.

Volitelně budete vyzváni k přesunutí terminálu do kontejneru. Neměli byste odmítnout, protože ve skutečnosti kontejner začíná příkazem spánku a pro skutečné testování je třeba aplikaci spustit ručně.

Konečně tým devspace deploy rozbalí aplikaci a související infrastrukturu do clusteru, poté vše začne fungovat v bojovém režimu.

Veškerá konfigurace projektu je uložena v souboru devspace.yaml. Kromě nastavení vývojového prostředí v něm najdete i popis infrastruktury, podobně jako standardní Kubernetes manifesty, jen značně zjednodušený.

Nástroje pro vývojáře aplikací běžících na Kubernetes
Architektura a hlavní fáze práce s DevSpace

Navíc je snadné do projektu přidat předdefinovanou komponentu (například MySQL DBMS) nebo Helmův diagram. Přečtěte si více v dokumentace - není to složité.

Skaffold

  • Site; GitHub.
  • Stručné statistiky GH: 7423 hvězdiček, 4173 commitů, 136 přispěvatelů.
  • Jazyk: Jdi.
  • Licence: Apache License 2.0.

Tato utilita od Google tvrdí, že pokrývá všechny potřeby vývojáře, jehož kód nějak poběží na clusteru Kubernetes. Začít jej používat není tak snadné jako devspace: žádná interaktivita, detekce jazyka a automatické vytváření Dockerfile tady ti to nenabídnou.

Pokud vás to však nevyděsí, zde je to, co vám Skaffold umožňuje:

  • Sledujte změny zdrojového kódu.
  • Pokud nevyžaduje montáž, synchronizujte jej s nádobou na pouzdro.
  • Sbírejte kontejnery s kódem, pokud je jazyk interpretován, nebo zkompilujte artefakty a zabalte je do kontejnerů.
  • Výsledné obrázky jsou automaticky kontrolovány pomocí kontejner-struktura-test.
  • Označování a nahrávání obrázků do registru Docker.
  • Nasaďte aplikaci v clusteru pomocí kubectl, Helm nebo kustomize.
  • Proveďte přesměrování portů.
  • Ladění aplikací napsaných v Javě, Node.js, Pythonu.

Workflow v různých obměnách je deklarativně popsán v souboru skaffold.yaml. Pro projekt můžete také definovat několik profilů, ve kterých můžete částečně nebo úplně změnit fáze sestavení a nasazení. Například pro vývoj určete základní obraz vhodný pro vývojáře a pro staging a produkci - minimální (+ použití securityContext kontejnery nebo předefinovat cluster, ve kterém bude aplikace nasazena).

Docker kontejnery lze stavět lokálně nebo vzdáleně: v Google Cloud Build nebo v clusteru pomocí Kaniko. Podporovány jsou také Bazel a Jib Maven/Gradle. Pro značkování Skaffold podporuje mnoho strategií: pomocí git commit hash, data/času, sha256-součet zdrojů atd.

Samostatně stojí za zmínku možnost testování kontejnerů. Již zmíněný framework-container-structure-test framework nabízí následující metody ověřování:

  • Provádění příkazů v kontextu kontejneru se sledováním výstupních stavů a ​​kontrolou textového výstupu příkazu.
  • Kontrola přítomnosti souborů v kontejneru a porovnávání zadaných atributů.
  • Řízení obsahu souboru pomocí regulárních výrazů.
  • Ověření metadat obrázku (ENV, ENTRYPOINT, VOLUMES atd.).
  • Kontrola kompatibility licencí.

Synchronizace souborů s kontejnerem neprobíhá nejoptimálněji: Skaffold jednoduše vytvoří archiv se zdroji, zkopíruje jej a rozbalí do kontejneru (musí být nainstalován tar). Pokud je tedy vaším hlavním úkolem synchronizace kódu, je lepší poohlédnout se po specializovaném řešení (ksync).

Nástroje pro vývojáře aplikací běžících na Kubernetes
Hlavní etapy provozu skaffoldu

Obecně vám nástroj neumožňuje abstrahovat z manifestů Kubernetes a nemá žádnou interaktivitu, takže se může zdát obtížné. To je ale také jeho výhoda – větší svoboda jednání.

Zahrada

  • Site; GitHub.
  • Stručné statistiky GH: 1063 hvězd, 1927 závazků, 17 přispěvatelů.
  • Jazyk: TypeScript (plánuje se rozdělení projektu na několik komponent, z nichž některé budou v Go, a také vytvoření SDK pro vytváření doplňků v TypeScript/JavaScript a Go).
  • Licence: Apache License 2.0.

Stejně jako Skaffold, i Garden si klade za cíl automatizovat procesy dodávání aplikačního kódu do clusteru K8s. Chcete-li to provést, musíte nejprve popsat strukturu projektu v souboru YAML a poté spustit příkaz garden dev. Udělá všechna kouzla:

  • Sbírejte nádoby s různými částmi projektu.
  • Provádí integrační a jednotkové testy, pokud nějaké byly popsány.
  • Zavede všechny komponenty projektu do clusteru.
  • Pokud se zdrojový kód změní, restartuje se celý kanál.

Hlavním cílem použití tohoto nástroje je sdílení vzdáleného clusteru s vývojovým týmem. V tomto případě, pokud již byly provedeny některé kroky budování a testování, výrazně to urychlí celý proces, protože Garden bude moci použít výsledky uložené v mezipaměti.

Modul projektu může být kontejner, kontejner Maven, graf Helm, manifest pro kubectl apply nebo dokonce funkci OpenFaaS. Kromě toho lze kterýkoli z modulů stáhnout ze vzdáleného úložiště Git. Modul může nebo nemusí definovat služby, úkoly a testy. Služby a úlohy mohou mít závislosti, díky kterým můžete určit pořadí nasazení konkrétní služby a organizovat spouštění úloh a testů.

Garden poskytuje uživateli krásnou palubní desku (aktuálně v experimentální stav), který zobrazuje graf projektu: komponenty, pořadí montáže, provádění úloh a testů, jejich vazby a závislosti. Přímo v prohlížeči si můžete prohlédnout protokoly všech komponent projektu a zkontrolovat, co konkrétní komponenta vypisuje přes HTTP (pokud je pro ni samozřejmě deklarován vstupní zdroj).

Nástroje pro vývojáře aplikací běžících na Kubernetes
Panel pro zahradu

Tento nástroj má také režim horkého načtení, který jednoduše synchronizuje změny skriptu s kontejnerem v clusteru, což výrazně urychluje proces ladění aplikace. Garden má dobrý dokumentaci a ne špatné soubor příkladů, což vám umožní rychle si na něj zvyknout a začít jej používat. Mimochodem, nedávno jsme publikovali překlad článku od jeho autorů.

Závěr

Tento seznam nástrojů pro vývoj a ladění aplikací v Kubernetes samozřejmě není omezen na. Existuje mnoho dalších velmi užitečných a praktických nástrojů, které stojí za to, když ne samostatný článek, pak alespoň zmínku. Řekněte nám, co používáte, s jakými problémy jste se setkali a jak jste je vyřešili!

PS

Přečtěte si také na našem blogu:

Zdroj: www.habr.com

Přidat komentář