Įrankiai, skirti programų, veikiančių Kubernetes, kūrėjams

Įrankiai, skirti programų, veikiančių Kubernetes, kūrėjams

Šiuolaikinis požiūris į veiklą išsprendžia daugelį aktualių verslo problemų. Konteineriai ir orkestrantai palengvina bet kokio sudėtingumo projektų mastelį, supaprastina naujų versijų išleidimą, daro jas patikimesnes, tačiau kartu sukuria papildomų problemų kūrėjams. Programuotojui pirmiausia rūpi jo kodas: architektūra, kokybė, našumas, elegancija – o ne kaip jis veiks Kubernetes ir kaip jį išbandyti bei derinti atlikus net minimalius pakeitimus. Todėl visiškai natūralu, kad „Kubernetes“ įrankiai aktyviai kuriami, padedantys išspręsti net „archajiškiausių“ kūrėjų problemas ir leidžiantys susitelkti ties pagrindiniu dalyku.

Šioje apžvalgoje pateikiama trumpa informacija apie kai kuriuos įrankius, palengvinančius gyvenimą programuotojui, kurio kodas veikia Kubernetes klasterio pod'ax.

Paprasti pagalbininkai

Kubectl-debug

  • Apatinė eilutė: pridėkite talpyklą prie dėžutės ir pažiūrėkite, kas jame vyksta.
  • GitHub.
  • Trumpa GH statistika: 715 žvaigždučių, 54 įsipareigojimai, 9 bendradarbiai.
  • Kalba: eiti.
  • Licencija: Apache License 2.0.

Šis kubectl įskiepis leidžia jums sukurti papildomą konteinerį dominančioje grupėje, kuri dalinsis proceso vardų erdve su kitais konteineriais. Jame galite derinti pod veikimą: patikrinti tinklą, klausytis tinklo srauto, atlikti dominančio proceso eigą ir pan.

Taip pat galite pereiti prie proceso konteinerio paleisdami chroot /proc/PID/root - tai gali būti labai patogu, kai reikia gauti šaknies apvalkalą konteineryje, kuriam jis nustatytas manifeste securityContext.runAs.

Priemonė yra paprasta ir efektyvi, todėl gali būti naudinga kiekvienam kūrėjui. Plačiau apie tai rašėme atskiras straipsnis.

Nuotolinis buvimas

  • Apatinė eilutė: perkelkite programą į savo kompiuterį. Kurti ir derinti vietoje.
  • Vieta; GitHub.
  • Trumpa GH statistika: 2131 žvaigždutė, 2712 įsipareigojimų, 33 bendradarbiai.
  • Kalba: Python.
  • Licencija: Apache License 2.0.

Šio papildinio idėja yra paleisti konteinerį su programa vietiniame vartotojo kompiuteryje ir perduoti visą srautą iš klasterio į jį ir atgal. Šis metodas leidžia kurti vietoje tiesiog redaguojant failus mėgstamoje IDE: rezultatai bus pasiekiami iš karto.

Veikimo vietoje pranašumai yra taisymo patogumas ir momentiniai rezultatai, galimybė įprastu būdu derinti programą. Neigiama yra tai, kad jis reikalauja ryšio greičio, o tai ypač pastebima, kai tenka dirbti su programa, kurios RPS ir srautas yra gana didelis. Be to, „Telepresence“ turi problemų su „Windows“ garsumo tvirtinimu, o tai gali būti lemiamas apribojimas kūrėjams, pripratusiems prie šios OS.

Mes jau pasidalinome savo „Telepresence“ naudojimo patirtimi čia.

Ksync

  • Apatinė eilutė: beveik momentinis kodo sinchronizavimas su konteineriu klasteryje.
  • GitHub.
  • Trumpa GH statistika: 555 žvaigždučių, 362 įsipareigojimai, 11 bendradarbiai.
  • Kalba: eiti.
  • Licencija: Apache License 2.0.

Priemonė leidžia sinchronizuoti vietinio katalogo turinį su konteinerio, veikiančio klasteryje, katalogu. Toks įrankis puikiai tinka scenarijų programavimo kalbų kūrėjams, kurių pagrindinė problema yra kodo pristatymas į veikiantį konteinerį. Ksync skirtas šiam galvos skausmui malšinti.

