Työkalut Kubernetes-sovellusten kehittäjille

Työkalut Kubernetes-sovellusten kehittäjille

Moderni toimintatapa ratkaisee monia kiireellisiä liiketoimintaongelmia. Kontit ja orkestroijat helpottavat minkä tahansa monimutkaisten projektien skaalaamista, yksinkertaistavat uusien versioiden julkaisemista, tekevät niistä luotettavampia, mutta samalla ne aiheuttavat lisäongelmia kehittäjille. Ohjelmoija välittää ensinnäkin koodistaan: arkkitehtuurista, laadusta, suorituskyvystä, eleganssista - eikä siitä, miten se toimii Kubernetesissa ja miten se testataan ja vianjäljitetään vähäistenkin muutosten jälkeen. Siksi on myös aivan luonnollista, että Kubernetesille kehitetään aktiivisesti työkaluja, jotka auttavat ratkaisemaan jopa "arkaaisimpien" kehittäjien ongelmia ja antavat heidän keskittyä pääasiaan.

Tämä katsaus tarjoaa lyhyttä tietoa joistakin työkaluista, jotka helpottavat ohjelmoijan elämää, jonka koodi toimii Kubernetes-klusterin pod'axissa.

Yksinkertaiset apulaiset

Kubectl-debug

  • Alarivi: lisää säiliösi Podiin ja katso, mitä siinä tapahtuu.
  • GitHub.
  • Lyhyet GH-tilastot: 715 tähteä, 54 sitoutumista, 9 osallistujaa.
  • Kieli: Mene.
  • Lisenssi: Apache License 2.0.

Tämän kubectlin laajennuksen avulla voit luoda ylimääräisen säilön kiinnostuksen kohteena olevaan podiin, joka jakaa prosessin nimitilan muiden säilöjen kanssa. Siinä voit tehdä virheenkorjauksen podin toiminnasta: tarkistaa verkkoa, kuunnella verkkoliikennettä, seurata kiinnostavaa prosessia jne.

Voit myös vaihtaa prosessisäiliöön suorittamalla chroot /proc/PID/root - Tämä voi olla erittäin kätevää, kun haluat saada juurikuoren säiliöön, jolle se on asetettu luettelossa securityContext.runAs.

Työkalu on yksinkertainen ja tehokas, joten siitä voi olla hyötyä jokaiselle kehittäjälle. Kirjoitimme siitä lisää vuonna erillinen artikkeli.

Telepresence

  • Alarivi: siirrä sovellus tietokoneellesi. Kehitä ja korjaa paikallisesti.
  • Paikka; GitHub.
  • Lyhyet GH-tilastot: 2131 tähteä, 2712 sitoutumista, 33 osallistujaa.
  • Kieli: Python.
  • Lisenssi: Apache License 2.0.

Tämän laajennuksen ideana on käynnistää kontti sovelluksen kanssa paikallisen käyttäjän tietokoneella ja välittää kaikki liikenne klusterista siihen ja takaisin. Tämän lähestymistavan avulla voit kehittää paikallisesti yksinkertaisesti muokkaamalla tiedostoja suosikki-IDE:ssäsi: tulokset ovat heti saatavilla.

Paikallisen käytön etuja ovat muokkausten helppous ja välittömät tulokset sekä mahdollisuus suorittaa sovelluksen virheenkorjaus tavalliseen tapaan. Huono puoli on vaativa yhteysnopeuden suhteen, mikä on erityisen havaittavissa, kun joudut työskentelemään sovelluksen kanssa, jolla on melko korkea RPS ja liikenne. Lisäksi Telepresencellä on ongelmia Windowsin volyymiliitäntöjen kanssa, mikä voi olla ratkaiseva rajoitus tähän käyttöjärjestelmään tottuneille kehittäjille.

Olemme jo jakaneet kokemuksemme Telepresencen käytöstä täällä.

Ksync

  • Alarivi: lähes välitön koodin synkronointi klusterin säilön kanssa.
  • GitHub.
  • Lyhyet GH-tilastot: 555 tähteä, 362 sitoutumista, 11 osallistujaa.
  • Kieli: Mene.
  • Lisenssi: Apache License 2.0.

Apuohjelman avulla voit synkronoida paikallisen hakemiston sisällön klusterissa olevan säilön hakemiston kanssa. Tällainen työkalu on täydellinen skriptiohjelmointikielten kehittäjille, joiden pääongelma on koodin toimittaminen käynnissä olevaan konttiin. Ksync on suunniteltu lievittämään tätä päänsärkyä.

