Tööriistad Kubernetes töötavate rakenduste arendajatele

Tööriistad Kubernetes töötavate rakenduste arendajatele

Kaasaegne lähenemine tegevusele lahendab paljud pakilised äriprobleemid. Konteinerid ja orkestraatorid muudavad igasuguse keerukusega projektide skaleerimise lihtsaks, lihtsustavad uute versioonide väljaandmist, muudavad need töökindlamaks, kuid samas tekitavad need arendajatele lisaprobleeme. Programmeerija hoolib ennekõike oma koodist: arhitektuur, kvaliteet, jõudlus, elegants - ja mitte see, kuidas see Kubernetesis töötab ja kuidas seda pärast isegi minimaalsete muudatuste tegemist testida ja siluda. Seetõttu on ka üsna loomulik, et Kubernetese jaoks töötatakse aktiivselt välja tööriistu, mis aitavad lahendada ka kõige "arhailisemate" arendajate probleeme ja võimaldavad neil keskenduda peamisele.

See ülevaade annab lühiteavet mõnede tööriistade kohta, mis muudavad programmeerija elu lihtsamaks, kelle kood töötab Kubernetese klastri pod'ax'is.

Lihtsad abilised

Kubectl-silumine

  • Alumine rida: lisage oma konteiner Podi ja vaadake, mis selles toimub.
  • GitHub.
  • GH lühistatistika: 715 tärni, 54 kohustust, 9 panustajat.
  • Keel: mine.
  • Litsents: Apache License 2.0.

See kubectli pistikprogramm võimaldab teil luua huvipakkuvas kaustas täiendava konteineri, mis jagab protsessi nimeruumi teiste konteineritega. Selles saate siluda podi tööd: kontrollida võrku, kuulata võrguliiklust, jälgida huvipakkuvat protsessi jne.

Protsessi konteinerile saate lülituda ka käivitades chroot /proc/PID/root - see võib olla väga mugav, kui peate hankima juurkesta konteinerisse, mille jaoks see on manifestis määratud securityContext.runAs.

Tööriist on lihtne ja tõhus, seega võib see olla kasulik igale arendajale. Kirjutasime sellest lähemalt aastal eraldi artikkel.

Teleesitus

  • Alumine rida: kandke rakendus arvutisse. Arenda ja silu kohapeal.
  • veebisait; GitHub.
  • GH lühistatistika: 2131 tähte, 2712 kohustust, 33 panustajat.
  • Keel: Python.
  • Litsents: Apache License 2.0.

Selle lisandmooduli idee on käivitada rakendusega konteiner kohalikus kasutaja arvutis ja puhverserveerida kogu liiklus klastrist sinna ja tagasi. See lähenemisviis võimaldab teil kohapeal arendada, lihtsalt redigeerides faile oma lemmik-IDE-s: tulemused on kohe saadaval.

Kohaliku töötamise eelisteks on redigeerimise mugavus ja kohesed tulemused, võimalus rakendust tavapärasel viisil siluda. Negatiivne külg on see, et see on nõudlik ühenduse kiiruse suhtes, mis on eriti märgatav, kui peate töötama üsna suure RPS-i ja liiklusega rakendusega. Lisaks on Telepresence'il probleeme Windowsi helitugevuse paigaldamisega, mis võib selle OS-iga harjunud arendajatele olla otsustav piirang.

Oleme Telepresence'i kasutamise kogemust juba jaganud siin.

Ksync

  • Alumine rida: peaaegu hetkeline koodi sünkroonimine klastris oleva konteineriga.
  • GitHub.
  • GH lühistatistika: 555 tärni, 362 kohustust, 11 panustajat.
  • Keel: mine.
  • Litsents: Apache License 2.0.

Utiliit võimaldab teil sünkroonida kohaliku kataloogi sisu klastris töötava konteineri kataloogiga. Selline tööriist sobib suurepäraselt skriptimiskeelte arendajatele, kelle peamiseks probleemiks on koodi toimetamine töötavasse konteinerisse. Ksync on loodud selle peavalu leevendamiseks.

