
Kaasaegne lĂ€henemine haldamisele lahendab palju ettevĂ”tete hĂ€davajalikke probleeme. Konteinerid ja orkestratsioonitööriistad vĂ”imaldavad hĂ”lpsasti skaleerida projekti ĂŒkskĂ”ik millise keerukuse tasemele, lihtsustades uute versioonide vĂ€ljalaskmist, muutes need usaldusvÀÀrsemaks, kuid samas loovad lisaprobleeme arendajatele. Arendajat huvitab eelkĂ”ige tema kood: arhitektuur, kvaliteet, jĂ”udlus, elegants â mitte see, kuidas see Kuberneteses töötama panna ja kuidas seda testida ja siluda isegi kĂ”ige vĂ€iksemate muudatuste korral. SeetĂ”ttu on tĂ€iesti loogiline, et aktiivselt arendatakse tööriistu Kuberneteses, mis aitavad lahendada isegi kĂ”ige âarhiilisemateâ arendajate probleeme ja vĂ”imaldavad neil keskenduda peamisele.
Selles ĂŒlevaates on lĂŒhike teave mĂ”nede tööriistade kohta, mis lihtsustavad arendaja elu, kelle kood töötab Kubernetes klastris pod'ides.
Lihtsad abimehed
Kubectl-debug
- PÔhimÔte: lisage oma konteiner pod'i ja vaadake, mis seal toimub.
- .
- LĂŒhike statistika GH: 715 tĂ€hte, 54 commit'i, 9 kaasautor.
- Keeled: Go.
- Litsents: Apache License 2.0.
See kubectl pistikprogramm vÔimaldab luua huvitatud pod'i sisse tÀiendava konteineri, mis jagab protsesside nimespitsi teiste konteineritega. Selle sees saab pod'i tööprotsessi siluda: kontrollida vÔrgu toimimist, jÀlgida vÔrgu liiklust, teha strace huvitavale protsessile jt.
Samuti saab siseneda protsessikonteinerisse, tĂ€ites chroot /proc/PID/root â see on vĂ€ga mugav, kui on vaja saada root shell konteinerisse, mille mĂ€lestises on seatud securityContext.runAs.
Tööriist on lihtne ja tÔhus, nii et see vÔib olla kasulik igale arendajale. Rohkem teavet selle kohta oleme kirjutanud .
Telepresence
- PÔhimÔte: pane rakendus oma arvutisse. Arenda ja silu kohapeal.
- ; .
- LĂŒhike statistika GH: 2131 tĂ€hte, 2712 commit'i, 33 kaasautor.
- Keeled: Python.
- Litsents: Apache License 2.0.
Selle tööriista idee seisneb rakenduse konteineri kĂ€ivitamises kohaliku kasutaja arvutis ning kogu liikluse proxĂŒesimises klastri ja tagasi. See lĂ€henemine vĂ”imaldab arendada kohapeal, muutes lihtsalt faile oma lemmik-IDE's: tulemused on kohe kergesti saadaval.
Kohalikul kĂ€ivitamisel on plussideks mugav redigeerimine ja kohene tulemus, samuti vĂ”imalus rakendust harjumuspĂ€rasel viisil siluda. Miinusteks on nĂ”udlikkus ĂŒhenduse kiirusest, mis on eriti mĂ€rgatav siis, kui tuleb töötada rakendusega, millel on piisavalt kĂ”rge RPS ja liiklus. Lisaks on Telepresence'il Windowsis probleeme mahumĂ€gedega, mis vĂ”ib osutuda piiravaks teguriks arendajatele, kes on harjunud selle opsĂŒsteemiga.
Oleme juba jaganud oma kogemusi Telepresence'i kasutamisest. .
Ksync
- PĂ”himĂ”te: peaaegu kohene koodi sĂŒnkroonimine konteineriga klastris..
- .
- LĂŒhistatistika GH: 555 tĂ€hte, 362 commit'i, 11 kaasautorist.
- Keeled: Go.
- Litsents: Apache License 2.0.
Tööriist vĂ”imaldab sĂŒnkroonida kohaliku katalooge sisu klastri konteineris. Selline tööriist sobib suurepĂ€raselt skriptikeeltes arendajatele, kelle peamine probleem on koodi jĂ”udmine töötavasse konteinerisse. Ksync on loodud selle peavalu leevendamiseks.
Ăhe korra initsialiseerimise kĂ€sklusega ksync init loob klastri DaemonSet'i, mida kasutatakse valitud konteineri failisĂŒsteemi oleku jĂ€lgimiseks. Oma lokaalses arvutis kĂ€ivitab arendaja kĂ€su ksync watch, mis jĂ€lgib konfiguratsioonide olekut ja kĂ€ivitab , mis teostab otsese sĂŒnkroonimise failidega klastris.
JÀÀb instructida ksync, 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/ katalooge /var/www/myproject/ konteineri nimega php.
Probleemid ja mÀrkused ksync'i kohta meie kogemustest:
- Kubernetes klastrite sÔlmedes peab olema kasutusel
overlay2Docker'i salvestustehnoloogiana. Ăhegi teise utiliidiga see ei toimi. - Windows'il kliendi opsĂŒsteemina kasutamisel vĂ”ib failisĂŒsteemi watcher töötada valesti. See viga on tuvastatud suurte kataloogide kasutamisel â suurte sisetĂŒkkide ja kaustade arvu korral. Oleme loonud projekti syncthing'is, kuid edusamme pole veel (juuli algusest) toimunud.
- Kasutage faili et, et mÀÀrata teed vĂ”i failimallid, mida ei pea sĂŒnkroonima (nĂ€iteks kataloogid
app/cacheja12 factor app). - Vaikimisi taaskĂ€ivitab ksync konteineri iga kord, kui failides toimub muudatus. Node.js puhul on see mugav, aga PHP puhul tĂ€iesti tarbetu. Parim on vĂ€lja lĂŒlitada opcache ja kasutada lippu
--reload=false. - Konfiguratsiooni saab alati muuta failis
$HOME/.ksync/ksync.yaml.
Squash
- PÔhimÔte: debugeeri protsessid otse klastris.
- .
- LĂŒhikokkuvĂ”te GH: 1154 tĂ€hte, 279 commit'i, 23 kaasautoritatud.
- Keeled: Go.
- Litsents: Apache License 2.0.
See tööriist on mĂ”eldud protsesside debugeerimiseks otse pod'ides. Tööriist on lihtne ja interaktiivses reĆŸiimis vĂ”imaldab valida vajaliku debugeerija (vt allpool) ja namespace + pod, kuhu tuleb sekkuda. Praegu toetatakse:
- delve â Go rakenduste jaoks;
- GDB â lĂ€bi remote target + pordi edastamise;
- pordi edastamine JDWP Java rakenduste debugeerimiseks.
IDE poolt on tugi olemas vaid VScode'is (kasutades ), kuid kÀesoleva (2019) aasta plaanides on Eclipse ja Intellij.
Protsesside debugeerimiseks kĂ€ivitab Squash klastrinodele privileege sisaldava konteineri, seega on enne vĂ”imalikest rikkumistest teadlikuks saamine vajalik turvakĂŒsimuste vĂ€ltimiseks.
Komplekslahendused
Liigume raskema relvastuse juurde â suurematele projektidele, mis on loodud arendajate mitmete vajaduste rahuldamiseks.
NB: Selles nimekirjas on kindlasti koht ka meie Open Source tööriistale (varem tuntud kui dapp). Siiski oleme sellest juba korduvalt kirjutanud ja rÀÀkinud, seega otsustasime selle ĂŒlevaatesse mitte lisada. Soovijatele tutvuda selle vĂ”imalustega soovitame lugeda/kuulata ettekannet â».
DevSpace
- PĂ”himĂ”te: neile, kes soovivad alustada Kubernetesega töötamist, kuid ei taha sĂŒgavale selle keerukustes siseneda.
- .
- LĂŒhikokkuvĂ”te GH: 630 tĂ€hte, 1912 commit'i, 13 kaasautoritatud.
- Keeled: Go.
- Litsents: Apache License 2.0.
Lahendus sama nimel peab meeles pidama, pakkudes manageeritud Kubernetes klastreid meeskondade arendamiseks. Tööriist loodi kommertsklastrite jaoks, kuid töötab suurepÀraselt ka teistega.
KĂ€ivitades kĂ€su devspace init projekti kataloogis pakuvad teile (interaktiivses reĆŸiimis):
- valida töö Kubernetes klaster,
- kasutada olemasolevat
Dockerfile(vÔi genereerida uus) konteineri loomiseks selle alusel, - valida konteineripiltide hoidmiseks repository jne.
KĂ”ikide nende ettevalmistuste jĂ€rel saab alustada arendust, tippides kĂ€su devspace dev. See kogub konteineri, laadib selle registrisse, vĂ€ljastab klastrisse deploymente ning kĂ€ivitab portide suunamise ja konteineri sĂŒnkroniseerimise kohaliku kaustaga.
Valikuliselt pakutakse terminalis liikumist konteinerisse. Seda ei tasu keelduda, kuna tegelikult kÀivitub konteiner kÀsuga sleep ning reaalseks testimiseks on vaja rakendust kÀivitada kÀsitsi.
LĂ”puks kĂ€ivitab kĂ€sk devspace deploy rakenduse ja sellega seotud infrastruktuuri klastris, pĂ€rast mida hakkab kĂ”ik tööle tootmisreĆŸiimis.
Kogu projekti konfigureerimine salvestatakse faili devspace.yaml. Peale arenduskohtade seadistamise leiate seal ka infrastruktuuri kirjelduse, mis sarnaneb tavalistele Kubernetes'i manifestidele, vaid oluliselt lihtsustatud.

