Arendustööriistad Kuberneteses töötavatele rakendustele

Arendustööriistad Kuberneteses töötavatele rakendustele

Kaasaegne lÀhenemine haldamisele lahendab paljusid Àri muresid. Konteinerid ja orkestratsioonitööriistad vÔimaldavad hÔlpsasti skaleerida projekte igasuguste keerukustega, lihtsustavad uute versioonide vÀljaandmist, tehes need usaldusvÀÀrsemaks, kuid samas pÔhjustavad ka tÀiendavaid probleeme arendajatele. Arendajat, eelkÔige, huvitab tema kood: arhitektuur, kvaliteet, jÔudlus, elegants, mitte see, kuidas ta jÔuab Kubernetesesse ja kuidas seda testida ja tÔrkeotsingusse minna pÀrast isegi minimaalsete muudatuste tegemist. SeetÔttu on loomulik, et aktiivselt arendatakse tööriistu Kubernetesel, mis aitavad lahendada isegi kÔige "arhailisemaid" arendajate probleeme ja vÔimaldavad neil keskenduda peamisele.

Selles ĂŒlevaates on lĂŒhike teave mĂ”ne tööriista kohta, mis lihtsustavad arendaja elu, kelle kood töötab Kubernetes klastri pod'ides.

Lihtsad abivahendid

Kubectl-debug

  • Sisu: lisage oma konteiner Pod'i ja vaadake, mis seal toimub.
  • GitHub.
  • LĂŒhike statistika GH: 715 tĂ€hte, 54 commiti, 9 kaasautorid.
  • Keel: Go.
  • Litsents: Apache License 2.0.

See plugin for kubectl, which allows creating an additional container within the desired pod that shares the process namespace with other containers. This makes it possible to debug the pod's operation: check network functionality, listen to network traffic, perform strace on the desired process, etc.

You can also switch to the process container by executing chroot /proc/PID/root — which can be very handy when you need to get a root shell in a container for which the manifest specifies securityContext.runAs.

The tool is simple and effective, making it useful for every developer. We have written more about it in eraldiseisvas artiklis.

Telepresence

  • Sisu: move the application to your computer. Develop and debug locally.
  • Veebileht; GitHub.
  • Brief GH statistics: 2131 stars, 2712 commits, 33 contributors.
  • Language: Python.
  • Litsents: Apache License 2.0.

The idea of this extension is to run a container with the application on the local user's computer while proxying all traffic from the cluster to it and back. This approach enables local development simply by modifying files in your favorite IDE: results will be available immediately.

Kohalik kĂ€ivitamise eelised — mugavus muudatuste tegemisel ja kohene tulemus, vĂ”imalus rakendust tavapĂ€raselt siluda. Puudustest — nĂ”udlikkus ĂŒhenduse kiiruselt, mis on eriti tunda, kui tuleb töötada rakendusega, millel on piisavalt kĂ”rge RPS ja liiklus. Lisaks on Telepresence'il Windowsis probleemid volume mountidega, mis vĂ”ib olla mÀÀrav piirang arendajatele, kes on sellele opsĂŒsteemile harjunud.

Oleme juba jaganud oma kogemusi Telepresence'i kasutamisel. siit.

Ksync

  • Sisu: peaaegu kohene koodi sĂŒnkroonimine konteineriga klastris.
  • GitHub.
  • LĂŒhike statistika GH: 555 tĂ€hte, 362 commit'i, 11 panustajat.
  • Keel: Go.
  • Litsents: Apache License 2.0.

Utiliit vĂ”imaldab sĂŒnkroonida kohaliku kausta sisu konteineri kataloogiga, mis on kĂ€ivitatud klastris. Selline tööriist sobib suurepĂ€raselt skripteerimiskeelte arendajatele, kelle peamine probleem on koodi töötavasse konteinerisse viimine. Ksync on loodud selle peavalu leevendamiseks.

Ühe korra initsialiseerimine kĂ€suga ksync init Klastris loob DaemonSet'i, mida kasutatakse valitud konteineri failisĂŒsteemi oleku jĂ€lgimiseks. Arendaja kĂ€ivitab oma kohalikul arvutil kĂ€su ksync watch, mis jĂ€lgib konfiguratsioone ja kĂ€ivitab syncthing, mis teostab failide vahetu sĂŒnkroonimise klastri ja kohaliku sĂŒsteemi vahel.

