Kubernetesen exekutatzen diren aplikazioen garatzaileentzako tresnak

Kubernetesen exekutatzen diren aplikazioen garatzaileentzako tresnak

Eragiketen ikuspegi moderno batek negozio-arazo larri asko konpontzen ditu. Edukiontzi eta orkestratzaileek edozein konplexutasuneko proiektuak eskalatzea errazten dute, bertsio berrien kaleratzea errazten dute, fidagarriagoak egiten dituzte, baina, aldi berean, garatzaileentzako arazo gehigarriak sortzen dituzte. Programatzaileari, lehenik eta behin, bere kodeari axola zaio: arkitektura, kalitatea, errendimendua, dotorezia, eta ez nola funtzionatuko duen Kubernetesen eta nola probatu eta araztu aldaketa minimoak ere egin ondoren. Hori dela eta, nahiko naturala da Kubernetes-erako tresnak aktiboki garatzen ari direla, garatzaile "arkaikoenen" arazoak konpontzen lagunduz eta gauza nagusian zentratu ahal izateko.

Berrikuspen honek Kubernetes kluster baten pod'ax-ean exekutatzen duen programatzaile bati bizitza errazten dioten tresna batzuei buruzko informazio laburra eskaintzen du.

Laguntzaile sinpleak

Kubectl-araztea

  • Beheko lerroa: gehitu zure edukiontzia Pod batera eta ikusi zer gertatzen den bertan.
  • GitHub.
  • GH estatistiko laburrak: 715 izar, 54 konpromiso, 9 laguntzaile.
  • Hizkuntza: Joan.
  • Lizentzia: Apache License 2.0.

Kubectl-erako plugin honek edukiontzi gehigarri bat sortzeko aukera ematen dizu interes-gunearen barruan, prozesuaren izen-espazioa beste edukiontzi batzuekin partekatuko duena. Bertan pod-aren funtzionamendua arazketa dezakezu: sarea egiaztatu, sareko trafikoa entzun, prozesu interesgarri bat egin, etab.

Prozesuaren edukiontzira ere alda dezakezu exekutatuz chroot /proc/PID/root - hau oso erosoa izan daiteke manifestuan ezarrita dagoen edukiontzi batean erro shell bat lortu behar duzunean securityContext.runAs.

Tresna sinplea eta eraginkorra da, beraz, garatzaile guztientzat erabilgarria izan daiteke. urtean gehiago idatzi genuen horri buruz artikulu bereizi.

Telepresentzia

  • Beheko lerroa: transferitu aplikazioa zure ordenagailura. Garatu eta arazketa lokalean.
  • Web; GitHub.
  • GH estatistiko laburrak: 2131 izar, 2712 konpromiso, 33 laguntzaile.
  • Hizkuntza: Python.
  • Lizentzia: Apache License 2.0.

Snap-in honen ideia da aplikazioa duen edukiontzi bat abiarazteko tokiko erabiltzailearen ordenagailuan eta klusterretik bertara eta itzuliko trafiko guztia proxy. Ikuspegi honek lokalean garatzeko aukera ematen dizu zure gogoko IDEan fitxategiak editatuz besterik gabe: emaitzak berehala egongo dira eskuragarri.

Lokalean exekutatzeko abantailak aldaketak eta berehalako emaitzen erosotasuna dira, aplikazioa ohiko moduan arazteko gaitasuna. Alde txarra da konexio-abiadura zorrotza dela, eta hori bereziki nabarmena da RPS eta trafiko nahiko altuak dituen aplikazio batekin lan egin behar duzunean. Gainera, Telepresencek arazoak ditu Windows-en bolumen-muntaiekin, eta hori muga erabakigarria izan daiteke sistema eragile honetara ohituta dauden garatzaileentzat.

Dagoeneko partekatu dugu Telepresentzia erabiltzearen esperientzia Hemen.

Ksync

  • Beheko lerroa: klusterreko edukiontziarekin kodea ia berehalako sinkronizazioa.
  • GitHub.
  • GH estatistiko laburrak: 555 izar, 362 konpromiso, 11 laguntzaile.
  • Hizkuntza: Joan.
  • Lizentzia: Apache License 2.0.

Utilitateari esker, tokiko direktorio baten edukia klusterrean exekutatzen ari den edukiontzi baten direktorioarekin sinkroniza dezakezu. Tresna hori ezin hobea da scripting-en programazio-lengoaietako garatzaileentzat, arazo nagusia exekutatzen ari den edukiontzi batera kodea ematea baita. Ksync buruko min hori arintzeko diseinatuta dago.