DevSpace'i arhitektuur ja peamised tööetapid
Lisaks on projekti lihtne lisada eelmÀÀratud komponent (nĂ€iteks andmebaas MySQL) vĂ”i Helm-chart. Lisainfot lugege â see ei ole keeruline.
Skaffold
- ; .
- Kohene statistika GH: 7423 tÀrni, 4173 commit'i, 136 panustajat.
- Keeled: Go.
- Litsents: Apache License 2.0.
See Google'i tööriist pretendeerib katma kÔiki arendaja vajadusi, kelle kood kÀivitub kuidagi Kubernetes'i klastris. Selle kasutamine ei ole nii lihtne kui devspace'i puhul: mingit interaktiivsust, keele mÀÀratlemist ja automaatset loomist Dockerfile siin teile ei pakuta.
Kuid kui see ei hirmuta â siin on, mida Skaffold teha lubab:
- JÀlgida lÀhtekoodi muudatusi.
- SĂŒnkroniseerida seda pod'i konteineriga, kui see ei vaja ehitamist.
- Koguda konteinerid koodiga, kui programmeerimiskeel on tÔlgitav, vÔi kompileerida artefakte ja pakkida need konteineritesse.
- Saadud pilte kontrollida automaatselt .
- MĂ€rgistada ja laadida pilte Docker Registry'sse.
- Rakendust klastris ĂŒles ehitada, kasutades kubectl, Helm vĂ”i kustomize.
- Portide suunamine.
- Vigade otsimine Java, Node.js, Pythonis kirjutatud rakendustes.
TöökĂ€ik erinevates variatsioonides on deklaratiivselt kirja pandud failis skaffold.yaml. Projekti jaoks saab mÀÀrata ka mitu profiili, kus etappide koostamine ja juurutamine muudetakse osaliselt vĂ”i tĂ€ielikult. NĂ€iteks saab arenduseks mÀÀrata arendajale sobiva baaspildi ja staging'utamiseks ning tootmiseks - minimaalne (+ kasutamine securityContext konteinerite vĂ”i ĂŒle kirjutada klastri, milles rakendus juurutatakse).
Docker-konteinerite koostamine saab toimuda kohapeal vÔi kaugelt: vÔi klastri abil, kasutades . Samuti toetatakse Bazeli ja Jib Maven/Gradle'i. Skaffold toetab mitmesuguseid strateegiaid sildistamiseks: git commit hash, kuupÀev/aeg, sha256 algfailide summa jne.
Erakordselt tuleb mÀrkida konteinerite testimise vÔimalust. Eelmises punktis mainitud container-structure-test raamistik pakub jÀrgmisi kontrollimismeetodeid:
- KĂ€skude tĂ€itmine konteineri kontekstis vĂ€ljundstaatuste jĂ€lgimise ja kĂ€su tekstilise âvĂ€ljundiâ kontrollimisega.
- Failide olemasolu konteineris ja atribuutide vastavus mÀÀratletud tingimustele.
- Failide sisu kontrollimine regulaaravaldiste jÀrgi.
- Pildi metainformatsiooni vÔrdlemine (
ENV,ENTRYPOINT,VOLUMESjne.). - Litsentsi ĂŒhilduvuse kontroll.
Failide sĂŒnkroonimine konteineriga toimub mitte kĂ”ige optimaalsemal viisil: Skaffold loob lihtsalt algfailidest arhiivi, kopeerib selle ja arhiveerib konteinis (peab olema installitud tar). SeetĂ”ttu, kui teie peamine ĂŒlesanne on koodi sĂŒnkroniseerimine, siis on parem vaadata spetsialiseeritud lahenduse (ksync) poole.