Kui käsk initsialiseeritakse üks kord ksync init klastris luuakse DaemonSet, mille abil jälgitakse valitud konteineri failisüsteemi olekut. Oma kohalikus arvutis käivitab arendaja käsu ksync watch, mis jälgib konfiguratsioone ja töötab syncthing, mis sünkroonib failid otse klastriga.

Jääb üle vaid anda ksyncile juhised, mida millega sünkroonida. Näiteks see käsk:

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

...loob jälgija nimega myprojectmis otsib sildiga kauna app=backend ja proovige kohalikku kataloogi sünkroonida /home/user/myproject/ koos kataloogiga /var/www/myproject/ nimelise konteineri juures php.

Probleemid ja märkused ksynci kohta meie kogemusest:

  • Tuleb kasutada Kubernetese klastri sõlmedes overlay2 Dockeri salvestusdraiverina. Utiliit ei tööta teistega.
  • Windowsi kasutamisel kliendi OS-ina ei pruugi failisüsteemi jälgija korralikult töötada. Seda viga märgati suurte kataloogidega töötamisel – suure hulga pesastatud failide ja kataloogidega. Meie lõime asjakohane küsimus sünkroonimisprojektis, kuid sellel pole veel edu (alates juuli algusest).
  • Kasuta faili .stignore sünkroonimist mittevajavate teede või failimustrite määramiseks (nt kataloogid app/cache и .git).
  • Vaikimisi taaskäivitab ksync konteineri iga kord, kui failid muutuvad. Node.js jaoks on see mugav, kuid PHP jaoks on see täiesti ebavajalik. Parem on opcache välja lülitada ja kasutada lippu --reload=false.
  • Konfiguratsiooni saab alati parandada $HOME/.ksync/ksync.yaml.

squash

  • Alumine rida: silumisprotsesse otse klastris.
  • GitHub.
  • GH lühistatistika: 1154 tärni, 279 kohustust, 23 panustajat.
  • Keel: mine.
  • Litsents: Apache License 2.0.

See tööriist on mõeldud protsesside silumiseks otse kaustades. Utiliit on lihtne ja võimaldab interaktiivselt valida soovitud siluri (vt allpool) ja nimeruum + pod, mille protsessi peate sekkuma. Hetkel toetatud:

  • delve – Go rakenduste jaoks;
  • GDB - sihtkaugjuhtimise + pordi edastamise kaudu;
  • JDWP-pordi edastamine Java rakenduste silumiseks.

IDE poolel on tugi saadaval ainult VScode'is (kasutades laienemine, aga käesoleva (2019) aasta plaanidesse kuuluvad Eclipse ja Intellj.

Protsesside silumiseks käitab Squash klastri sõlmedes privilegeeritud konteinerit, seega peate esmalt tutvuma võimalustega turvarežiim turvaprobleemide vältimiseks.

Terviklikud lahendused

Liigume edasi raskekahurväe juurde - rohkemate suuremahuliste projektide juurde, mis on loodud vastama koheselt paljudele arendajate vajadustele.

NB: Selles loendis on loomulikult koht meie avatud lähtekoodiga utiliidi jaoks werf (varem tuntud kui dapp). Kuid oleme sellest juba rohkem kui korra kirjutanud ja rääkinud ning seetõttu otsustasime seda arvustusse mitte lisada. Neile, kes soovivad selle võimalustega lähemalt tutvuda, soovitame lugeda/kuulata aruannet “werf on meie tööriist CI/CD jaoks Kubernetesis'.

DevSpace

  • Alumine rida: neile, kes soovivad Kubernetesis tööle asuda, kuid ei taha süveneda selle džunglisse.
  • GitHub.
  • GH lühistatistika: 630 tärni, 1912 kohustust, 13 kaastöölist.
  • Keel: mine.
  • Litsents: Apache License 2.0.

Lahendus samanimeliselt ettevõttelt, mis pakub Kubernetesega hallatud klastreid meeskonna arendamiseks. Utiliit loodi kommertsklastrite jaoks, kuid töötab suurepäraselt kõigi teistega.