JÀÀb anda ksync'ile juhised, mida ja millega sĂŒnkroonida. NĂ€iteks selline kĂ€sk:

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


 loob watcher'i nimega myproject, mis otsib pod'i, millel on silt app=backend ja pĂŒĂŒab sĂŒnkroonida kohaliku katalooge /home/user/myproject/ konteineri /var/www/myproject/ nimel php.

Probleemid ja mÀrkused ksync'i kohta meie kogemusest:

  • Kubernetes'i klastri sĂ”lmedes peab olema kasutusel overlay2 Docker'i salvestusjuhiks. Ükski teine utiliit ei tööta.
  • Windows'i kasutamisel kliendi OS'ina vĂ”ib failisĂŒsteemi watcher töötada ebaĂŒhtlaselt. See viga ilmnes suurte kataloogidega töötamisel — suurte sisemiste failide ja direktorite arvuga. Oleme loonud vastava probleemi projekti syncthing, kuid edusamme pole seni (juuli algusest) olnud.
  • Kasuta faili .stignore selleks, et mÀÀrata teed vĂ”i failide mustreid, mida ei ole vaja sĂŒnkroonida (nĂ€iteks kataloogid app/cache ja .git).
  • Kuidas ksync suunab konteineri taaskĂ€ivitamise iga faili muutumise korral. Node.js jaoks on see mugav, PHP jaoks aga tĂ€iesti ĂŒleliigne. Paremini on vĂ€lja lĂŒlitada opcache ja kasutada lippu --reload=false.
  • Konfiguratsiooni saab alati muuta failis $HOME/.ksync/ksync.yaml.

KĂ€ivita

  • Sisu: debug'i protsesse otse klastris.
  • GitHub.
  • Kohatu statistika GH: 1154 tĂ€hte, 279 commit'i, 23 kaasautorit.
  • Keel: Go.
  • Litsents: Apache License 2.0.

See tööriist on mĂ”eldud protsesside debugeerimiseks otse pod'ides. Utiliit on lihtne ja interaktiivses reĆŸiimis vĂ”imaldab valida vajaliku debugeerija (vt allpool) ja nimeteenuse + pod, kuhu sekkuda. Praegu toetatakse:

  • delve — Go rakenduste jaoks;
  • GDB — kaugjuhtimise kaudu + porti edastamine;
  • JDWP poolt edastatav port Java rakenduste debugeerimiseks.

IDE poolt on toetust vaid VScode'is (kasutades laiendust), kuid sel aastal (2019) plaanitakse ka Eclipse'i ja Intellij' toetust.

Squash запусĐșаa klastrites protsesside tĂ”rkeotsinguks privileege saanud konteineri, seetĂ”ttu on oluline esmalt tutvuda turvareĆŸiimi turvaprobleemide vĂ€ltimiseks.

Komplekslahendused

Siin tuleme raskema kaliibriga - laiemate projektidega, mis katab korraga enamiku arendajate vajadustest.

NB: Sellel loetel on kindlasti ka meie avatud lĂ€htekoodiga utiliidile werf (varem tuntud kui dapp). Oleme sellest juba korduvalt kirjutanud ja rÀÀkinud, mistĂ”ttu otsustasime selle ĂŒlevaatesse mitte lisada. Kellel on soovi lĂ€hemalt tutvuda, soovitame lugeda/kuulata ettekannet "werf — meie CI/CD tööriist Kuberneteses».

DevSpace

  • Sisu: need, kes soovivad alustada Kubernetesega töötamist, kuid ei taha sĂŒvitsi minna selle keerukustesse..
  • GitHub.
  • LĂŒhiĂŒlevaade GH-st: 630 tĂ€hte, 1912 commit'i, 13 panustajat.
  • Keel: Go.
  • Litsents: Apache License 2.0.

Lahendus samanimeliselt ettevÔttelt, mis pakub lookup-klausleid Kubernetesega meeskonnatööks. Tööriist loodi kaubanduslikele klastritele, kuid töötab suurepÀraselt ka teistega.

Kui kĂ€ivitate kĂ€su devspace init projektiga kataloogis, pakutakse teile (interaktiivses reĆŸiimis):

  • valida töö Kubernetes-kluster,
  • kasutada olemasolevat Dockerfile (vĂ”i genereerida uus) konteineri loomiseks selle pĂ”hjal,
  • valida konteineripiltide hoidmiseks repositoorium jne.

PĂ€rast neid ettevalmistusi saab alustada arendust, kĂ€ivitades kĂ€su devspace dev. See kogub konteineri, laadib selle repositooriumisse, kĂ€ivitab klastrisse juurutamise ja kĂ€ivitab portide suunamise ning konteineri sĂŒnkroonimise kohaliku kataloogiga.