Skaffoldi töö peamised etapid
Ăldiselt ei vĂ”imalda see tööriist Kubernetes'i manifestidest abstrakteeruda ja tal puudub mingisugune interaktiivsus, mistĂ”ttu vĂ”ib see tunduda keeruline omandada. Kuid see on ka tema eelis - suurem vabadus.
Garden
- ; .
- LĂŒhike statistika GH: 1063 tĂ€hte, 1927 commitit, 17 panustajat.
- Keel: TypeScript (plaanis jagada projekt mitmeks komponendiks, millest mÔned on Go's ja luua SDK lisade loomiseks TypeScript/JavaScript'i ja Go jaoks).
- Litsents: Apache License 2.0.
Nagu Skaffold, on Garden suunatud rakenduse koodi kohaletoimetamise protsesside automatiseerimisele K8s-klastrisse. Selleks tuleb esmalt projekti struktuur YML-failis kirja panna, mille jÀrel kÀivitada kÀsk garden dev. See teeb kogu maagia:
- Kogub erinevate projektiosade konteinerid.
- Viib lĂ€bi integratsiooni ja ĂŒksuste teste, kui need on kirja pandud.
- VÀljastab kÔik projekti koostisosad klastrisse.
- Kui lÀhtekood muutub, kÀivitab ta kogu torustiku uuesti.
Selle tööriista kasutamisel keskendutakse arendajate meeskonna poolt kaugklastri ĂŒhiskasutusele. Sel juhul, kui mĂ”ned kogumise ja testimise etapid on juba tehtud, kiirendab see kogu protsessi mĂ€rkimisvÀÀrselt, kuna Garden suudab kasutada vahemĂ€lus olevaid tulemusi.
Projekti moodul vĂ”ib olla konteiner, Maven-konteiner, Helm-chart, manifest kubectl apply vĂ”i isegi OpenFaaS-funktsioon. Iga mooduli saab tĂ”mmata kaug-Git-reposiidist. Moodul vĂ”ib mÀÀratleda (vĂ”i mitte) teenused, ĂŒlesanded ja testid. Teenustel ja ĂŒlesannetel vĂ”ivad olla sĂ”ltuvused, mis vĂ”imaldab mÀÀrata, millises jĂ€rjekorras teenuseid edastada, ĂŒlesandeid ja teste kĂ€ivitada.
Garden pakub kasutajale ilusat juhtpaneeli (hetkel ), kus kuvatakse projekti graaf: koostisosad, kogumise, ĂŒlesannete ja testide jĂ€rjekord, nende seosed ja sĂ”ltuvused. Otseselt brauseris saab vaadata ka kĂ”igi projekti komponentide logisid, kontrollida, mida see vĂ”i teine komponent HTTP kaudu vĂ€lja annab (kui selle jaoks on mÀÀratud ingressi ressurss).

Garden paneel
Sellel tööriistal on ka kuumlaadimise reĆŸiim, mis lihtsalt sĂŒnkroniseerib skriptide muudatused konteineriga klastris, kiirendades rakenduse silumisprotsessi mitu korda. Gardenil on hea ja mitte halb , mis vĂ”imaldab kiirelt kohanduda ja alustada kasutamist. Ătlen, et hiljuti avaldasime selle autorite poolt.
KokkuvÔte
Loomulikult ei piirdu see loetelu rakenduste arendamise ja silumise tööriistadega Kuberneteses. On veel palju kasulikke ja praktilisi tööriistu, mis vÀÀrivad vÀhemalt mainimist, kui mitte eraldi artiklit. RÀÀkige, mida teie kasutate, milliste probleemide ees olete seisnud ja kuidas te neid lahendasite!
P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
