Alati za programere aplikacija koje rade na Kubernetesu

Alati za programere aplikacija koje rade na Kubernetesu

Moderan pristup poslovanju rješava mnoge goruće poslovne probleme. Kontejneri i orkestratori olakšavaju skaliranje projekata bilo koje složenosti, pojednostavljuju izdavanje novih verzija, čine ih pouzdanijima, ali istovremeno stvaraju dodatne probleme programerima. Programer, prije svega, brine o svom kodu: arhitekturi, kvaliteti, performansama, eleganciji - a ne kako će raditi u Kubernetesu i kako ga testirati i debugirati nakon čak i minimalnih promjena. Stoga je također sasvim prirodno da se alati za Kubernetes aktivno razvijaju, pomažući u rješavanju problema čak i "najarhaičnijih" programera i omogućujući im da se usredotoče na glavnu stvar.

Ova recenzija pruža kratke informacije o nekim od alata koji olakšavaju život programeru čiji se kod izvodi u pod'axu Kubernetes klastera.

Jednostavni pomagači

Kubectl-debug

  • Donja linija: dodajte svoj spremnik u Pod i pogledajte što se događa u njemu.
  • GitHub.
  • Kratka GH statistika: 715 zvjezdica, 54 obveza, 9 suradnika.
  • Jezik: Idi.
  • Licenca: Apache licenca 2.0.

Ovaj dodatak za kubectl omogućuje vam stvaranje dodatnog spremnika unutar pod-a od interesa, koji će dijeliti prostor naziva procesa s drugim spremnicima. U njemu možete otkloniti pogreške u radu modula: provjeriti mrežu, poslušati mrežni promet, napraviti analizu procesa koji vas zanima itd.

Također se možete prebaciti na procesni spremnik pokretanjem chroot /proc/PID/root - ovo može biti vrlo zgodno kada trebate dobiti korijensku ljusku u spremniku za koji je postavljena u manifestu securityContext.runAs.

Alat je jednostavan i učinkovit pa može biti od koristi svakom programeru. Više o tome pisali smo u zasebni članak.

TelePresence

  • Donja linija: prenesite aplikaciju na svoje računalo. Lokalno razvijajte i ispravljajte pogreške.
  • web stranica; GitHub.
  • Kratka GH statistika: 2131 zvjezdica, 2712 obveza, 33 suradnika.
  • Jezik: Python.
  • Licenca: Apache licenca 2.0.

Ideja ovog snap-ina je pokrenuti spremnik s aplikacijom na lokalnom korisničkom računalu i proxy sav promet od klastera do njega i natrag. Ovaj vam pristup omogućuje lokalni razvoj jednostavnim uređivanjem datoteka u vašem omiljenom IDE-u: rezultati će biti odmah dostupni.

Prednosti lokalnog pokretanja su pogodnost uređivanja i trenutni rezultati, mogućnost otklanjanja pogrešaka aplikacije na uobičajeni način. Loša strana je što je zahtjevan za brzinu veze, što je posebno vidljivo kada morate raditi s aplikacijom s prilično visokim RPS-om i prometom. Osim toga, Telepresence ima problema s mountovima volumena na Windowsima, što može biti odlučujuće ograničenje za programere koji su navikli na ovaj OS.

Već smo podijelili svoje iskustvo korištenja Telepresencea здесь.

Ksync

  • Donja linija: gotovo trenutna sinkronizacija koda sa spremnikom u klasteru.
  • GitHub.
  • Kratka GH statistika: 555 zvjezdica, 362 obveza, 11 suradnika.
  • Jezik: Idi.
  • Licenca: Apache licenca 2.0.

Uslužni program omogućuje sinkronizaciju sadržaja lokalnog direktorija s direktorijem spremnika koji se izvodi u klasteru. Takav je alat savršen za programere u skriptnim programskim jezicima, čiji je glavni problem isporuka koda u spremnik koji radi. Ksync je dizajniran za ublažavanje ove glavobolje.