Käsu käivitamisel devspace init projektikataloogis pakutakse teile (interaktiivselt):

  • valige töötav Kubernetese klaster,
  • kasutada olemasolevat Dockerfile (või genereerige uus), et luua selle põhjal konteiner,
  • valige hoidla konteineri piltide jms salvestamiseks.

Pärast kõiki neid ettevalmistavaid samme võite käivitada arenduse, käivitades käsu devspace dev. See loob konteineri, laadib selle hoidlasse, juurutab klastris ning alustab pordi edastamist ja konteineri sünkroonimist kohaliku kataloogiga.

Valikuliselt palutakse teil terminal konteinerisse teisaldada. Te ei tohiks keelduda, sest tegelikult algab konteiner unerežiimi käsuga ja tegelikuks testimiseks tuleb rakendus käsitsi käivitada.

Lõpuks meeskond devspace deploy laseb rakenduse ja sellega seotud infrastruktuuri klastris välja, misjärel hakkab kõik toimima võitlusrežiimis.

Kogu projekti konfiguratsioon salvestatakse faili devspace.yaml. Lisaks arenduskeskkonna seadetele leiate sealt ka tavapäraste Kubernetese manifestidega sarnase taristu kirjelduse, ainult oluliselt lihtsustatult.

Tööriistad Kubernetes töötavate rakenduste arendajatele
DevSpace'iga töötamise arhitektuur ja peamised etapid

Lisaks on projektile lihtne lisada eelmääratletud komponenti (näiteks MySQL DBMS) või Helm diagrammi. Loe lähemalt sisse dokumentatsioon - see pole keeruline.

Skeffold

  • veebisait; GitHub.
  • GH lühistatistika: 7423 tärni, 4173 kohustust, 136 panustajat.
  • Keel: mine.
  • Litsents: Apache License 2.0.

See Google'i utiliit väidab, et katab kõik arendaja vajadused, kelle kood töötab kuidagi Kubernetese klastris. Selle kasutamise alustamine pole nii lihtne kui devspace: puudub interaktiivsus, keeletuvastus ja automaatne loomine Dockerfile nad ei paku seda sulle siin.

Kui see teid aga ei hirmuta, siis Skaffold võimaldab teil teha järgmist.

  • Jälgige lähtekoodi muudatusi.
  • Kui see ei vaja kokkupanemist, sünkroonige see kambrikonteineriga.
  • Koguge koodiga konteinerid, kui keelt tõlgendatakse, või koostage artefaktid ja pakkige need konteineritesse.
  • Saadud pilte kontrollitakse automaatselt kasutades konteineri ehituse katse.
  • Piltide märgistamine ja Dockeri registrisse üleslaadimine.
  • Rakenduse juurutamine klastris, kasutades kubectl, Helm või kustomize.
  • Tehke pordi edastamine.
  • Silumisrakendused, mis on kirjutatud Java, Node.js, Python keeles.

Töövoogu erinevates variatsioonides kirjeldatakse failis deklaratiivselt skaffold.yaml. Projekti jaoks saate määratleda ka mitu profiili, milles saate koostamise ja juurutamise etappe osaliselt või täielikult muuta. Näiteks määrake arenduse jaoks arendajale mugav baaspilt ning lavastuse ja tootmise jaoks minimaalne (+ kasutamine securityContext konteinerid või määratlege uuesti klaster, milles rakendus juurutatakse).

Dokkerite konteinereid saab ehitada kohapeal või eemalt: sisse Google Cloud Build või klastris kasutades Kaniko. Toetatud on ka Bazel ja Jib Maven/Gradle. Märgistamisel toetab Skaffold paljusid strateegiaid: git commit hash, kuupäev/kellaaeg, sha256-allikate summa jne.

Eraldi väärib märkimist konteinerite testimise võimalus. Juba mainitud konteineri struktuuri testimise raamistik pakub järgmisi kontrollimeetodeid:

  • Käskude täitmine väljumisolekute jälgimisega konteineri kontekstis ja käsu tekstiväljundi kontrollimine.
  • Failide olemasolu kontrollimine konteineris ja määratud atribuutidega vastavusse viimine.
  • Faili sisu juhtimine regulaaravaldiste abil.
  • Pildi metaandmete kinnitamine (ENV, ENTRYPOINT, VOLUMES jne).
  • Litsentsi ühilduvuse kontrollimine.