Kai komandą inicijuoja vieną kartą ksync init klasteryje sukuriamas DaemonSet, kuris naudojamas pasirinkto konteinerio failų sistemos būklei stebėti. Savo vietiniame kompiuteryje kūrėjas vykdo komandą ksync watch, kuri stebi konfigūracijas ir veikia syncthing, kuri tiesiogiai sinchronizuoja failus su grupe.

Belieka tik nurodyti ksync, ką su kuo sinchronizuoti. Pavyzdžiui, ši komanda:

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

...sukurs stebėtoją vardu myprojectkuri ieškos ankšties su etikete app=backend ir pabandykite sinchronizuoti vietinį katalogą /home/user/myproject/ su katalogu /var/www/myproject/ prie vadinamo konteinerio php.

Problemos ir pastabos apie ksync iš mūsų patirties:

  • Turi būti naudojamas Kubernetes klasterio mazguose overlay2 kaip „Docker“ saugyklos tvarkyklė. Priemonė neveiks su jokiais kitais.
  • Kai naudojate Windows kaip kliento OS, failų sistemos stebėtojas gali tinkamai neveikti. Ši klaida buvo pastebėta dirbant su dideliais katalogais – su daugybe įdėtų failų ir katalogų. Mes sukūrėme aktualus klausimas sinchronizavimo projekte, tačiau pažangos jame dar nėra (nuo liepos pradžios).
  • Naudokite failą .stignore nurodyti kelius arba failų šablonus, kurių nereikia sinchronizuoti (pavyzdžiui, katalogai app/cache и .git).
  • Pagal numatytuosius nustatymus ksync iš naujo paleis konteinerį, kai pasikeis failai. Node.js tai patogu, bet PHP visiškai nereikalinga. Geriau išjungti opcache ir naudoti vėliavėlę --reload=false.
  • Konfigūraciją visada galima pataisyti $HOME/.ksync/ksync.yaml.

skvošas

  • Apatinė eilutė: derinimo procesai tiesiogiai klasteryje.
  • GitHub.
  • Trumpa GH statistika: 1154 žvaigždutės, 279 įsipareigojimai, 23 bendradarbiai.
  • Kalba: eiti.
  • Licencija: Apache License 2.0.

Šis įrankis skirtas derinti procesus tiesiogiai ankštyse. Priemonė yra paprasta ir interaktyviai leidžia pasirinkti norimą derintuvą (žr. žemiau) ir vardų sritis + pod, kurių procese turite įsikišti. Šiuo metu palaikoma:

  • delve – Go programoms;
  • GDB - per tikslinį nuotolinį + prievado peradresavimą;
  • JDWP prievado peradresavimas, skirtas „Java“ programoms derinti.

IDE pusėje palaikymas galimas tik VScode (naudojant plėtros), tačiau einamųjų (2019) metų planuose yra „Eclipse“ ir „Intellij“.

Norėdami derinti procesus, „Squash“ klasterio mazguose paleidžia privilegijuotą konteinerį, todėl pirmiausia turite susipažinti su galimybėmis. saugus režimas kad būtų išvengta saugumo problemų.

Integruoti sprendimai

Pereikime prie sunkiosios artilerijos - daugiau „didelio masto“ projektų, skirtų nedelsiant patenkinti daugelį kūrėjų poreikių.

NB: Šiame sąraše, žinoma, yra vieta mūsų atvirojo kodo programai werf (anksčiau žinomas kaip dapp). Tačiau apie tai jau ne kartą rašėme ir kalbėjome, todėl nusprendėme į apžvalgą neįtraukti. Norintiems iš arčiau susipažinti su jo galimybėmis, rekomenduojame perskaityti/paklausyti reportažą “werf yra mūsų CI / CD įrankis Kubernetes".

„DevSpace“.

  • Apatinė eilutė: tiems, kurie nori pradėti dirbti Kubernetes, bet nenori gilintis į jo džiungles.
  • GitHub.
  • Trumpa GH statistika: 630 žvaigždučių, 1912 įsipareigojimų, 13 bendradarbių.
  • Kalba: eiti.
  • Licencija: Apache License 2.0.

To paties pavadinimo įmonės sprendimas, teikiantis valdomus klasterius su Kubernetes komandos plėtrai. Priemonė buvo sukurta komercinėms grupėms, tačiau puikiai veikia su bet kuriomis kitomis.