Komandoak behin hasieratzen duenean ksync init DaemonSet bat sortzen da klusterrean, hautatutako edukiontziaren fitxategi-sistemaren egoera kontrolatzeko erabiltzen dena. Bere tokiko ordenagailuan, garatzaileak komandoa exekutatzen du ksync watch, konfigurazioak eta exekuzioak kontrolatzen dituena syncthing, fitxategiak zuzenean klusterarekin sinkronizatzen dituena.

Falta dena da ksync zerekin sinkronizatu behar den agintzea. Adibidez, komando hau:

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

... izeneko begirale bat sortuko du myprojectetiketa duen leka bat bilatuko duena app=backend eta saiatu direktorio lokala sinkronizatzen /home/user/myproject/ katalogoarekin /var/www/myproject/ izeneko edukiontzian php.

Ksync-i buruzko arazoak eta oharrak gure esperientziatik:

  • Kubernetes kluster-nodoetan erabili behar da overlay2 Docker-erako biltegiratze-gidari gisa. Utilitateak ez du funtzionatuko beste inorekin.
  • Windows OS bezero gisa erabiltzen duzunean, baliteke fitxategi-sistemaren begiraleak behar bezala ez funtzionatzea. Akats hau direktorio handiekin lan egitean nabaritu zen - habiaratutako fitxategi eta direktorio ugarirekin. Guk sortu genuen dagokion gaia sinkronizazio proiektuan, baina oraindik ez dago aurrerapenik (uztailaren hasieratik).
  • Erabili fitxategia .stignore sinkronizatu behar ez diren bideak edo fitxategi-ereduak zehazteko (adibidez, direktorioa app/cache ΠΈ .git).
  • Lehenespenez, ksync-ek edukiontzia berrabiaraziko du fitxategiak aldatzen diren bakoitzean. Node.js-entzat hau erosoa da, baina PHPrentzat guztiz beharrezkoa ez da. Hobe da opcache desaktibatu eta bandera erabiltzea --reload=false.
  • Konfigurazioa beti zuzen daiteke $HOME/.ksync/ksync.yaml.

Squash

  • Beheko lerroa: arazketa prozesuak zuzenean klusterrean.
  • GitHub.
  • GH estatistiko laburrak: 1154 izar, 279 konpromiso, 23 laguntzaile.
  • Hizkuntza: Joan.
  • Lizentzia: Apache License 2.0.

Tresna hau prozesuak zuzenean podetan arazteko diseinatuta dago. Erabilgarritasuna sinplea da eta interaktiboki nahi duzun arazketa hautatzeko aukera ematen du (ikus behean) eta namespace + pod, eta horren prozesuan esku hartu behar duzu. Gaur egun onartzen da:

  • delve - Go aplikazioetarako;
  • GDB - helburu urruneko + ataka birbidaltzearen bidez;
  • JDWP ataka birbidaltzea Java aplikazioak arazketarako.

IDE aldean, euskarria VScode-n bakarrik dago erabilgarri (erabiliz hedapen), hala ere, oraingo (2019) urteko planen artean Eclipse eta Intellij daude.

Prozesuak arazteko, Squash-ek edukiontzi pribilegiatu bat exekutatzen du klusterreko nodoetan, beraz, lehenik eta behin gaitasunekin ezagutu behar duzu. Modu segurua segurtasun arazoak saihesteko.

Irtenbide osoak

Goazen artilleria astunera: garatzaileen behar asko berehala asetzeko diseinatutako "eskala handiko" proiektu gehiago.

NB: Zerrenda honetan, noski, badago lekua gure Open Source utilitatearentzat werf (lehen dapp izenez ezagutzen zena). Dena den, behin baino gehiagotan idatzi eta hitz egin dugu jada, eta horregatik erabaki dugu berrikuspenean ez sartzea. Haren gaitasunak gehiago ezagutu nahi dituztenentzat, txostena irakurtzea/entzutea gomendatzen dugu "werf Kubernetes-en CI/CDrako gure tresna da'.

DevSpace

  • Beheko lerroa: Kubernetesen lanean hasi nahi dutenentzat, baina bertako oihanean sakondu nahi ez dutenentzat.
  • GitHub.
  • GHren estatistika laburrak: 630 izar, 1912 konpromiso, 13 laguntzaile.
  • Hizkuntza: Joan.
  • Lizentzia: Apache License 2.0.

Izen bereko konpainiaren irtenbide bat, kubernetes kudeatutako klusterrak eskaintzen dituena taldeen garapenerako. Utilitatea kluster komertzialetarako sortu zen, baina oso ondo funtzionatzen du beste edozeinekin.

