Eszközök Kubernetesen futó alkalmazások fejlesztői számára

Eszközök Kubernetesen futó alkalmazások fejlesztői számára

A működés korszerű megközelítése számos sürgető üzleti problémát megold. A konténerek és hangszerelők megkönnyítik a bonyolult projektek méretezését, egyszerűsítik az új verziók kiadását, megbízhatóbbá teszik őket, ugyanakkor további problémákat okoznak a fejlesztőknek. A programozót mindenekelőtt a kódja érdekli: az architektúra, a minőség, a teljesítmény, az elegancia - és nem az, hogy hogyan fog működni a Kubernetesben, és hogyan tesztelheti és debuggolhatja azt minimális változtatások után. Ezért az is teljesen természetes, hogy a Kubernetes eszközeit aktívan fejlesztik, amelyek segítenek megoldani még a „legarchaikusabb” fejlesztők problémáit is, és lehetővé teszik számukra, hogy a fő dologra összpontosítsanak.

Ez az áttekintés rövid tájékoztatást nyújt néhány olyan eszközről, amelyek megkönnyítik azoknak a programozóknak az életét, akiknek a kódja egy Kubernetes-fürt pod'axében fut.

Egyszerű segítők

Kubectl-debug

  • A lényeg: add hozzá a tárolót egy Podhoz, és nézd meg, mi történik benne.
  • GitHub.
  • Rövid GH statisztika: 715 csillag, 54 commit, 9 közreműködő.
  • Nyelv: Menj.
  • Licenc: Apache License 2.0.

Ez a kubectl beépülő modul lehetővé teszi egy további tároló létrehozását a kívánt podban, amely megosztja a folyamat névterét más tárolókkal. Ebben hibakeresést végezhet a pod működésében: ellenőrizheti a hálózatot, meghallgathatja a hálózati forgalmat, megtekintheti az érdeklődési folyamatot stb.

Futással is válthat a folyamattárolóra chroot /proc/PID/root - ez nagyon kényelmes lehet, ha gyökérhéjat kell beszereznie egy olyan tárolóban, amelyhez be van állítva a manifestben securityContext.runAs.

Az eszköz egyszerű és hatékony, így minden fejlesztő számára hasznos lehet. Bővebben írtunk róla külön cikket.

TelePresence

  • A lényeg: vigye át az alkalmazást a számítógépére. Helyi fejlesztés és hibakeresés.
  • Telek; GitHub.
  • Rövid GH statisztika: 2131 csillag, 2712 commit, 33 közreműködő.
  • Nyelv: Python.
  • Licenc: Apache License 2.0.

Ennek a beépülő modulnak az az ötlete, hogy elindítson egy tárolót az alkalmazással a helyi felhasználói számítógépen, és a fürttől a fürttől oda és vissza az összes forgalmat proxyzza. Ez a megközelítés lehetővé teszi a helyi fejlesztést, egyszerűen szerkesztve a fájlokat kedvenc IDE-jében: az eredmények azonnal elérhetőek lesznek.

A helyi futtatás előnyei a szerkesztések és az azonnali eredmények kényelme, az alkalmazás szokásos módon történő hibakeresésének lehetősége. Hátránya, hogy igényes a csatlakozási sebességre, ami különösen akkor szembetűnő, ha meglehetősen magas RPS-sel és forgalmú alkalmazással kell dolgozni. Ezenkívül a Telepresence-nek problémái vannak a Windows kötetbe történő rögzítésével, ami döntő korlát lehet az ehhez az operációs rendszerhez szokott fejlesztők számára.

A Telepresence használatával kapcsolatos tapasztalatainkat már megosztottuk itt.

Ksync

  • A lényeg: a kód szinte azonnali szinkronizálása a fürtben lévő tárolóval.
  • GitHub.
  • Rövid GH statisztika: 555 csillag, 362 commit, 11 közreműködő.
  • Nyelv: Menj.
  • Licenc: Apache License 2.0.

A segédprogram lehetővé teszi egy helyi könyvtár tartalmának szinkronizálását a fürtben futó tároló könyvtárával. Egy ilyen eszköz tökéletes a script programozási nyelvek fejlesztői számára, akiknek fő problémája a kód eljuttatása egy futó konténerbe. A Ksync célja a fejfájás enyhítése.