Kada se jednom inicijalizira naredbom ksync init u klasteru se kreira DaemonSet koji se koristi za praćenje stanja datotečnog sustava odabranog spremnika. Na svom lokalnom računalu programer pokreće naredbu ksync watch, koji prati konfiguracije i pokreće se syncthing, koji izravno sinkronizira datoteke s klasterom.

Sve što preostaje je uputiti ksync što s čime sinkronizirati. Na primjer, ova naredba:

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

...će stvoriti promatrača pod nazivom myprojectkoji će tražiti mahunu s oznakom app=backend i pokušajte sinkronizirati lokalni imenik /home/user/myproject/ sa katalogom /var/www/myproject/ kod kontejnera tzv php.

Problemi i napomene o ksync-u iz našeg iskustva:

  • Mora se koristiti na čvorovima klastera Kubernetes overlay2 kao upravljački program za pohranu za Docker. Uslužni program neće raditi ni s jednim drugim.
  • Kada koristite Windows kao klijentski OS, promatrač datotečnog sustava možda neće raditi ispravno. Ovaj bug je primijećen pri radu s velikim imenicima - s velikim brojem ugniježđenih datoteka i direktorija. Mi smo stvorili relevantno pitanje u projektu sinkronizacije, ali na njemu još nema napretka (od početka srpnja).
  • Koristite datoteku .stignore za navođenje staza ili uzoraka datoteka koje nije potrebno sinkronizirati (na primjer, direktorije app/cache и .git).
  • Prema zadanim postavkama, ksync će ponovno pokrenuti spremnik kad god se datoteke promijene. Za Node.js ovo je zgodno, ali za PHP je potpuno nepotrebno. Bolje je isključiti opcache i koristiti zastavicu --reload=false.
  • Konfiguracija se uvijek može ispraviti $HOME/.ksync/ksync.yaml.

tikva

  • Donja linija: debug procese izravno u klasteru.
  • GitHub.
  • Kratka GH statistika: 1154 zvjezdice, 279 obveza, 23 suradnika.
  • Jezik: Idi.
  • Licenca: Apache licenca 2.0.

Ovaj je alat dizajniran za otklanjanje pogrešaka u procesima izravno u modulima. Uslužni program je jednostavan i interaktivno vam omogućuje odabir željenog programa za ispravljanje pogrešaka (Pogledaj ispod) i namespace + pod, u čiji proces trebate intervenirati. Trenutno podržano:

  • delve - za Go aplikacije;
  • GDB - putem ciljne daljine + prosljeđivanje porta;
  • JDWP prosljeđivanje porta za otklanjanje pogrešaka u Java aplikacijama.

Na strani IDE, podrška je dostupna samo u VScode (koristeći proširenje), međutim, planovi za tekuću (2019.) godinu uključuju Eclipse i Intellij.

Za otklanjanje pogrešaka procesa, Squash pokreće povlašteni spremnik na čvorovima klastera, tako da se prvo morate upoznati s mogućnostima siguran način kako biste izbjegli sigurnosne probleme.

Cjelovita rješenja

Prijeđimo na tešku artiljeriju - više "velikih" projekata dizajniranih da odmah zadovolje mnoge potrebe programera.

NB: Na ovom popisu, naravno, postoji mjesto za naš uslužni program otvorenog koda werf (ranije poznat kao dapp). No, o tome smo već više puta pisali i pričali, pa smo ga odlučili ne uključiti u recenziju. Za one koji se žele bolje upoznati s njegovim mogućnostima, preporučamo pročitati/poslušati izvještaj “werf je naš alat za CI/CD u Kubernetesu".

DevSpace

  • Donja linija: za one koji žele početi raditi u Kubernetesu, ali ne žele ulaziti duboko u njegovu džunglu.
  • GitHub.
  • Kratka GH statistika: 630 zvjezdica, 1912 obveza, 13 suradnika.
  • Jezik: Idi.
  • Licenca: Apache licenca 2.0.

Rješenje istoimene tvrtke koja nudi upravljane klastere s Kubernetesom za timski razvoj. Uslužni program je stvoren za komercijalne klastere, ali odlično radi sa svim ostalima.