Failide sünkroonimine konteineriga ei toimu kõige optimaalsemal viisil: Skaffold loob lihtsalt allikatega arhiivi, kopeerib selle ja pakib konteinerisse lahti (tar tuleb paigaldada). Seega, kui teie peamine ülesanne on koodi sünkroonimine, on parem otsida spetsiaalset lahendust (ksync).

Tööriistad Kubernetes töötavate rakenduste arendajatele
Skaffoldi töö peamised etapid

Üldiselt ei võimalda tööriist Kubernetese manifestidest abstraktsiooni võtta ega oma interaktiivsust, mistõttu võib selle valdamine tunduda keeruline. Kuid see on ka selle eelis – suurem tegevusvabadus.

Aed

  • veebisait; GitHub.
  • GH lühistatistika: 1063 tärni, 1927 kohustust, 17 panustajat.
  • Keel: TypeScript (projekt on plaanis jagada mitmeks komponendiks, millest osa on Go-s, ning teha ka SDK lisandmoodulite loomiseks TypeScriptis/JavaScriptis ja Go-s).
  • Litsents: Apache License 2.0.

Sarnaselt Skaffoldile on Gardeni eesmärk automatiseerida rakenduskoodi K8-klastrisse edastamise protsesse. Selleks peate esmalt kirjeldama projekti struktuuri YAML-failis ja seejärel käivitama käsu garden dev. Ta teeb kogu maagia:

  • Koguge konteinerid projekti erinevate osadega.
  • Viib läbi integratsiooni- ja ühikuteste, kui neid on kirjeldatud.
  • Veeretab kõik projekti komponendid klastrisse.
  • Kui lähtekood muutub, taaskäivitab see kogu konveieri.

Selle tööriista kasutamise põhirõhk on kaugklastri jagamisel arendusmeeskonnaga. Sel juhul, kui osa ehitamise ja testimise etappe on juba tehtud, kiirendab see kogu protsessi oluliselt, kuna Garden saab kasutada vahemällu salvestatud tulemusi.

Projektimoodul võib olla konteiner, Maveni konteiner, Helmi diagramm või manifest kubectl apply või isegi OpenFaaS-i funktsiooni. Lisaks saab mis tahes mooduleid tõmmata Giti kaughoidlast. Moodul võib, aga ei pruugi määratleda teenuseid, ülesandeid ja teste. Teenustel ja ülesannetel võivad olla sõltuvused, tänu millele saate määrata konkreetse teenuse juurutamise järjestuse ning korraldada ülesannete ja testide käivitamist.

Garden pakub kasutajale ilusat armatuurlauda (praegu sees eksperimentaalne olek), mis kuvab projekti graafiku: komponendid, kooste järjekord, ülesannete ja testide täitmine, nende seosed ja sõltuvused. Otse brauseris saate vaadata kõigi projekti komponentide logisid ja kontrollida, mida konkreetne komponent HTTP kaudu väljastab (kui loomulikult on selle jaoks sissepääsuressurss deklareeritud).

Tööriistad Kubernetes töötavate rakenduste arendajatele
Aia paneel

Sellel tööriistal on ka kuuma taaslaadimise režiim, mis lihtsalt sünkroonib skripti muudatused klastri konteineriga, kiirendades oluliselt rakenduse silumisprotsessi. Aias on hea dokumentatsiooni ja pole paha näidete komplekt, mis võimaldab teil sellega kiiresti harjuda ja seda kasutama hakata. Muide, just hiljuti avaldasime artikli tõlge selle autoritelt.

Järeldus

Muidugi ei piirdu see Kubernetese rakenduste arendamise ja silumise tööriistade loend. On veel palju väga kasulikke ja praktilisi utiliite, mis väärivad kui mitte eraldi artiklit, siis vähemalt mainimist. Rääkige meile, mida kasutate, millised probleemid tekkisid ja kuidas need lahendasite!

PS

Loe ka meie blogist:

Allikas: www.habr.com

Lisa kommentaar