Valikuliselt pakutakse terminaliga konteinerisse sisenemist. Sellel ei tasu keelduda, sest tegelikult kÀivitub konteiner komandeeringu sleep'iga ja rakendust tuleb reaalseks testimiseks kÀsitsi kÀivitada.

LĂ”puks kĂ€ivitab kĂ€sk devspace deploy rakenduse ja sellega seotud infrastruktuuri klastrisse, pĂ€rast mida kĂ”ik hakkab töötama reaalses reĆŸiimis.

Kogu projekti konfiguratsioon on salvestatud failis devspace.yaml. Lisaks arenduskeskkonna seadistustele leidub seal ka infrastruktuuri kirjeldus, mis sarnaneb standardsete Kubernetes manifestidega, kuid on oluliselt lihtsustatud.

Arendustööriistad Kuberneteses töötavatele rakendustele
Architektuur ja peamised etapid DevSpace'iga töötamiseks

Lisaks sellele saab projekti hĂ”lpsasti lisada ette mÀÀratud komponente (nĂ€iteks MySQL andmebaasi) vĂ”i Helm-kaarte. Lisainfot leiate dokumentatsioonis — see ei ole keeruline.

Skaffold

  • Veebileht; GitHub.
  • LĂŒhistatistika GH: 7423 tĂ€hte, 4173 commit'i, 136 kaasautorit.
  • Keel: Go.
  • Litsents: Apache License 2.0.

See Google'i tööriist pĂŒĂŒab katta kĂ”iki arendaja vajadusi, kelle kood hakkab mingil moel kĂ€ivituma Kubernetes'i klastris. Sellega alustamine ei ole nii lihtne kui devspace'iga: mingit interaktiivsust, keele mÀÀratlemist ja automaatset loomist Dockerfile siin ei pakuta.

Kuid kui see teid ei heiduta — siin on, mida Skaffold vĂ”imaldab:

  • JĂ€lgida lĂ€htekoodi muutusi.
  • SĂŒnkroniseerida see pod'i konteineriga, kui see ei vaja kokkupanekut.
  • Koguda konteinerid koodiga, kui programmeerimiskeel on tĂ”lgendatav, vĂ”i kompileerida artefakte ja pakkida need konteineritesse.
  • Saadud pilte kontrollida automaatselt container-structure-test.
  • TĂ€gida ja laadida pilte Docker Registry'sse.
  • Rakendust klastris ĂŒles seada, kasutades kubectl, Helm'i vĂ”i kustomize'i.
  • Sadamate suunamine.
  • Java, Node.js ja Pythonis kirjutatud rakenduste tĂ”rkeotsing.

Töövoolu erinevaid variatsioone kirjeldatakse deklareeritavalt failis skaffold.yaml. Projektile on vĂ”imalik mÀÀrata ka mitu profiili, kus osaliselt vĂ”i tĂ€ielikult muuta ehituse ja juurutamise etappe. NĂ€iteks arenduse jaoks saab mÀÀrata arendajale mugava baaspildi ja stagingu ning tootmise jaoks - minimaalne (+ kasutada securityContext konteinerites vĂ”i ĂŒmber mÀÀrata kluster, kuhu rakendus juurutatakse).

Docker-konteinerite koostamine vÔib toimuda kohapeal vÔi kaugjuhtimise teel: Google Cloud Build vÔi klastris, kasutades Kaniko. Samuti toetatakse Bazeli ja Jib Maven/Gradle. Skaffold toetab sildistamist paljude strateegiate kaudu: git commit hash, kuupÀev/aeg, sha256-hash lÀhtekoodide jne.

Eraldi tasub mainida konteinerite testimise vÔimalust. juba mainitud raamistik container-structure-test pakub jÀrgmisi kontrollimeetodeid:

  • KĂ€skude tĂ€itmine konteineri kontekstis, jĂ€lgides vĂ€ljumisstaatusi ja kontrollides kĂ€su teksti "vĂ€ljundit".
  • Failide olemasolu kontrollimine konteineris ja atribuutide vastavuse kontrollimine nimetatule.
  • Failide sisu kontrollimine regulaarsete vĂ€ljenditega.
  • Pildi metaandmete kontrollimine (ENV, ENTRYPOINT, VOLUMES jne).
  • Litsentside ĂŒhisuse kontrollimine.