Ha egyszer inicializálja a parancsot ksync init egy DaemonSet jön létre a fürtben, amely a kiválasztott tároló fájlrendszerének állapotának figyelésére szolgál. A fejlesztő a helyi számítógépén futtatja a parancsot ksync watch, amely figyeli a konfigurációkat és fut syncthing, amely közvetlenül szinkronizálja a fájlokat a fürttel.

Nem marad más hátra, mint utasítani a ksync-et, hogy mit és mivel szinkronizáljon. Például ez a parancs:

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

...létrehoz egy figyelőt myprojectamely egy címkével ellátott hüvelyt fog keresni app=backend és próbálja meg szinkronizálni a helyi könyvtárat /home/user/myproject/ katalógussal /var/www/myproject/ nevű konténernél php.

Problémák és megjegyzések a ksync-ről tapasztalatainkból:

  • Kubernetes-fürtcsomópontokon kell használni overlay2 mint a Docker tárolási illesztőprogramja. A segédprogram másokkal nem fog működni.
  • Ha a Windows-t kliens operációs rendszerként használja, előfordulhat, hogy a fájlrendszer-figyelő nem működik megfelelően. Ezt a hibát akkor vettük észre, amikor nagy könyvtárakkal dolgoztunk – nagyszámú beágyazott fájllal és könyvtárral. Mi alkottunk releváns kérdés a szinkronizálási projektben, de még nincs előrelépés (július eleje óta).
  • Fájl használata .stignore olyan elérési utak vagy fájlminták megadásához, amelyeket nem kell szinkronizálni (például könyvtárak app/cache и .git).
  • Alapértelmezés szerint a ksync újraindítja a tárolót, amikor a fájlok megváltoznak. Node.js esetén ez kényelmes, PHP-nél viszont teljesen felesleges. Jobb, ha kikapcsolod az opcache-t és használod a zászlót --reload=false.
  • A konfiguráció mindig javítható $HOME/.ksync/ksync.yaml.

Squash

  • A lényeg: a folyamatok hibakeresése közvetlenül a fürtben.
  • GitHub.
  • Rövid GH statisztika: 1154 csillag, 279 commit, 23 közreműködő.
  • Nyelv: Menj.
  • Licenc: Apache License 2.0.

Ezt az eszközt közvetlenül a podokban lévő folyamatok hibakeresésére tervezték. A segédprogram egyszerű, és interaktív módon lehetővé teszi a kívánt hibakereső kiválasztását (lásd lejjebb) és névtér + pod, aminek folyamatában be kell avatkozni. Jelenleg támogatott:

  • delve - Go alkalmazásokhoz;
  • GDB - cél távoli + port továbbításon keresztül;
  • JDWP porttovábbítás Java alkalmazások hibakereséséhez.