Kun alustetaan kerran komennolla ksync init klusteriin luodaan DaemonSet, jonka avulla valvotaan valitun säilön tiedostojärjestelmän tilaa. Paikallisessa tietokoneessaan kehittäjä suorittaa komennon ksync watch, joka valvoo kokoonpanoja ja toimii syncthing, joka synkronoi tiedostot suoraan klusterin kanssa.

Jäljelle jää vain ohjeistaa ksync, mitä synkronoida minkä kanssa. Esimerkiksi tämä komento:

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

...luo tarkkailijan nimeltä myprojectjoka etsii koteloa, jossa on etiketti app=backend ja yritä synkronoida paikallinen hakemisto /home/user/myproject/ katalogin kanssa /var/www/myproject/ kutsutussa kontissa php.

Kokemuksemme ksync-ongelmat ja huomautukset:

  • On käytettävä Kubernetes-klusterin solmuissa overlay2 Dockerin tallennusohjaimena. Apuohjelma ei toimi muiden kanssa.
  • Kun Windowsia käytetään asiakaskäyttöjärjestelmänä, tiedostojärjestelmän tarkkailija ei ehkä toimi oikein. Tämä virhe havaittiin työskennellessäsi suurten hakemistojen kanssa - joissa oli suuri määrä sisäkkäisiä tiedostoja ja hakemistoja. Me loimme relevantti kysymys synkronointiprojektissa, mutta siinä ei ole vielä edistytty (heinäkuun alusta).
  • Käytä tiedostoa .stignore määrittää polkuja tai tiedostomalleja, joita ei tarvitse synkronoida (esimerkiksi hakemistot app/cache и .git).
  • Oletuksena ksync käynnistää säilön uudelleen aina, kun tiedostot muuttuvat. Node.js:lle tämä on kätevää, mutta PHP:lle täysin tarpeetonta. On parempi sammuttaa opcache ja käyttää lippua --reload=false.
  • Kokoonpanoa voidaan aina korjata $HOME/.ksync/ksync.yaml.

squash

  • Alarivi: virheenkorjausprosessit suoraan klusterissa.
  • GitHub.
  • Lyhyet GH-tilastot: 1154 tähteä, 279 sitoutumista, 23 osallistujaa.
  • Kieli: Mene.
  • Lisenssi: Apache License 2.0.

Tämä työkalu on suunniteltu prosessien virheenkorjaukseen suoraan podissa. Apuohjelma on yksinkertainen ja antaa sinun valita vuorovaikutteisesti haluamasi debuggerin (Katso alempaa) ja nimiavaruus + pod, jonka prosessiin sinun on puututtava. Tällä hetkellä tuettu:

  • delve - Go-sovelluksille;
  • GDB - kohdekaukosäätimen + portin edelleenlähetyksen kautta;
  • JDWP-portin edelleenohjaus Java-sovellusten virheenkorjausta varten.