Failide sĂŒnkroniseerimine konteineriga ei toimu kĂ”ige optimaalsemalt: Skaffold loob lihtsalt arhiivi lĂ€htekoodidega, kopeerib selle ja lahtipakkimiseks konteineris (peab olema installitud tar). SeetĂ”ttu, kui teie peamine eesmĂ€rk on koodi sĂŒnkroniseerimine, on parem vaadata spetsialiseeritud lahenduste poole (ksync).

Arendustööriistad Kuberneteses töötavatele rakendustele
Skaffoldi töö peamised etapid

KokkuvĂ”ttes ei vĂ”imalda see tööriist abstraheerida Kubernetes'i manifeste ning tal puudub mingisugune interaktiivsus, mistĂ”ttu vĂ”ib selle omandamine tunduda keeruline. Aga just see on ka selle eelis — suurem tegutsemisvabadus.

Garden

  • Veebileht; GitHub.
  • LĂŒhike statistika GH: 1063 tĂ€hte, 1927 commit'i, 17 kaasautorid.
  • Keeleks: TypeScript (plaanitakse jagada projekt mitmeks komponendiks, millest mĂ”ned on Go keeles, samuti luua SDK laiendite tegemiseks TypeScriptis/JavaScriptis ja Go-s).
  • Litsents: Apache License 2.0.

Nagu Skaffold, on ka Garden suunatud kodeerimise tarnimise automatiseerimisele K8s-klastrisse. Selleks tuleb esmalt kirjeldada projekti struktuur YAML-failis, seejÀrel kÀivitada kÀsk garden dev. See teeb kogu vÔlu:

  • Kogub konteinerid projekti erinevatest osadest.
  • Vi viib lĂ€bi integreerimise ja unit-testid, kui need on kirjeldatud.
  • TaustatĂ”ukab kĂ”ik projekti komponendid klastrisse.
  • Kui allika kood muutub, kĂ€ivitab ta kogu töövoo uuesti.

Selle tööriista kasutamisel keskendutakse peamiselt arendajate meeskonna kaugetevahelisele koostööle. Sellisel juhul, kui mÔned ehituse ja testimise etapid on juba tehtud, kiirendab see kogu protsessi oluliselt, kuna Garden suudab kasutada vahemÀlus olevaid tulemusi.

Projekti mooduliks vĂ”ib olla konteiner, Maven-konteiner, Helm-graafik, manifester kubectl apply vĂ”i isegi OpenFaaS-funktsioon. Iga moodulit saab tĂ”mmata kaug-Git-repositooriumist. Moodul vĂ”ib mÀÀratleda (vĂ”i mitte) teenuseid, ĂŒlesandeid ja teste. Teenustel ja ĂŒlesannetel vĂ”ivad olla sĂ”ltuvused, mis aitavad mÀÀrata kĂ”nealuste teenuste juurutamise jĂ€rjekorda, korraldada ĂŒlesannete ja testide kĂ€ivitamist.

Garden pakub kasutajale ilusat juhtpaneeli (praegu eksperimentaalses olekus), milles on projekti visuaal: komponendid, nende kokkupaneku jĂ€rjekord, ĂŒlesannete ja testide tĂ€itmine ning nende omavahelised seosed ja sĂ”ltuvused. Otse brauseris saab vaadata ka kĂ”iki projekti komponente ja kontrollida, mida iga komponent HTTP kaudu edastab (kui muidugi on mÀÀratletud ingressi ressurss).

Arendustööriistad Kuberneteses töötavatele rakendustele
Garden'i paneel

Sellel tööriistal on ka hot-reload reĆŸiim, mis lihtsalt sĂŒnkroniseerib skriptide muudatused konteineriga klastris, kiirendades oluliselt rakenduse silumist. Garden'il on hea dokumentatsioon ja korralik nĂ€idiste kogum, mis vĂ”imaldab kiiresti tutvuda ja alustada kasutamist. Muide, hiljuti avaldasime artikli tĂ”lke selle autoritelt.

KokkuvÔte

Muidugi ei piirdu Kubernetes'i rakenduste arendamiseks ja silumiseks mÔeldud tööriistade loetelu ainult sellega. On veel palju kasulikke ja praktilisi utiliite, mis vÀÀrivad vÀhemalt mÀrkimist, kui mitte eraldi artiklit. RÀÀkige, milliseid tööriistu teie kasutate, milliste probleemidega olete kokku puutunud ja kuidas olete neid lahendanud!

P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster