Rīki lietojumprogrammu izstrādātājiem, kas darbojas Kubernetes

Rīki lietojumprogrammu izstrādātājiem, kas darbojas Kubernetes

MÅ«sdienÄ«ga pieeja darbÄ«bai atrisina daudzas aktuālas biznesa problēmas. Konteineri un orÄ·estranti atvieglo jebkuras sarežģītÄ«bas projektu mērogoÅ”anu, vienkārÅ”o jaunu versiju izlaiÅ”anu, padara tās uzticamākas, taču tajā paŔā laikā tie rada papildu problēmas izstrādātājiem. Programmētājam, pirmkārt, rÅ«p viņa kods: arhitektÅ«ra, kvalitāte, veiktspēja, elegance - nevis tas, kā tas darbosies Kubernetes un kā to pārbaudÄ«t un atkļūdot pēc pat minimālu izmaiņu veikÅ”anas. LÄ«dz ar to arÄ« gluži likumsakarÄ«gi, ka aktÄ«vi tiek izstrādāti rÄ«ki priekÅ” Kubernetes, kas palÄ«dz atrisināt pat ā€œarhaiskākoā€ izstrādātāju problēmas un ļauj koncentrēties uz galveno.

Å ajā pārskatā ir sniegta Ä«sa informācija par dažiem rÄ«kiem, kas atvieglo programmētāja dzÄ«vi, kura kods darbojas Kubernetes klastera podā€™ax.

VienkārŔi palīgi

Kubectl-debug

  • ApakŔējā lÄ«nija: pievienojiet konteineru Pod un skatiet, kas tajā notiek.
  • GitHub.
  • ÄŖsa GH statistika: 715 zvaigznes, 54 apņemÅ”anās, 9 atbalstÄ«tāji.
  • Valoda: aiziet.
  • Licence: Apache License 2.0.

Å is kubectl spraudnis ļauj izveidot papildu konteineru interesējoŔās paketes iekÅ”pusē, kas kopÄ«gos procesa nosaukumvietu ar citiem konteineriem. Tajā varat atkļūdot podziņa darbÄ«bu: pārbaudÄ«t tÄ«klu, klausÄ«ties tÄ«kla trafiku, veikt interesējoÅ”o procesu utt.

Varat arÄ« pārslēgties uz procesa konteineru, palaižot chroot /proc/PID/root - tas var bÅ«t ļoti ērti, ja nepiecieÅ”ams iegÅ«t saknes apvalku konteinerā, kuram tas ir iestatÄ«ts manifestā securityContext.runAs.

Å is rÄ«ks ir vienkārÅ”s un efektÄ«vs, tāpēc tas var bÅ«t noderÄ«gs ikvienam izstrādātājam. Mēs par to vairāk rakstÄ«jām atseviŔķs raksts.

Tele klātbūtne

  • ApakŔējā lÄ«nija: pārsÅ«tiet lietojumprogrammu uz datoru. Izstrādājiet un atkļūdojiet lokāli.
  • Vietā; GitHub.
  • ÄŖsa GH statistika: 2131 zvaigzne, 2712 apņemÅ”anās, 33 atbalstÄ«tāji.
  • Valoda: Python.
  • Licence: Apache License 2.0.

Å Ä«s pievienojumprogrammas ideja ir palaist konteineru ar lietojumprogrammu vietējā lietotāja datorā un starpniekserveri visu trafiku no kopas uz to un atpakaļ. Å Ä« pieeja ļauj izstrādāt lokāli, vienkārÅ”i rediģējot failus savā iecienÄ«tākajā IDE: rezultāti bÅ«s pieejami nekavējoties.

Lokālās darbÄ«bas priekÅ”rocÄ«bas ir ērta rediģēŔana un tÅ«lÄ«tēji rezultāti, iespēja atkļūdot lietojumprogrammu parastajā veidā. NegatÄ«vie ir tas, ka tas ir prasÄ«gs savienojuma ātrumam, kas ir Ä«paÅ”i pamanāms, ja jums ir jāstrādā ar lietojumprogrammu ar diezgan augstu RPS un trafiku. Turklāt Telepresence ir problēmas ar skaļuma stiprinājumiem operētājsistēmā Windows, kas var bÅ«t izŔķiroÅ”s ierobežojums izstrādātājiem, kas pieraduÅ”i pie Ŕīs OS.

Mēs jau esam dalÄ«juÅ”ies pieredzē par Telepresence lietoÅ”anu Å”eit.

Ksync

  • ApakŔējā lÄ«nija: gandrÄ«z tÅ«lÄ«tēja koda sinhronizācija ar konteineru klasterÄ«.
  • GitHub.
  • ÄŖsa GH statistika: 555 zvaigznes, 362 apņemÅ”anās, 11 atbalstÄ«tāji.
  • Valoda: aiziet.
  • Licence: Apache License 2.0.

LietderÄ«ba ļauj sinhronizēt lokālā direktorija saturu ar klasterÄ« palaist konteinera direktoriju. Šāds rÄ«ks ir lieliski piemērots izstrādātājiem skriptu programmÄ“Å”anas valodās, kuru galvenā problēma ir koda piegāde darbināmā konteinerā. Ksync ir paredzēts, lai atvieglotu Ŕīs galvassāpes.

Kad komanda inicializē vienu reizi ksync init klasterÄ« tiek izveidots DaemonSet, ko izmanto, lai uzraudzÄ«tu atlasÄ«tā konteinera failu sistēmas stāvokli. Savā lokālajā datorā izstrādātājs palaiž komandu ksync watch, kas uzrauga konfigurācijas un darbojas syncthing, kas tieÅ”i sinhronizē failus ar kopu.

Atliek tikai norādÄ«t ksync, ko ar ko sinhronizēt. Piemēram, Ŕī komanda:

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

...izveidos novērotāju ar nosaukumu myprojectkas meklēs podiņu ar etiķeti app=backend un mēģiniet sinhronizēt vietējo direktoriju /home/user/myproject/ ar katalogu /var/www/myproject/ pie konteinera sauc php.

Problēmas un piezīmes par ksync no mūsu pieredzes:

  • Jāizmanto Kubernetes klastera mezglos overlay2 kā Docker krātuves draiveris. LietderÄ«ba nedarbosies ar citiem.
  • Izmantojot Windows kā klienta operētājsistēmu, failu sistēmas vērotājs var nedarboties pareizi. Å Ä« kļūda tika pamanÄ«ta, strādājot ar lieliem direktorijiem - ar lielu skaitu ligzdotu failu un direktoriju. Mēs radÄ«jām attiecÄ«gs jautājums sinhronizācijas projektā, bet vēl nav virzÄ«bas uz to (kopÅ” jÅ«lija sākuma).
  • Izmantojiet failu .stignore lai norādÄ«tu ceļus vai failu modeļus, kas nav jāsinhronizē (piemēram, direktorijus app/cache Šø .git).
  • Pēc noklusējuma ksync restartēs konteineru ikreiz, kad tiks mainÄ«ti faili. Node.js tas ir ērti, bet PHP tas ir pilnÄ«gi lieki. Labāk ir izslēgt opcache un izmantot karogu --reload=false.
  • Konfigurāciju vienmēr var labot $HOME/.ksync/ksync.yaml.

skvoŔs

  • ApakŔējā lÄ«nija: atkļūdoÅ”anas procesus tieÅ”i klasterÄ«.
  • GitHub.
  • ÄŖsa GH statistika: 1154 zvaigznes, 279 apņemÅ”anās, 23 atbalstÄ«tāji.
  • Valoda: aiziet.
  • Licence: Apache License 2.0.

Å is rÄ«ks ir paredzēts procesu atkļūdoÅ”anai tieÅ”i podiņos. LietderÄ«ba ir vienkārÅ”a un interaktÄ«vi ļauj izvēlēties vajadzÄ«go atkļūdotāju (SkatÄ«t zemāk) un namespace + pod, kura procesā jums ir jāiejaucas. PaÅ”laik tiek atbalstÄ«ts:

  • delve - Go lietojumprogrammām;
  • GDB - izmantojot mērÄ·a attālo + porta pāradresāciju;
  • JDWP portu pāradresācija Java lietojumprogrammu atkļūdoÅ”anai.