Komandoa exekutatzean devspace init proiektuen katalogoan eskainiko zaizu (interaktiboki):

  • hautatu funtzionatzen duen Kubernetes kluster bat,
  • dauden erabili Dockerfile (edo sortu berri bat) bertan oinarritutako edukiontzi bat sortzeko,
  • hautatu edukiontzien irudiak gordetzeko biltegi bat, etab.

Prestaketa-urrats horien guztien ondoren, garapena has zaitezke komandoa exekutatuz devspace dev. Edukiontzia eraikiko du, biltegira igoko du, inplementazioa klusterera zabalduko du eta portuak birbidaltzea eta edukiontzia tokiko direktorioarekin sinkronizatzea hasiko du.

Aukeran, terminala edukiontzira eramateko eskatuko zaizu. Ez zenuke uko egin behar, errealitatean edukiontzia lo komandoarekin hasten delako eta benetako probak egiteko aplikazioa eskuz abiarazi behar da.

Azkenik, taldea devspace deploy aplikazioa eta lotutako azpiegiturak klusterera zabaltzen ditu, eta ondoren dena borroka moduan funtzionatzen hasten da.

Proiektuaren konfigurazio guztia fitxategi batean gordetzen da devspace.yaml. Garapen-ingurunearen ezarpenez gain, azpiegituraren deskribapena ere aurki dezakezu bertan, Kubernetes-en manifestu estandarren antzekoa, oso sinplifikatuta soilik.

Kubernetesen exekutatzen diren aplikazioen garatzaileentzako tresnak
Arkitektura eta DevSpace-rekin lan egiteko etapa nagusiak

Horrez gain, erraza da aurredefinitutako osagai bat gehitzea (adibidez, MySQL DBMS bat) edo Helm diagrama bat proiektuan. Irakurri gehiago atalean dokumentazioa - Ez da konplikatua.

Skaffold

  • Web; GitHub.
  • GH estatistiko laburrak: 7423 izar, 4173 konpromiso, 136 laguntzaile.
  • Hizkuntza: Joan.
  • Lizentzia: Apache License 2.0.

Google-ren erabilgarritasun honek bere kodea Kubernetes kluster batean exekutatzen duen garatzaile baten behar guztiak estaltzen dituela dio. Erabiltzen hastea ez da devspace bezain erraza: interaktibitaterik, hizkuntza detektatu eta auto-sorkuntzarik ez Dockerfile ez dizute hemen eskainiko.

Hala ere, horrek ez bazaitu beldurtzen, hona hemen Skaffoldek egiteko aukera ematen dizuna:

  • Jarraitu iturburu-kodeen aldaketen jarraipena.
  • Sinkronizatu ontziaren edukiontziarekin muntaketa behar ez badu.
  • Bildu kodedun edukiontziak, hizkuntza interpretatzen bada, edo bildu artefaktuak eta ontziratu edukiontzietan.
  • Lortutako irudiak automatikoki egiaztatzen dira erabiliz edukiontzi-egitura-proba.
  • Irudiak etiketatu eta igotzea Docker Erregistrora.
  • Inplementatu aplikazio bat kluster batean kubectl, Helm edo kustomize erabiliz.
  • Egin portuak birbidaltzea.
  • Araztu Java, Node.js, Python-en idatzitako aplikazioak.

Hainbat aldaeratako lan-fluxua deklaratiboki deskribatzen da fitxategian skaffold.yaml. Proiektu baterako, hainbat profil ere defini ditzakezu, zeinetan muntaketa eta inplementazio faseak partzialki edo erabat alda ditzakezun. Adibidez, garapenerako, zehaztu garatzailearentzat egokia den oinarrizko irudi bat eta eszenaratzeko eta ekoizpenerako - gutxieneko bat (+ erabili securityContext edukiontziak edo aplikazioa inplementatuko den clusterra birdefinitu).

Docker edukiontziak lokalean edo urrunetik eraiki daitezke: in Google Cloud Build edo cluster batean erabiliz Kaniko. Bazel eta Jib Maven/Gradle ere onartzen dira. Etiketak egiteko, Skaffold-ek estrategia asko onartzen ditu: git commit hash bidez, data/ordua, iturburuen sha256 batura, etab.

Bereiz, nabarmentzekoa da ontziak probatzeko aukera. Lehen aipatutako edukiontzi-egitura-proba esparruak egiaztapen-metodo hauek eskaintzen ditu:

  • Aginduak exekutatzen edukiontzi baten testuinguruan, irteera-egoerak jarraitzeko eta komandoaren testu-irteera egiaztatzea.
  • Edukiontzian fitxategiak dauden egiaztatzea eta zehaztutako atributuekin bat etortzea.
  • Fitxategien edukien kontrola adierazpen erregularrak erabiliz.
  • Irudi metadatuen egiaztapena (ENV, ENTRYPOINT, VOLUMES eta antzekoak).
  • Lizentziaren bateragarritasuna egiaztatzea.