Az IDE oldalon a támogatás csak a VScode-ban érhető el (a terjeszkedés, azonban a jelenlegi (2019-es) év tervei között szerepel az Eclipse és az Intellij.

A folyamatok hibakereséséhez a Squash egy privilegizált tárolót futtat a fürt csomópontjain, ezért először meg kell ismerkednie a képességekkel. biztonságos mód a biztonsági problémák elkerülése érdekében.

Komplett megoldások

Térjünk át a nehéztüzérségre - több „nagyszabású” projektre, amelyeket úgy terveztek, hogy azonnal megfeleljenek a fejlesztők számos igényeinek.

NB: Ebben a listában természetesen van helye a nyílt forráskódú segédprogramunknak werf (korábbi nevén dapp). Azonban már többször írtunk és beszéltünk róla, ezért úgy döntöttünk, hogy nem vesszük fel a felülvizsgálatba. Azoknak, akik szeretnének jobban megismerni a képességeit, javasoljuk, hogy olvassák el/hallgassák meg a „jelentést”A werf a CI/CD-eszközünk a Kubernetesben".

DevSpace

  • A lényeg: azoknak, akik szeretnének Kubernetesben dolgozni, de nem szeretnének mélyen ásni a dzsungelét.
  • GitHub.
  • Rövid GH statisztika: 630 csillag, 1912 commit, 13 közreműködő.
  • Nyelv: Menj.
  • Licenc: Apache License 2.0.

Az azonos nevű cég megoldása, amely felügyelt fürtöket biztosít Kubernetes-szel a csapatfejlesztéshez. A segédprogramot kereskedelmi fürtökhöz hozták létre, de remekül működik másokkal.

A parancs futtatásakor devspace init a projektkatalógusban (interaktívan):

  • válasszon egy működő Kubernetes-fürtöt,
  • használja a meglévő Dockerfile (vagy hozzon létre egy újat), hogy ez alapján tárolót hozzon létre,
  • válasszon tárolót a tárolóképek tárolására stb.

Mindezen előkészítő lépések után a parancs futtatásával megkezdheti a fejlesztést devspace dev. Ez elkészíti a tárolót, feltölti a tárolóba, kihelyezi a központi telepítést a fürtbe, és megkezdi a porttovábbítást és a tároló szinkronizálását a helyi címtárral.

Opcionálisan a rendszer felkéri, hogy helyezze át a terminált a tárolóba. Nem szabad megtagadni, mert a valóságban a konténer a sleep paranccsal indul, és a valódi teszteléshez manuálisan kell elindítani az alkalmazást.

Végül a csapat devspace deploy kihelyezi az alkalmazást és a hozzá tartozó infrastruktúrát a fürtbe, majd minden harci módban kezd működni.

A projekt összes konfigurációja egy fájlban tárolódik devspace.yaml. A fejlesztői környezet beállításai mellett megtalálható benne az infrastruktúra leírása is, hasonlóan a szabványos Kubernetes manifesztekhez, csak nagyban leegyszerűsítve.

Eszközök Kubernetesen futó alkalmazások fejlesztői számára
A DevSpace-vel való munka felépítése és főbb szakaszai

Ezenkívül könnyen hozzáadható egy előre meghatározott összetevő (például egy MySQL DBMS) vagy egy Helm diagram a projekthez. Bővebben itt dokumentáció - nem bonyolult.

Skaffold

  • Telek; GitHub.
  • Rövid GH statisztika: 7423 csillag, 4173 commit, 136 közreműködő.
  • Nyelv: Menj.
  • Licenc: Apache License 2.0.

Ez a Google segédprogram azt állítja, hogy lefedi egy olyan fejlesztő minden igényét, akinek a kódja valamilyen módon futni fog egy Kubernetes-fürtön. Használatának megkezdése nem olyan egyszerű, mint a devspace: nincs interaktivitás, nyelvérzékelés és automatikus létrehozás Dockerfile itt nem ajánlják fel neked.

Ha azonban ez nem ijeszti meg, a Skaffold a következőket teszi lehetővé:

  • Kövesse nyomon a forráskód változásait.
  • Szinkronizálja a hüvely tárolójával, ha nem igényel összeszerelést.
  • Gyűjtse össze a kóddal ellátott konténereket, ha a nyelv értelmezett, vagy fordítsa le a műtermékeket, és csomagolja konténerekbe.
  • Az eredményül kapott képeket a rendszer automatikusan ellenőrzi a segítségével konténer-szerkezet-vizsgálat.
  • Képek címkézése és feltöltése a Docker Registry-be.
  • Telepítsen egy alkalmazást egy fürtben a kubectl, a Helm vagy a kustomize használatával.
  • Hajtsa végre a porttovábbítást.
  • Java, Node.js, Python nyelven írt alkalmazások hibakeresése.

A munkafolyamat különféle változataiban deklaratív módon van leírva a fájlban skaffold.yaml. Egy projekthez több profilt is meghatározhat, amelyekben részben vagy teljesen megváltoztathatja az összeállítási és telepítési szakaszokat. Például a fejlesztéshez adjon meg egy alapképet, amely kényelmes a fejlesztő számára, a színpadra állításhoz és a gyártáshoz pedig egy minimálisat (+ használat securityContext tárolókba, vagy határozza meg újra azt a fürtöt, amelyben az alkalmazás telepítve lesz).

Docker konténerek építhetők helyben vagy távolról: be Google Cloud Build vagy egy klaszterben használja Kaniko. A Bazel és a Jib Maven/Gradle szintén támogatott. A címkézéshez a Skaffold számos stratégiát támogat: git commit hash, dátum/idő, sha256-os forrásösszeg stb.

Külön érdemes megjegyezni a konténerek tesztelésének lehetőségét. A már említett konténer-struktúra-teszt keretrendszer a következő ellenőrzési módszereket kínálja:

  • Parancsok végrehajtása egy konténer kontextusában a kilépési állapotok nyomon követésével és a parancs szöveges kimenetének ellenőrzésével.
  • Fájlok jelenlétének ellenőrzése a tárolóban és a megadott attribútumok egyezése.
  • Fájltartalom szabályozása reguláris kifejezésekkel.
  • Kép metaadatainak ellenőrzése (ENV, ENTRYPOINT, VOLUMES és hasonlók).
  • Licenc kompatibilitás ellenőrzése.

A fájlok szinkronizálása a tárolóval nem a legoptimálisabb módon történik: a Skaffold egyszerűen létrehoz egy archívumot a forrásokkal, lemásolja és kicsomagolja a tárolóba (a tar-t telepíteni kell). Ezért, ha a fő feladata a kódszinkronizálás, jobb, ha egy speciális megoldást (ksync) keres.

Eszközök Kubernetesen futó alkalmazások fejlesztői számára
A Skaffold működésének fő szakaszai

Általánosságban elmondható, hogy az eszköz nem teszi lehetővé az elvonatkoztatást a Kubernetes manifesztjeitől, és nincs interaktivitása, így nehéznek tűnhet az elsajátítása. De ez az előnye is – nagyobb cselekvési szabadság.

Kertápolásra

  • Telek; GitHub.
  • Rövid GH statisztika: 1063 csillag, 1927 commit, 17 közreműködő.
  • Nyelv: TypeScript (a tervek szerint a projektet több komponensre bontják, amelyek egy része Go-ban lesz, és egy SDK-t is készítenek a TypeScript/JavaScript és Go nyelvű kiegészítők létrehozásához).
  • Licenc: Apache License 2.0.

A Skaffoldhoz hasonlóan a Garden is automatizálja az alkalmazáskód K8s-fürthöz való eljuttatásának folyamatait. Ehhez először le kell írnia a projekt szerkezetét egy YAML fájlban, majd futtassa a parancsot garden dev. Minden varázslatot megtesz:

  • Gyűjtsön konténereket a projekt különböző részeivel.
  • Integrációs és egységteszteket végez, ha leírták.
  • A projekt összes összetevőjét közzéteszi a fürtben.
  • Ha a forráskód megváltozik, újraindítja a teljes folyamatot.

Az eszköz használatának fő célja egy távoli fürt megosztása a fejlesztőcsapattal. Ebben az esetben, ha az építési és tesztelési lépések egy része már megtörtént, az jelentősen felgyorsítja a teljes folyamatot, mivel a Garden képes lesz használni a gyorsítótárazott eredményeket.

A projektmodul lehet egy konténer, egy Maven-tároló, egy Helm-diagram vagy egy manifest a számára kubectl apply vagy akár egy OpenFaaS függvény. Ezenkívül a modulok bármelyike ​​lehívható egy távoli Git-tárolóból. Egy modul meghatározhat szolgáltatásokat, feladatokat és teszteket, de nem. A szolgáltatásoknak és feladatoknak lehetnek függőségei, így meghatározhatja egy adott szolgáltatás telepítési sorrendjét, és megszervezheti a feladatok és tesztek elindítását.

A Garden gyönyörű műszerfalat biztosít a felhasználónak (jelenleg kísérleti állapot), amely megjeleníti a projekt grafikonját: komponensek, összeállítási sorrend, feladatok és tesztek végrehajtása, ezek kapcsolatai és függőségei. Közvetlenül a böngészőben megtekintheti az összes projektösszetevő naplóját, és ellenőrizheti, hogy az adott összetevő mit ad ki HTTP-n keresztül (ha természetesen bemeneti erőforrás van deklarálva hozzá).

Eszközök Kubernetesen futó alkalmazások fejlesztői számára
Panel a kerthez

Ez az eszköz is rendelkezik egy hot-reload móddal, amely egyszerűen szinkronizálja a szkript módosításait a fürtben lévő tárolóval, ami jelentősen felgyorsítja az alkalmazások hibakeresési folyamatát. A kertben van egy jó a dokumentáció és nem rossz példakészlet, amely lehetővé teszi, hogy gyorsan megszokja és elkezdje használni. Mellesleg nemrég jelentettük meg cikk fordítása szerzőitől.

Következtetés

Természetesen a Kubernetes alkalmazások fejlesztésére és hibakeresésére szolgáló eszközök listája nem korlátozódik erre. Még sok nagyon hasznos és praktikus segédprogram van, amelyek érdemesek, ha nem is külön cikkre, de legalább említésre. Mondja el, mit használ, milyen problémákkal találkozott és hogyan oldotta meg őket!

PS

Olvassa el blogunkon is:

Forrás: will.com

Hozzászólás