Prilikom izvođenja naredbe devspace init u katalogu projekata ponudit će vam se (interaktivno):

  • odaberite radni Kubernetes klaster,
  • koristiti postojeće Dockerfile (ili generirajte novi) da biste stvorili spremnik na temelju njega,
  • odaberite spremište za pohranu slika spremnika itd.

Nakon svih ovih pripremnih koraka, možete započeti razvoj pokretanjem naredbe devspace dev. Izgradit će spremnik, učitati ga u repozitorij, pokrenuti implementaciju u klaster i pokrenuti prosljeđivanje porta i sinkronizaciju spremnika s lokalnim imenikom.

Po želji, od vas će se tražiti da premjestite terminal u spremnik. Ne biste trebali odbiti, jer u stvarnosti spremnik počinje s naredbom sleep, a za stvarno testiranje aplikaciju je potrebno pokrenuti ručno.

Konačno, tim devspace deploy izbacuje aplikaciju i pripadajuću infrastrukturu u klaster, nakon čega sve počinje funkcionirati u borbenom načinu rada.

Sva konfiguracija projekta pohranjena je u datoteci devspace.yaml. Osim postavki razvojnog okruženja, u njemu možete pronaći i opis infrastrukture, sličan standardnim Kubernetes manifestima, samo jako pojednostavljen.

Alati za programere aplikacija koje rade na Kubernetesu
Arhitektura i glavne faze rada s DevSpaceom

Osim toga, projektu je jednostavno dodati unaprijed definiranu komponentu (na primjer, MySQL DBMS) ili Helm grafikon. Pročitajte više u dokumentacija - nije komplicirano.

skela

  • web stranica; GitHub.
  • Kratka GH statistika: 7423 zvjezdice, 4173 obveza, 136 suradnika.
  • Jezik: Idi.
  • Licenca: Apache licenca 2.0.

Ovaj uslužni program iz Googlea tvrdi da pokriva sve potrebe programera čiji će se kod nekako pokrenuti na Kubernetes klasteru. Početak korištenja nije tako jednostavan kao devspace: nema interaktivnosti, otkrivanja jezika i automatske izrade Dockerfile ovdje ti neće ponuditi.

Međutim, ako vas to ne plaši, evo što vam Skaffold omogućuje:

  • Pratite promjene izvornog koda.
  • Sinkronizirajte ga s spremnikom mahune ako ne zahtijeva sastavljanje.
  • Prikupite spremnike s kodom, ako se jezik tumači, ili kompilirajte artefakte i spakirajte ih u spremnike.
  • Rezultirajuće slike automatski se provjeravaju pomoću ispitivanje strukture kontejnera.
  • Označavanje i učitavanje slika u Docker registar.
  • Postavite aplikaciju u klaster koristeći kubectl, Helm ili kustomize.
  • Izvršite prosljeđivanje porta.
  • Debug aplikacije napisane u Javi, Node.js, Python.

Tijek rada u raznim varijantama deklarativno je opisan u datoteci skaffold.yaml. Za projekt također možete definirati nekoliko profila u kojima možete djelomično ili potpuno promijeniti faze montaže i postavljanja. Na primjer, za razvoj odredite osnovnu sliku pogodnu za programera, a za postavljanje i proizvodnju - minimalnu (+ koristite securityContext spremnike ili redefinirati klaster u kojem će se aplikacija implementirati).

Docker kontejneri mogu se graditi lokalno ili daljinski: u Google Cloud Build ili u klasteru pomoću Kaniko. Bazel i Jib Maven/Gradle također su podržani. Za označavanje, Skaffold podržava mnoge strategije: git commit hash, datum/vrijeme, sha256-zbroj izvora itd.

Zasebno je vrijedno spomenuti mogućnost testiranja spremnika. Već spomenuti okvir za testiranje strukture spremnika nudi sljedeće metode provjere:

  • Izvršavanje naredbi u kontekstu spremnika s praćenjem izlaznih statusa i provjerom tekstualnog izlaza naredbe.
  • Provjera prisutnosti datoteka u spremniku i podudaranja s navedenim atributima.
  • Kontrola sadržaja datoteka pomoću regularnih izraza.
  • Provjera metapodataka slike (ENV, ENTRYPOINT, VOLUMES itd.).
  • Provjera kompatibilnosti licence.