IDE pusē atbalsts ir pieejams tikai VScode (izmantojot paplaÅ”ināŔana, tomēr paÅ”reizējā (2019) gada plānos ietilpst Eclipse un Intellij.

Lai atkļūdotu procesus, Squash klastera mezglos vada priviliģētu konteineru, tāpēc vispirms ir jāiepazÄ«stas ar iespējām. droÅ”ais režīms lai izvairÄ«tos no droŔības problēmām.

Integrēti risinājumi

Pāriesim pie smagās artilērijas - vairāk ā€œliela mērogaā€ projektu, kas paredzēti, lai nekavējoties apmierinātu daudzas izstrādātāju vajadzÄ«bas.

NB: Å ajā sarakstā, protams, ir vieta mÅ«su atvērtā koda utilÄ«tai werf (agrāk pazÄ«stams kā dapp). Tomēr mēs par to jau esam rakstÄ«juÅ”i un runājuÅ”i vairāk nekā vienu reizi, un tāpēc nolēmām to neiekļaut pārskatā. Tiem, kas vēlas tuvāk iepazÄ«ties ar tā iespējām, iesakām izlasÄ«t/noklausÄ«ties ziņojumu ā€œwerf ir mÅ«su CI/CD rÄ«ks pakalpojumā Kubernetes'.

DevSpace

  • ApakŔējā lÄ«nija: tiem, kas vēlas sākt strādāt Kubernetes, bet nevēlas iedziļināties tās džungļos.
  • GitHub.
  • ÄŖsa GH statistika: 630 zvaigznes, 1912 apņemÅ”anās, 13 atbalstÄ«tāji.
  • Valoda: aiziet.
  • Licence: Apache License 2.0.

Risinājums no tāda paÅ”a nosaukuma uzņēmuma, kas nodroÅ”ina pārvaldÄ«tos klasterus ar Kubernetes komandas attÄ«stÄ«bai. LietderÄ«ba tika izveidota komerciālām kopām, taču tā lieliski darbojas ar citām kopām.

Palaižot komandu devspace init projektu katalogā Jums tiks piedāvāts (interaktīvi):

  • atlasiet strādājoÅ”u Kubernetes klasteru,
  • izmantot esoÅ”o Dockerfile (vai Ä£enerējiet jaunu), lai izveidotu konteineru, pamatojoties uz to,
  • atlasiet repozitoriju konteinera attēlu glabāŔanai utt.

Pēc visām Ŕīm sagatavoÅ”anas darbÄ«bām varat sākt izstrādi, palaižot komandu devspace dev. Tas izveidos konteineru, augÅ”upielādēs to repozitorijā, izvērs izvietoÅ”anu klasterÄ« un sāks porta pārsÅ«tÄ«Å”anu un konteinera sinhronizāciju ar vietējo direktoriju.

Pēc izvēles jums tiks piedāvāts pārvietot termināli uz konteineru. Jums nevajadzētu atteikties, jo patiesībā konteiners sākas ar miega komandu, un reālai pārbaudei lietojumprogramma ir jāpalaiž manuāli.

Visbeidzot, komanda devspace deploy izlaiž lietojumprogrammu un saistīto infrastruktūru klasterī, pēc tam viss sāk darboties kaujas režīmā.

Visa projekta konfigurācija tiek saglabāta failā devspace.yaml. Papildus izstrādes vides iestatÄ«jumiem tajā var atrast arÄ« infrastruktÅ«ras aprakstu, kas ir lÄ«dzÄ«gs standarta Kubernetes manifestiem, tikai ievērojami vienkārÅ”ots.

Rīki lietojumprogrammu izstrādātājiem, kas darbojas Kubernetes
Arhitektūra un galvenie darba ar DevSpace posmi

Turklāt projektam ir viegli pievienot iepriekÅ” definētu komponentu (piemēram, MySQL DBVS) vai Helm diagrammu. Vairāk lasiet sadaļā dokumentācija - tas nav sarežģīti.

Skaffold

  • Vietā; GitHub.
  • ÄŖsa GH statistika: 7423 zvaigznes, 4173 apņemÅ”anās, 136 atbalstÄ«tāji.
  • Valoda: aiziet.
  • Licence: Apache License 2.0.

Å Ä« Google utilÄ«ta apgalvo, ka tā sedz visas izstrādātāja vajadzÄ«bas, kura kods kaut kādā veidā darbosies Kubernetes klasterÄ«. Sākt to lietot nav tik vienkārÅ”i kā devspace: nav interaktivitātes, valodas noteikÅ”anas un automātiskās izveides Dockerfile viņi tev to Å”eit nepiedāvās.

Tomēr, ja tas jūs nebiedē, Skaffold ļauj veikt tālāk norādītās darbības.

  • Izsekojiet avota koda izmaiņas.
  • Sinhronizējiet to ar pod konteineru, ja tas nav jāmontē.
  • Savāc konteinerus ar kodu, ja valoda tiek interpretēta, vai apkopojiet artefaktus un iesaiņojiet tos konteineros.
  • IegÅ«tie attēli tiek automātiski pārbaudÄ«ti, izmantojot konteinera struktÅ«ras pārbaude.
  • Attēlu atzÄ«mÄ“Å”ana un augÅ”upielāde Docker reÄ£istrā.
  • Izvietojiet lietojumprogrammu klasterÄ«, izmantojot kubectl, Helm vai kustomize.
  • Veiciet portu pāradresāciju.
  • AtkļūdoÅ”anas programmas, kas rakstÄ«tas Java, Node.js, Python.

DarbplÅ«sma dažādās variācijās ir deklaratÄ«vi aprakstÄ«ta failā skaffold.yaml. Projektam varat arÄ« definēt vairākus profilus, kuros var daļēji vai pilnÄ«bā mainÄ«t montāžas un izvietoÅ”anas posmus. Piemēram, izstrādei norādiet izstrādātājam ērtu bāzes attēlu, bet iestudÄ“Å”anai un ražoÅ”anai - minimālu (+ izmantoÅ”ana securityContext konteinerus vai atkārtoti definējiet kopu, kurā lietojumprogramma tiks izvietota).

Docker konteinerus var uzbÅ«vēt lokāli vai attālināti: iekŔā Google Cloud Build vai klasterÄ«, izmantojot Kaniko. Tiek atbalstÄ«ti arÄ« Bazel un Jib Maven/Gradle. AtzÄ«mÄ“Å”anai Skaffold atbalsta daudzas stratēģijas: izmantojot git commit hash, datumu/laiku, sha256 avotu summu utt.

AtseviŔķi ir vērts atzÄ«mēt iespēju pārbaudÄ«t konteinerus. Jau pieminētā konteinera struktÅ«ras pārbaudes sistēma piedāvā Ŕādas pārbaudes metodes:

  • Komandu izpilde konteinera kontekstā ar izejas statusu izsekoÅ”anu un komandas teksta izvades pārbaudi.
  • Failu klātbÅ«tnes pārbaude konteinerā un norādÄ«to atribÅ«tu atbilstÄ«ba.
  • Faila satura kontrole, izmantojot regulārās izteiksmes.
  • Attēla metadatu pārbaude (ENV, ENTRYPOINT, VOLUMES uc).
  • Licences saderÄ«bas pārbaude.

Failu sinhronizācija ar konteineru netiek veikta optimālākajā veidā: Skaffold vienkārÅ”i izveido arhÄ«vu ar avotiem, nokopē to un izsaiņo konteinerā (jāinstalē darva). Tāpēc, ja jÅ«su galvenais uzdevums ir koda sinhronizācija, labāk ir meklēt specializētu risinājumu (ksync).

Rīki lietojumprogrammu izstrādātājiem, kas darbojas Kubernetes
Skaffold darbības galvenie posmi

Kopumā rÄ«ks neļauj abstrahēties no Kubernetes manifestiem un tam nav nekādas interaktivitātes, tāpēc var Ŕķist, ka to ir grÅ«ti apgÅ«t. Bet tā ir arÄ« tā priekÅ”rocÄ«ba ā€“ lielāka rÄ«cÄ«bas brÄ«vÄ«ba.

Dārzs

  • Vietā; GitHub.
  • ÄŖsa GH statistika: 1063 zvaigznes, 1927 apņemÅ”anās, 17 atbalstÄ«tāji.
  • Valoda: TypeScript (projektu plānots sadalÄ«t vairākos komponentos, no kuriem daži bÅ«s Go, kā arÄ« izveidot SDK papildinājumu izveidei TypeScript/JavaScript un Go).
  • Licence: Apache License 2.0.

Tāpat kā Skaffold, arī Garden mērķis ir automatizēt lietojumprogrammas koda piegādes procesus K8s klasterim. Lai to izdarītu, vispirms YAML failā jāapraksta projekta struktūra un pēc tam palaidiet komandu garden dev. Viņa darīs visu maģiju:

  • Savāc konteinerus ar dažādām projekta daļām.
  • Veic integrācijas un vienÄ«bu testus, ja tādi ir aprakstÄ«ti.
  • Visus projekta komponentus izlaiž klasterÄ«.
  • Ja avota kods mainās, tas restartēs visu konveijeru.

Galvenais Ŕī rÄ«ka izmantoÅ”anas mērÄ·is ir koplietot attālo klasteru ar izstrādes komandu. Å ajā gadÄ«jumā, ja daži bÅ«vniecÄ«bas un testÄ“Å”anas soļi jau ir veikti, tas ievērojami paātrinās visu procesu, jo Garden varēs izmantot keÅ”atmiņā saglabātos rezultātus.

Projekta modulis var bÅ«t konteiners, Maven konteiners, Helm diagramma, manifests kubectl apply vai pat OpenFaaS funkcija. Turklāt jebkuru no moduļiem var izvilkt no attālās Git krātuves. Modulis var vai nevar definēt pakalpojumus, uzdevumus un testus. Pakalpojumiem un uzdevumiem var bÅ«t atkarÄ«bas, lai jÅ«s varētu noteikt konkrēta pakalpojuma izvietoÅ”anas secÄ«bu un organizēt uzdevumu un testu palaiÅ”anu.

Garden nodroÅ”ina lietotājam skaistu informācijas paneli (Å”obrÄ«d atrodas eksperimentālais stāvoklis), kurā attēlots projekta grafiks: komponenti, montāžas secÄ«ba, uzdevumu un testu izpilde, to savienojumi un atkarÄ«bas. TieÅ”i pārlÅ«kprogrammā varat apskatÄ«t visu projekta komponentu žurnālus un pārbaudÄ«t, ko konkrētais komponents izvada, izmantojot HTTP (ja, protams, tam ir deklarēts ieejas resurss).

Rīki lietojumprogrammu izstrādātājiem, kas darbojas Kubernetes
Panelis dārzam

Å im rÄ«kam ir arÄ« karstās pārlādÄ“Å”anas režīms, kas vienkārÅ”i sinhronizē skripta izmaiņas ar konteineru klasterÄ«, ievērojami paātrinot lietojumprogrammu atkļūdoÅ”anas procesu. Dārzam ir labs dokumentāciju un nav slikti piemēru kopums, ļaujot ātri pierast un sākt lietot. Starp citu, pavisam nesen publicējām raksta tulkojums no tā autoriem.

Secinājums

Protams, Å”is rÄ«ku saraksts lietojumprogrammu izstrādei un atkļūdoÅ”anai programmā Kubernetes neaprobežojas tikai ar. Ir vēl daudzas ļoti noderÄ«gas un praktiskas utilÄ«tas, kas ir ja ne atseviŔķa raksta, tad vismaz pieminÄ“Å”anas vērtas. Pastāstiet mums, ko lietojat, ar kādām problēmām saskārāties un kā tās atrisinājāt!

PS

Lasi arī mūsu emuārā:

Avots: www.habr.com

Pievieno komentāru