Vykdant komandą devspace init projektų kataloge jums bus pasiūlyta (interaktyviai):

  • pasirinkite veikiantį Kubernetes klasterį,
  • naudoti esamą Dockerfile (arba sugeneruokite naują), kad pagal jį sukurtumėte konteinerį,
  • pasirinkite saugyklą konteinerio vaizdams saugoti ir pan.

Atlikę visus šiuos parengiamuosius veiksmus, galite pradėti kurti paleisdami komandą devspace dev. Jis sukurs konteinerį, įkels jį į saugyklą, įdiegs klasterį ir pradės prievado persiuntimą bei konteinerio sinchronizavimą su vietiniu katalogu.

Pasirinktinai būsite paraginti perkelti terminalą į konteinerį. Neturėtumėte atsisakyti, nes iš tikrųjų konteineris prasideda miego komanda, o norint iš tikrųjų išbandyti programą, ją reikia paleisti rankiniu būdu.

Galiausiai komanda devspace deploy iškelia programą ir susijusią infrastruktūrą į klasterį, po to viskas pradeda veikti kovos režimu.

Visa projekto konfigūracija saugoma faile devspace.yaml. Be kūrimo aplinkos nustatymų, joje taip pat galite rasti infrastruktūros aprašymą, panašų į standartinius Kubernetes manifestus, tik labai supaprastintą.

Įrankiai, skirti programų, veikiančių Kubernetes, kūrėjams
Architektūra ir pagrindiniai darbo su DevSpace etapai

Be to, prie projekto lengva pridėti iš anksto nustatytą komponentą (pavyzdžiui, MySQL DBVS) arba Helm diagramą. Daugiau skaitykite dokumentacija - tai nėra sudėtinga.

Skarfas

  • Vieta; GitHub.
  • Trumpa GH statistika: 7423 žvaigždės, 4173 įsipareigojimai, 136 bendradarbiai.
  • Kalba: eiti.
  • Licencija: Apache License 2.0.

Teigiama, kad ši „Google“ programa atitinka visus kūrėjo, kurio kodas kažkaip veiks „Kubernetes“ klasteryje, poreikius. Pradėti jį naudoti nėra taip paprasta kaip devspace: jokio interaktyvumo, kalbos aptikimo ir automatinio kūrimo Dockerfile jie tau to čia nesiūlys.

Tačiau, jei tai jūsų negąsdina, štai ką Skaffold leidžia padaryti:

  • Stebėkite šaltinio kodo pakeitimus.
  • Sinchronizuokite jį su ankšties konteineriu, jei jo nereikia surinkti.
  • Surinkite konteinerius su kodu, jei kalba yra interpretuojama, arba surinkite artefaktus ir supakuokite juos į konteinerius.
  • Gauti vaizdai automatiškai tikrinami naudojant konteinerio konstrukcijos bandymas.
  • Vaizdų žymėjimas ir įkėlimas į „Docker“ registrą.
  • Įdiekite programą klasteryje naudodami kubectl, Helm arba kustomize.
  • Atlikite prievado persiuntimą.
  • Derinimo programos, parašytos Java, Node.js, Python.

Įvairių variantų darbo eiga deklaratyviai aprašyta byloje skaffold.yaml. Projektui taip pat galite apibrėžti kelis profilius, kuriuose galite iš dalies arba visiškai pakeisti surinkimo ir diegimo etapus. Pavyzdžiui, kurdami nurodykite kūrėjui patogų pagrindinį vaizdą, o pastatymui ir gamybai - minimalų (+ naudojimas securityContext konteinerius arba iš naujo apibrėžti klasterį, kuriame bus įdiegta programa).

Docker konteineriai gali būti statomi vietoje arba nuotoliniu būdu: in Google Cloud Build arba klasteryje naudojant Kaniko. Taip pat palaikomi „Bazel“ ir „Jib Maven/Gradle“. Žymėjimui Skaffold palaiko daugybę strategijų: pagal git commit maišą, datą/laiką, sha256 šaltinių sumą ir kt.

Atskirai verta paminėti galimybę išbandyti konteinerius. Jau minėta konteinerio struktūros bandymo sistema siūlo šiuos tikrinimo metodus:

  • Komandų vykdymas konteinerio kontekste su stebėjimo išėjimo būsenomis ir komandos teksto išvesties tikrinimu.
  • Failų buvimo konteineryje tikrinimas ir nurodytų atributų atitikimas.
  • Failų turinio valdymas naudojant reguliariąsias išraiškas.
  • Vaizdo metaduomenų patvirtinimas (ENV, ENTRYPOINT, VOLUMES ir pan.).
  • Licencijos suderinamumo tikrinimas.

