Alati za programere aplikacija koje rade na Kubernetesu

Alati za programere aplikacija koje rade na Kubernetesu

Moderan pristup poslovanju rješava mnoge hitne poslovne probleme. Kontejneri i orkestratori olakšavaju skaliranje projekata bilo koje složenosti, pojednostavljuju izdavanje novih verzija, čine ih pouzdanijima, ali u isto vrijeme stvaraju dodatne probleme programerima. Programeru je, prije svega, stalo do svog koda: arhitekture, kvaliteta, performansi, elegancije – a ne kako će funkcionisati u Kubernetesu i kako ga testirati i debagovati nakon čak i minimalnih izmjena. Stoga je također sasvim prirodno da se alati za Kubernetes aktivno razvijaju, pomažući u rješavanju problema čak i „arhaičnijih“ programera i omogućavajući im da se fokusiraju na glavnu stvar.

Ovaj pregled pruža kratke informacije o nekim alatima koji olakšavaju život programeru čiji se kod izvodi u pod’axu Kubernetes klastera.

Jednostavni pomagači

Kubectl-debug

  • Suština: dodajte svoj kontejner u Pod i pogledajte šta se dešava u njemu.
  • GitHub.
  • Kratka GH statistika: 715 zvjezdica, 54 urezivanja, 9 saradnika.
  • Jezik: Idi.
  • Licenca: Apache License 2.0.

Ovaj dodatak za kubectl vam omogućava da kreirate dodatni kontejner unutar pod od interesa, koji će dijeliti prostor imena procesa sa drugim kontejnerima. U njemu možete otkloniti greške u radu modula: provjeriti mrežu, slušati mrežni promet, napraviti strace procesa od interesa, itd.

Također se možete prebaciti na procesni kontejner pokretanjem chroot /proc/PID/root - ovo može biti vrlo zgodno kada trebate nabaviti root shell u kontejneru za koji je postavljen u manifestu securityContext.runAs.

Alat je jednostavan i efikasan, tako da može biti od koristi svakom programeru. Više o tome pisali smo u poseban članak.

Teleprisutnost

  • Suština: prenesite aplikaciju na svoj računar. Razvijte i otklanjajte greške lokalno.
  • sajt; GitHub.
  • Kratka GH statistika: 2131 zvjezdica, 2712 uplata, 33 saradnika.
  • Jezik: Python.
  • Licenca: Apache License 2.0.

Ideja ovog snap-ina je pokretanje kontejnera sa aplikacijom na računaru lokalnog korisnika i proxy sav promet od klastera do njega i natrag. Ovaj pristup vam omogućava lokalni razvoj jednostavnim uređivanjem datoteka u vašem omiljenom IDE-u: rezultati će biti dostupni odmah.

Prednosti lokalnog pokretanja su pogodnost uređivanja i trenutni rezultati, mogućnost otklanjanja grešaka u aplikaciji na uobičajen način. Nedostatak je što je zahtjevan za brzinu konekcije, što je posebno uočljivo kada morate raditi sa aplikacijom sa prilično visokim RPS-om i prometom. Pored toga, Telepresence ima problema sa montiranjem jačine zvuka na Windows, što može biti odlučujuće ograničenje za programere koji su navikli na ovaj OS.

Već smo podijelili svoje iskustvo korištenja Telepresence-a ovdje.

Ksync

  • Suština: skoro trenutna sinhronizacija koda sa kontejnerom u klasteru.
  • GitHub.
  • Kratka GH statistika: 555 zvjezdica, 362 urezivanja, 11 saradnika.
  • Jezik: Idi.
  • Licenca: Apache License 2.0.

Uslužni program vam omogućava da sinkronizirate sadržaj lokalnog direktorija s direktorijem spremnika koji radi u klasteru. Takav alat je savršen za programere u skriptnim programskim jezicima, čiji je glavni problem isporuka koda u pokrenuti kontejner. Ksync je dizajniran da ublaži ovu glavobolju.

Kada se jednom inicijalizira naredbom ksync init u klasteru se kreira DaemonSet koji se koristi za praćenje stanja sistema datoteka odabranog kontejnera. Na svom lokalnom računaru programer pokreće naredbu ksync watch, koji prati konfiguracije i radi sinhronizacija, koji direktno sinhronizuje datoteke sa klasterom.

Sve što ostaje je da uputite ksync šta da sinhronizuje sa čime. Na primjer, ova naredba:

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

... će kreirati promatrača s imenom myprojectkoji će tražiti kapsulu s oznakom app=backend i pokušajte sinkronizirati lokalni direktorij /home/user/myproject/ sa katalogom /var/www/myproject/ kod kontejnera zvanog php.

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

  • Mora se koristiti na čvorovima Kubernetes klastera overlay2 kao drajver za skladištenje za Docker. Uslužni program neće raditi ni sa jednim drugim.
  • Kada koristite Windows kao klijentski OS, posmatrač sistema datoteka možda neće raditi ispravno. Ova greška je uočena pri radu sa velikim direktorijumima - sa velikim brojem ugniježđenih datoteka i direktorija. Stvorili smo relevantno pitanje u projektu sinhronizacije, ali na njemu još nema pomaka (od početka jula).
  • Koristi fajl .stignore za navođenje staza ili obrazaca datoteka koje ne treba sinkronizirati (na primjer, direktorije app/cache и .git).
  • Podrazumevano, ksync će ponovo pokrenuti kontejner kad god se fajlovi promene. 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

  • Suština: debug procesima direktno u klasteru.
  • GitHub.
  • Kratka GH statistika: 1154 zvjezdice, 279 uplata, 23 saradnika.
  • Jezik: Idi.
  • Licenca: Apache License 2.0.

Ovaj alat je dizajniran za otklanjanje grešaka u procesima direktno u podovima. Uslužni program je jednostavan i interaktivno vam omogućava da odaberete željeni program za otklanjanje grešaka (vidi dolje) i namespace + pod, u čijem procesu morate intervenirati. Trenutno podržano:

  • delve - za Go aplikacije;
  • GDB - preko ciljnog daljinskog + prosljeđivanje porta;
  • JDWP prosljeđivanje portova za otklanjanje grešaka u Java aplikacijama.

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

Za otklanjanje grešaka u procesima, Squash pokreće privilegirani kontejner na čvorovima klastera, tako da se prvo morate upoznati s mogućnostima siguran način kako biste izbjegli sigurnosne probleme.

Kompleksna rješenja

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

NB: Na ovoj listi, naravno, postoji mjesto za naš Open Source uslužni program werf (ranije poznat kao dapp). Međutim, o tome smo već pisali i razgovarali više puta, pa smo odlučili da ga ne uključimo u recenziju. Za one koji žele da se bolje upoznaju sa njegovim mogućnostima, preporučujemo da pročitaju/preslušaju izvještaj “werf je naš alat za CI/CD u Kubernetesu".

DevSpace

  • Suština: za one koji žele da počnu da rade u Kubernetesu, ali ne žele da uđu duboko u njegovu džunglu.
  • GitHub.
  • Kratka GH statistika: 630 zvjezdica, 1912 uplata, 13 saradnika.
  • Jezik: Idi.
  • Licenca: Apache License 2.0.

Rešenje istoimene kompanije, koje obezbeđuje upravljane klastere sa Kubernetesom za razvoj tima. Uslužni program je kreiran za komercijalne klastere, ali odlično radi sa bilo kojim drugim.

Prilikom pokretanja naredbe devspace init u katalogu projekta će vam biti ponuđeno (interaktivno):

  • odaberite radni Kubernetes klaster,
  • koristiti postojeće Dockerfile (ili generirajte novi) da kreirate kontejner na osnovu njega,
  • odaberite spremište za pohranjivanje slika kontejnera, itd.

Nakon svih ovih pripremnih koraka, možete započeti razvoj pokretanjem naredbe devspace dev. Napravit će kontejner, otpremiti ga u spremište, pokrenuti implementaciju u klaster i pokrenuti prosljeđivanje portova i sinkronizaciju kontejnera s lokalnim direktorijem.

Po želji, od vas će biti zatraženo da premjestite terminal u kontejner. Ne biste trebali odbiti, jer u stvari kontejner počinje naredbom za spavanje, a za pravo testiranje aplikaciju je potrebno ručno pokrenuti.

Konačno, tim devspace deploy izbacuje aplikaciju i pripadajuću infrastrukturu u klaster, nakon čega sve počinje funkcionirati u borbenom režimu.

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

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

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

Skaffold

  • sajt; GitHub.
  • Kratka GH statistika: 7423 zvjezdice, 4173 urezivanja, 136 saradnika.
  • Jezik: Idi.
  • Licenca: Apache License 2.0.

Ovaj uslužni program iz Google-a tvrdi da pokriva sve potrebe programera čiji će kod na neki način raditi na Kubernetes klasteru. Početi da ga koristite nije tako lako kao devspace: nema interaktivnosti, detekcije jezika i automatskog kreiranja Dockerfile neće vam to ponuditi ovdje.

Međutim, ako vas ovo ne plaši, evo šta vam Skaffold dozvoljava:

  • Pratite promjene izvornog koda.
  • Sinhronizirajte ga sa spremnikom za mahune ako ne zahtijeva sastavljanje.
  • Prikupite kontejnere s kodom, ako je jezik interpretiran, ili kompajlirajte artefakte i spakujte ih u kontejnere.
  • Rezultirajuće slike se automatski provjeravaju pomoću kontejner-struktura-test.
  • Označavanje i postavljanje slika u Docker Registry.
  • Postavite aplikaciju u klaster koristeći kubectl, Helm ili kustomize.
  • Izvršite prosljeđivanje portova.
  • Debug aplikacije napisane u Javi, Node.js, Python.

Tok rada u različitim varijacijama 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 sklapanja i postavljanja. Na primjer, za razvoj navedite osnovnu sliku prikladnu za programera, a za postavljanje i proizvodnju - minimalnu (+ koristite securityContext kontejnere ili redefinirajte klaster u kojem će aplikacija biti raspoređena).

Docker kontejneri se mogu izgraditi lokalno ili daljinski: u Google Cloud Build ili u klasteru koristeći Kaniko. Bazel i Jib Maven/Gradle su također podržani. Za označavanje, Skaffold podržava mnoge strategije: pomoću git urezivanja heša, datuma/vremena, sha256-zbira izvora, itd.

Odvojeno, vrijedi napomenuti mogućnost testiranja kontejnera. Već spomenuti okvir za testiranje strukture kontejnera nudi sljedeće metode provjere:

  • Izvršavanje naredbi u kontekstu kontejnera s praćenjem izlaznih statusa i provjerom tekstualnog izlaza naredbe.
  • Provjera prisutnosti datoteka u kontejneru i podudaranje navedenih atributa.
  • Kontrola sadržaja datoteke pomoću regularnih izraza.
  • Provjera metapodataka slike (ENV, ENTRYPOINT, VOLUMES i slično).
  • Provjera kompatibilnosti licence.

Sinhronizacija datoteka sa kontejnerom se ne odvija na najoptimalniji način: Skaffold jednostavno kreira arhivu sa izvorima, kopira je i raspakuje u kontejner (tar mora biti instaliran). Stoga, ako je vaš glavni zadatak sinhronizacija koda, bolje je tražiti specijalizirano rješenje (ksync).

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

Općenito, alat vam ne dozvoljava da apstrahujete od Kubernetes manifesta i nema nikakvu interaktivnost, tako da se može činiti teškim za savladavanje. Ali to je i njegova prednost - veća sloboda djelovanja.

Vrt

  • sajt; GitHub.
  • Kratka GH statistika: 1063 zvjezdice, 1927 uplata, 17 saradnika.
  • Jezik: TypeScript (planirano je da se projekat podeli na nekoliko komponenti od kojih će neke biti u Go, a takođe se napravi SDK za kreiranje dodataka u TypeScript/JavaScript i Go).
  • Licenca: Apache License 2.0.

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

  • Prikupite kontejnere sa raznim dijelovima projekta.
  • Provodi integracijske i jedinične testove, ako su oni opisani.
  • Prebacuje sve komponente projekta u klaster.
  • Ako se izvorni kod promijeni, ponovo će pokrenuti cijeli cjevovod.

Glavni fokus korištenja ovog alata je dijeljenje udaljenog klastera sa razvojnim timom. U ovom slučaju, ako su neki od koraka izgradnje i testiranja već urađeni, to će značajno ubrzati cijeli proces, jer će Garden moći koristiti keširane rezultate.

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

Garden pruža korisniku prekrasnu kontrolnu tablu (trenutno u eksperimentalno stanje), koji prikazuje graf projekta: komponente, redoslijed sklapanja, izvršavanje zadataka i testova, njihove veze i ovisnosti. Pravo u pretraživaču možete pregledati dnevnike svih komponenti projekta i provjeriti šta određena komponenta izlazi putem HTTP-a (ako je, naravno, deklarisan ulazni resurs za nju).

Alati za programere aplikacija koje rade na Kubernetesu
Panel za baštu

Ovaj alat također ima režim vrućeg ponovnog učitavanja, koji jednostavno sinkronizira promjene skripte sa kontejnerom u klasteru, uvelike ubrzavajući proces otklanjanja grešaka u aplikaciji. Vrt ima dobar dokumentaciju i nije loše skup primjera, što vam omogućava da se brzo naviknete i počnete koristiti. Inače, nedavno smo objavili prevod članka od njenih autora.

zaključak

Naravno, ova lista alata za razvoj i otklanjanje grešaka u aplikacijama u Kubernetesu nije ograničena na. Postoji još mnogo vrlo korisnih i praktičnih uslužnih programa koji su vrijedni, ako ne zasebnog članka, onda barem spomena. Recite nam šta koristite, na koje probleme ste naišli i kako ste ih riješili!

PS

Pročitajte i na našem blogu:

izvor: www.habr.com

Dodajte komentar