IDE-puolella tuki on saatavilla vain VScodessa (käyttäen laajeneminenkuluvan vuoden (2019) suunnitelmiin kuuluvat kuitenkin Eclipse ja Intellij.

Prosessien virheenkorjausta varten Squash käyttää etuoikeutettua säilöä klusterin solmuissa, joten sinun on ensin tutustuttava ominaisuuksiin turva tila turvallisuusongelmien välttämiseksi.

Täydelliset ratkaisut

Siirrytään raskaaseen tykistöyn - enemmän "suuren mittakaavan" projekteihin, jotka on suunniteltu vastaamaan välittömästi moniin kehittäjien tarpeisiin.

NB: Tässä luettelossa on tietysti paikka avoimen lähdekoodin apuohjelmallemme werf (tunnetaan aiemmin nimellä dapp). Olemme kuitenkin jo kirjoittaneet ja puhuneet siitä useammin kuin kerran, ja siksi päätimme olla sisällyttämättä sitä arvosteluun. Niille, jotka haluavat tutustua sen ominaisuuksiin paremmin, suosittelemme lukemaan/kuuntelemaan raportin "werf on Kubernetesin CI/CD-työkalumme'.

DevSpace

  • Alarivi: niille, jotka haluavat aloittaa työt Kubernetesissa, mutta eivät halua sukeltaa syvälle sen viidakkoon.
  • GitHub.
  • Lyhyet GH-tilastot: 630 tähteä, 1912 sitoumusta, 13 osallistujaa.
  • Kieli: Mene.
  • Lisenssi: Apache License 2.0.

Samannimisen yrityksen ratkaisu, joka tarjoaa hallittuja klustereita Kubernetesilla tiimin kehittämiseen. Apuohjelma luotiin kaupallisille klusteille, mutta se toimii loistavasti muiden kanssa.

Kun suoritat komentoa devspace init projektiluettelossa sinulle tarjotaan (interaktiivisesti):

  • valitse toimiva Kubernetes-klusteri,
  • Käytä olemassaolevaa Dockerfile (tai luo uusi) luodaksesi säilön sen perusteella,
  • valitse arkisto konttikuvien tallentamista varten jne.

Kaikkien näiden valmisteluvaiheiden jälkeen voit aloittaa kehityksen suorittamalla komennon devspace dev. Se rakentaa säilön, lataa sen arkistoon, ottaa käyttöönoton klusteriin ja aloittaa portin edelleenlähetyksen ja säilön synkronoinnin paikallisen hakemiston kanssa.

Vaihtoehtoisesti sinua pyydetään siirtämään terminaali säiliöön. Ei kannata kieltäytyä, koska todellisuudessa kontti alkaa uni-komennolla ja todellista testausta varten sovellus on käynnistettävä manuaalisesti.

Lopuksi joukkue devspace deploy julkaisee sovelluksen ja siihen liittyvän infrastruktuurin klusteriin, minkä jälkeen kaikki alkaa toimia taistelutilassa.

Kaikki projektin asetukset tallennetaan tiedostoon devspace.yaml. Kehitysympäristön asetusten lisäksi sieltä löytyy myös Kubernetesin standardiluetteloiden kaltainen kuvaus infrastruktuurista, vain huomattavasti yksinkertaistettuna.

Työkalut Kubernetes-sovellusten kehittäjille
Arkkitehtuuri ja DevSpacen kanssa työskentelyn päävaiheet

Lisäksi projektiin on helppo lisätä ennalta määritetty komponentti (esim. MySQL DBMS) tai Helm-kaavio. Lue lisää kohdasta dokumentointi - se ei ole monimutkaista.

Scaffold

  • Paikka; GitHub.
  • Lyhyet GH-tilastot: 7423 tähteä, 4173 sitoutumista, 136 osallistujaa.
  • Kieli: Mene.
  • Lisenssi: Apache License 2.0.

Tämä Googlen apuohjelma väittää kattavan kaikki sellaisen kehittäjän tarpeet, jonka koodi toimii jotenkin Kubernetes-klusterissa. Sen käytön aloittaminen ei ole yhtä helppoa kuin devspace: ei interaktiivisuutta, kielentunnistusta ja automaattista luomista Dockerfile he eivät tarjoa sitä sinulle täällä.

Jos tämä ei kuitenkaan pelota sinua, Skaffold antaa sinun tehdä tässä:

  • Seuraa lähdekoodin muutoksia.
  • Synkronoi se kotelon kanssa, jos se ei vaadi kokoamista.
  • Kerää kontit koodilla, jos kieltä tulkitaan, tai kokoa esineitä ja pakkaa ne kontteihin.
  • Tuloksena olevat kuvat tarkistetaan automaattisesti käyttämällä säiliön rakennetesti.
  • Kuvien merkitseminen ja lähettäminen Docker-rekisteriin.
  • Ota sovellus käyttöön klusterissa kubectlin, Helmin tai kustomizen avulla.
  • Suorita portin edelleenohjaus.
  • Java-, Node.js-, Python-kielillä kirjoitetut vianetsintäsovellukset.

Työnkulku eri muunnelmissa on kuvattu deklaratiivisesti tiedostossa skaffold.yaml. Projektille voit myös määrittää useita profiileja, joissa voit muuttaa kokoonpano- ja käyttöönottovaiheita osittain tai kokonaan. Määritä esimerkiksi kehitystä varten kehittäjälle sopiva peruskuva ja lavastusta ja tuotantoa varten - minimikuva (+ käyttö securityContext säilöt tai määritä uudelleen klusteri, jossa sovellus otetaan käyttöön).

Docker-kontit voidaan rakentaa paikallisesti tai etänä: sisään Google Cloud Build tai klusterissa käyttäen Kaniko. Bazel ja Jib Maven/Gradle ovat myös tuettuja. Koodauksessa Skaffold tukee monia strategioita: git commit hash, päivämäärä/aika, sha256-lähteiden summa jne.

Erikseen on syytä huomata mahdollisuus testata säiliöitä. Jo mainittu säiliörakennetestikehys tarjoaa seuraavat varmennusmenetelmät:

  • Suoritetaan komentoja säilön kontekstissa, jossa seurataan poistumistiloja ja tarkistetaan komennon tekstitulostus.
  • Säilön tiedostojen läsnäolon tarkistaminen ja määritettyjen määritteiden vastaavuus.
  • Tiedoston sisällön hallinta säännöllisten lausekkeiden avulla.
  • Kuvan metatietojen vahvistus (ENV, ENTRYPOINT, VOLUMES jne.).
  • Tarkistetaan lisenssien yhteensopivuutta.

Tiedostojen synkronointi kontin kanssa ei tapahdu parhaalla mahdollisella tavalla: Skaffold luo yksinkertaisesti arkiston lähteiden kanssa, kopioi sen ja purkaa sen säiliöön (tar täytyy asentaa). Siksi, jos päätehtäväsi on koodin synkronointi, on parempi etsiä erikoistuneita ratkaisuja (ksync).

Työkalut Kubernetes-sovellusten kehittäjille
Skaffoldin toiminnan päävaiheet

Yleensä työkalu ei salli sinun abstraktoida Kubernetes-luetteloista, eikä siinä ole interaktiivisuutta, joten sen hallitseminen voi tuntua vaikealta. Mutta tämä on myös sen etu - suurempi toimintavapaus.

Puutarha

  • Paikka; GitHub.
  • Lyhyet GH-tilastot: 1063 tähteä, 1927 sitoutumista, 17 osallistujaa.
  • Kieli: TypeScript (projekti on tarkoitus jakaa useisiin komponentteihin, joista osa tulee olemaan Gossa, ja myös tehdä SDK lisäosien luomiseen TypeScriptissä/JavaScriptissä ja Gossa).
  • Lisenssi: Apache License 2.0.

Skaffoldin tavoin Garden pyrkii automatisoimaan sovelluskoodin toimittamisen K8s-klusteriin. Tätä varten sinun on ensin kuvattava projektin rakenne YAML-tiedostossa ja suoritettava sitten komento garden dev. Hän tekee kaiken taian:

  • Kerää kontit projektin eri osien kanssa.
  • Suorittaa integraatio- ja yksikkötestejä, jos sellaisia ​​on kuvattu.
  • Siirtää kaikki projektin komponentit klusteriin.
  • Jos lähdekoodi muuttuu, se käynnistää koko liukuhihnan uudelleen.

Tämän työkalun käytön pääpaino on etäklusterin jakaminen kehitystiimin kanssa. Tässä tapauksessa, jos osa rakennus- ja testausvaiheista on jo tehty, tämä nopeuttaa huomattavasti koko prosessia, koska Garden pystyy käyttämään välimuistissa olevia tuloksia.

Projektimoduuli voi olla kontti, Maven-säiliö, Helm-kaavio tai manifesti kubectl apply tai jopa OpenFaaS-funktio. Lisäksi mikä tahansa moduuleista voidaan vetää Git-etävarastosta. Moduuli voi määrittää palveluita, tehtäviä ja testejä tai ei. Palveluilla ja tehtävillä voi olla riippuvuuksia, joten voit määrittää tietyn palvelun käyttöönottojärjestyksen ja järjestää tehtävien ja testien käynnistämisen.

Garden tarjoaa käyttäjälle kauniin kojelaudan (tällä hetkellä käytössä kokeellinen tila), joka näyttää projektikaavion: komponentit, kokoonpanojärjestys, tehtävien ja testien suoritus, niiden kytkennät ja riippuvuudet. Suoraan selaimessa voit tarkastella kaikkien projektikomponenttien lokeja ja tarkistaa, mitä tietty komponentti tuottaa HTTP:n kautta (jos tietysti sille on ilmoitettu sisääntuloresurssi).

Työkalut Kubernetes-sovellusten kehittäjille
Paneeli puutarhaan

Tässä työkalussa on myös hot-reload-tila, joka yksinkertaisesti synkronoi komentosarjan muutokset klusterin säilön kanssa, mikä nopeuttaa huomattavasti sovellusten virheenkorjausprosessia. Puutarhassa on hyvä dokumentointi eikä paha joukko esimerkkejä, jonka avulla voit nopeasti tottua siihen ja alkaa käyttää sitä. Muuten, julkaisimme äskettäin artikkelin käännös sen kirjoittajilta.

Johtopäätös

Tämä luettelo työkaluista sovellusten kehittämiseen ja virheenkorjaukseen Kubernetesissa ei tietenkään rajoitu. On monia muita erittäin hyödyllisiä ja käytännöllisiä apuohjelmia, jotka ansaitsevat, jos ei erillisen artikkelin, niin ainakin mainitsemisen. Kerro meille, mitä käytät, mitä ongelmia kohtasit ja miten ratkaisit ne!

PS.

Lue myös blogistamme:

Lähde: will.com

Lisää kommentti