Fitxategiak edukiontziarekin sinkronizatzea ez da modurik hoberenean egiten: Skaffold-ek iturriekin artxibo bat sortzea besterik ez du egiten, kopiatu eta edukiontzian deskonprimitu (tar instalatu behar da). Hori dela eta, zure zeregin nagusia kodea sinkronizatzea bada, hobe da irtenbide espezializatu batera begiratzea (ksync).

Kubernetesen exekutatzen diren aplikazioen garatzaileentzako tresnak
Skaffold funtzionamenduaren fase nagusiak

Oro har, tresnak ez dizu Kubernetes manifestuetatik abstraitzen uzten eta ez du inolako interaktibitaterik, beraz zaila dirudi menderatzea. Baina hori ere bere abantaila da: ekintza-askatasun handiagoa.

Garden

  • Web; GitHub.
  • GH-ren estatistika laburrak: 1063 izar, 1927 konpromiso, 17 laguntzaile.
  • Hizkuntza: TypeScript (proiektua hainbat osagaitan banatzea aurreikusten da, horietako batzuk Go-n egongo dira, eta SDK bat egitea TypeScript/JavaScript eta Go-n gehigarriak sortzeko).
  • Lizentzia: Apache License 2.0.

Skaffold bezala, Gardenek aplikazio-kodea K8s klusterera bidaltzeko prozesuak automatizatzea du helburu. Horretarako, lehenik eta behin proiektuaren egitura deskribatu behar duzu YAML fitxategi batean, eta ondoren exekutatu komandoa garden dev. Magia guztia egingo du:

  • Bildu proiektuaren hainbat atal dituzten edukiontziak.
  • Integrazio eta unitateko probak egiten ditu, halakorik deskribatu bada.
  • Proiektuaren osagai guztiak klusterera zabaltzen ditu.
  • Iturburu-kodea aldatzen bada, kanalizazio osoa berrabiaraziko du.

Tresna hau erabiltzearen ardatz nagusia urruneko kluster bat garapen talde batekin partekatzea da. Kasu honetan, eraikuntza eta probaren urrats batzuk dagoeneko egin badira, prozesu osoa nabarmen azkartuko du, Gardenek cachean gordetako emaitzak erabili ahal izango baititu.

Proiektu-modulu bat edukiontzi bat, Maven edukiontzi bat, Helm diagrama bat, manifestu bat izan daiteke kubectl apply edo OpenFaaS funtzio bat ere. Gainera, moduluetako edozein urruneko Git biltegitik atera daiteke. Modulu batek zerbitzuak, zereginak eta probak defini ditzake edo ez. Zerbitzuek eta zereginek mendekotasunak izan ditzakete, beraz, zerbitzu jakin baten inplementazio-sekuentzia zehaztu eta zereginen eta proben abiarazte antola dezakezu.

Gardenek erabiltzaileari panel eder bat eskaintzen dio (gaur egun egoera esperimentala), zeinak proiektuaren grafikoa bistaratzen du: osagaiak, muntaia-sekuentzia, atazen eta proben exekuzioa, haien konexioak eta mendekotasunak. Arakatzailean bertan, proiektuaren osagai guztien erregistroak ikus ditzakezu eta osagai jakin batek HTTP bidez zer ateratzen duen egiaztatu (baldin eta, noski, sarrera-baliabide bat deklaratzen bada).

Kubernetesen exekutatzen diren aplikazioen garatzaileentzako tresnak
Lorategirako panela

Tresna honek bero-birkargatzeko modua ere badu, script-aldaketak klusterreko edukiontziarekin sinkronizatzen dituena, aplikazioen arazketa-prozesua asko azkartuz. Lorategiak ona du dokumentazioa eta ez da txarra adibide multzoa, azkar ohitu eta erabiltzen hasteko aukera emanez. Bide batez, duela gutxi argitaratu dugu artikuluaren itzulpena bere egileengandik.

Ondorioa

Jakina, Kubernetes-en aplikazioak garatzeko eta arazketa egiteko tresnen zerrenda hau ez da mugatzen. Merezi duten erabilgarritasun oso erabilgarria eta praktiko gehiago daude, aparteko artikulu bat ez bada, aipamen bat behintzat. Esaiguzu zer erabiltzen duzun, zer arazo aurkitu dituzun eta nola konpondu dituzun!

PS

Irakurri ere gure blogean:

Iturria: www.habr.com

Gehitu iruzkin berria