Sinkronizacija datoteka sa spremnikom ne provodi se na najoptimalniji način: Skaffold jednostavno stvara arhivu s izvorima, kopira je i raspakira u spremnik (tar mora biti instaliran). Stoga, ako je vaš glavni zadatak sinkronizacija koda, bolje je pogledati prema specijaliziranom rješenju (ksync).

Alati za programere aplikacija koje rade na Kubernetesu
Glavne faze rada Skaffolda

Općenito, alat vam ne dopušta apstrahiranje iz manifesta Kubernetesa i nema nikakvu interaktivnost, pa se može činiti teškim za svladavanje. Ali to je i njegova prednost - veća sloboda djelovanja.

Vrt

  • web stranica; GitHub.
  • Kratka GH statistika: 1063 zvjezdice, 1927 obveza, 17 suradnika.
  • Jezik: TypeScript (planira se projekt razdvojiti na nekoliko komponenti od kojih će neke biti u Go-u te također napraviti SDK za izradu dodataka u TypeScript/JavaScript i Go).
  • Licenca: Apache licenca 2.0.

Kao i Skaffold, Garden ima za cilj automatizirati procese isporuke aplikacijskog koda u K8s klaster. Da biste to učinili, prvo trebate opisati strukturu projekta u YAML datoteci, a zatim pokrenuti naredbu garden dev. Ona će učiniti svu magiju:

  • Skupljajte spremnike s raznim dijelovima projekta.
  • Provodi integracijske i jedinične testove, ako su opisani.
  • Izvodi sve komponente projekta u klaster.
  • Ako se izvorni kod promijeni, ponovno će pokrenuti cijeli cjevovod.

Glavni fokus korištenja ovog alata je dijeljenje udaljenog klastera s razvojnim timom. U tom slučaju, ako su neki od koraka izgradnje i testiranja već obavljeni, to će značajno ubrzati cijeli proces, budući da će Garden moći koristiti predmemorirane rezultate.

Projektni modul može biti kontejner, Maven kontejner, Helm grafikon, manifest za kubectl apply ili čak OpenFaaS funkcija. Štoviše, bilo koji od modula može se izvući iz udaljenog Git repozitorija. Modul može, ali ne mora definirati usluge, zadatke i testove. Usluge i zadaci mogu imati ovisnosti, tako da možete odrediti redoslijed implementacije određene usluge i organizirati pokretanje zadataka i testova.

Garden korisniku pruža prekrasnu kontrolnu ploču (trenutno in eksperimentalno stanje), koji prikazuje graf projekta: komponente, redoslijed montaže, izvođenje zadataka i testova, njihove veze i ovisnosti. Upravo u pregledniku možete vidjeti zapisnike svih komponenti projekta i provjeriti što pojedina komponenta izlazi putem HTTP-a (ako je, naravno, za nju deklariran ulazni resurs).

Alati za programere aplikacija koje rade na Kubernetesu
Panel za vrt

Ovaj alat također ima način ponovnog učitavanja tijekom rada, koji jednostavno sinkronizira promjene skripte sa spremnikom u klasteru, uvelike ubrzavajući proces otklanjanja pogrešaka u aplikaciji. Garden ima dobar dokumentaciju i nije loše niz primjera, što vam omogućuje da se brzo naviknete na njega i počnete ga koristiti. Usput, nedavno smo objavili prijevod članka od njegovih autora.

Zaključak

Naravno, ovaj popis alata za razvoj i uklanjanje pogrešaka u aplikacijama u Kubernetesu nije ograničen na. Postoji mnogo više vrlo korisnih i praktičnih alata koji su vrijedni, ako ne zasebnog članka, onda barem spomena. Recite nam što koristite, na koje ste probleme nailazili i kako ste ih riješili!

PS

Pročitajte i na našem blogu:

Izvor: www.habr.com

Dodajte komentar