Failų sinchronizavimas su konteineriu atliekamas ne pačiu optimaliausiu būdu: Skaffold tiesiog sukuria archyvą su šaltiniais, jį nukopijuoja ir išpakuoja į konteinerį (būtina įdiegti tarą). Todėl, jei jūsų pagrindinė užduotis yra kodo sinchronizavimas, geriau ieškoti specializuoto sprendimo (ksync).

Įrankiai, skirti programų, veikiančių Kubernetes, kūrėjams
Pagrindiniai Skaffold eksploatavimo etapai

Apskritai įrankis neleidžia abstrahuotis nuo Kubernetes apraiškų ir neturi jokio interaktyvumo, todėl gali atrodyti, kad jį sunku įsisavinti. Bet tai ir jos privalumas – didesnė veiksmų laisvė.

Sodas

  • Vieta; GitHub.
  • Trumpa GH statistika: 1063 žvaigždės, 1927 įsipareigojimai, 17 bendradarbių.
  • Kalba: TypeScript (planuojama padalinti projektą į kelis komponentus, kai kurie iš jų bus „Go“, taip pat sukurti SDK priedams kurti „TypeScript“ / „JavaScript“ ir „Go“).
  • Licencija: Apache License 2.0.

Kaip ir „Skaffold“, „Garden“ siekia automatizuoti programos kodo pateikimo į K8s klasterį procesus. Norėdami tai padaryti, pirmiausia turite aprašyti projekto struktūrą YAML faile ir paleisti komandą garden dev. Ji padarys visą magiją:

  • Surinkite konteinerius su įvairiomis projekto dalimis.
  • Atlieka integravimo ir vienetų testus, jei tokie buvo aprašyti.
  • Iškelia visus projekto komponentus į klasterį.
  • Jei pasikeis šaltinio kodas, jis iš naujo paleis visą dujotiekį.

Pagrindinis šio įrankio naudojimo tikslas yra bendrinti nuotolinį klasterį su kūrimo komanda. Tokiu atveju, jei kai kurie kūrimo ir testavimo veiksmai jau buvo atlikti, tai žymiai pagreitins visą procesą, nes Garden galės naudoti talpykloje saugomus rezultatus.

Projekto modulis gali būti konteineris, Maven konteineris, Helm diagrama, manifestas kubectl apply ar net OpenFaaS funkcija. Be to, bet kurį modulį galima ištraukti iš nuotolinės „Git“ saugyklos. Modulis gali arba negali apibrėžti paslaugų, užduočių ir testų. Paslaugos ir užduotys gali turėti priklausomybių, todėl galite nustatyti konkrečios paslaugos diegimo seką ir organizuoti užduočių ir testų paleidimą.

Garden suteikia vartotojui gražų prietaisų skydelį (šiuo metu eksperimentinė būsena), kuriame rodomas projekto grafikas: komponentai, surinkimo seka, užduočių ir testų vykdymas, jų ryšiai ir priklausomybės. Tiesiogiai naršyklėje galite peržiūrėti visų projekto komponentų žurnalus ir patikrinti, ką konkretus komponentas išveda per HTTP (jei, žinoma, jam yra deklaruotas įėjimo išteklius).

Įrankiai, skirti programų, veikiančių Kubernetes, kūrėjams
Skydas sodui

Šis įrankis taip pat turi karšto perkrovimo režimą, kuris tiesiog sinchronizuoja scenarijaus pakeitimus su konteineriu klasteryje, labai pagreitindamas programos derinimo procesą. Sodas turi gerą dokumentacija ir neblogai pavyzdžių rinkinys, leidžianti greitai priprasti ir pradėti naudoti. Beje, visai neseniai paskelbėme straipsnio vertimas iš jos autorių.

išvada

Žinoma, šis Kubernetes programų kūrimo ir derinimo įrankių sąrašas neapsiriboja. Yra daug daugiau labai naudingų ir praktiškų paslaugų, kurios vertos jei ne atskiro straipsnio, tai bent paminėjimo. Papasakokite, ką naudojate, su kokiomis problemomis susidūrėte ir kaip jas išsprendėte!

PS

Taip pat skaitykite mūsų tinklaraštyje:

Šaltinis: www.habr.com

Добавить комментарий