Mga tool para sa mga developer ng mga application na tumatakbo sa Kubernetes

Mga tool para sa mga developer ng mga application na tumatakbo sa Kubernetes

Ang isang modernong diskarte sa mga operasyon ay nalulutas ang maraming mga problema sa negosyo. Pinapadali ng mga container at orkestrator ang pagsukat ng mga proyekto ng anumang kumplikado, pinapasimple ang pagpapalabas ng mga bagong bersyon, ginagawa itong mas maaasahan, ngunit sa parehong oras ay gumagawa sila ng mga karagdagang problema para sa mga developer. Ang programmer, una sa lahat, ay nagmamalasakit sa kanyang code: arkitektura, kalidad, pagganap, kagandahan - at hindi kung paano ito gagana sa Kubernetes at kung paano ito subukan at i-debug pagkatapos gumawa ng kahit kaunting pagbabago. Samakatuwid, natural din na ang mga tool para sa Kubernetes ay aktibong binuo, na tumutulong upang malutas ang mga problema ng kahit na ang pinaka-"archaic" na mga developer at pinapayagan silang tumuon sa pangunahing bagay.

Ang pagsusuri na ito ay nagbibigay ng maikling impormasyon tungkol sa ilan sa mga tool na nagpapadali sa buhay para sa isang programmer na ang code ay tumatakbo sa pod'ax ng isang Kubernetes cluster.

Mga simpleng katulong

Kubectl-debug

  • Kakanyahan: idagdag ang iyong lalagyan sa isang Pod at tingnan kung ano ang nangyayari dito.
  • GitHub.
  • Maikling istatistika ng GH: 715 star, 54 commit, 9 contributor.
  • Wika: Pumunta ka.
  • Lisensya: Lisensya ng Apache 2.0.

Binibigyang-daan ka ng plugin na ito para sa kubectl na lumikha ng karagdagang container sa loob ng pod ng interes, na magbabahagi ng namespace ng proseso sa iba pang mga container. Dito maaari mong i-debug ang operasyon ng pod: suriin ang network, makinig sa trapiko ng network, gumawa ng isang strace ng proseso ng interes, atbp.

Maaari ka ring lumipat sa lalagyan ng proseso sa pamamagitan ng pagtakbo chroot /proc/PID/root - ito ay maaaring maging napaka-maginhawa kapag kailangan mong kumuha ng root shell sa isang lalagyan kung saan ito ay nakatakda sa manifest securityContext.runAs.

Ang tool ay simple at epektibo, kaya maaari itong maging kapaki-pakinabang sa bawat developer. Sumulat kami ng higit pa tungkol dito sa hiwalay na artikulo.

telepresence

  • Kakanyahan: ilipat ang application sa iyong computer. Bumuo at mag-debug nang lokal.
  • Π‘Π°ΠΉΡ‚; GitHub.
  • Maikling istatistika ng GH: 2131 star, 2712 commit, 33 contributor.
  • Wika: Python.
  • Lisensya: Lisensya ng Apache 2.0.

Ang ideya ng snap-in na ito ay maglunsad ng container na may application sa lokal na computer ng user at i-proxy ang lahat ng trapiko mula sa cluster papunta dito at pabalik. Ang diskarte na ito ay nagbibigay-daan sa iyo upang bumuo ng lokal sa pamamagitan lamang ng pag-edit ng mga file sa iyong paboritong IDE: ang mga resulta ay magagamit kaagad.

Ang mga bentahe ng pagpapatakbo nang lokal ay ang kaginhawahan ng mga pag-edit at mga instant na resulta, ang kakayahang i-debug ang application sa karaniwang paraan. Ang downside ay hinihingi nito ang bilis ng koneksyon, na lalong kapansin-pansin kapag kailangan mong magtrabaho sa isang application na may medyo mataas na RPS at trapiko. Bilang karagdagan, ang Telepresence ay may mga problema sa mga pag-mount ng volume sa Windows, na maaaring maging isang mapagpasyang limitasyon para sa mga developer na sanay sa OS na ito.

Naibahagi na namin ang aming karanasan sa paggamit ng Telepresence dito.

Ksync

  • Kakanyahan: halos madalian na pag-synchronize ng code sa container sa cluster.
  • GitHub.
  • Maikling istatistika ng GH: 555 star, 362 commit, 11 contributor.
  • Wika: Pumunta ka.
  • Lisensya: Lisensya ng Apache 2.0.

Pinapayagan ka ng utility na i-synchronize ang mga nilalaman ng isang lokal na direktoryo sa direktoryo ng isang lalagyan na tumatakbo sa cluster. Ang ganitong tool ay perpekto para sa mga developer sa scripting programming language, na ang pangunahing problema ay ang paghahatid ng code sa isang tumatakbong lalagyan. Ang Ksync ay idinisenyo upang maibsan ang pananakit na ito.

Kapag sinimulan nang isang beses sa pamamagitan ng utos ksync init ang isang DaemonSet ay nilikha sa cluster, na ginagamit upang subaybayan ang estado ng file system ng napiling lalagyan. Sa kanyang lokal na computer, pinapatakbo ng developer ang command ksync watch, na sumusubaybay sa mga configuration at tumatakbo syncthing, na direktang nagsi-synchronize ng mga file sa cluster.

Ang natitira na lang ay upang turuan si ksync kung ano ang i-synchronize sa kung ano. Halimbawa, ang utos na ito:

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

... lilikha ng tagamasid na pinangalanang myprojectna maghahanap ng pod na may label app=backend at subukang i-synchronize ang lokal na direktoryo /home/user/myproject/ may katalogo /var/www/myproject/ sa lalagyan na tinatawag php.

Mga problema at tala sa ksync mula sa aming karanasan:

  • Dapat gamitin sa Kubernetes cluster node overlay2 bilang isang storage driver para sa Docker. Ang utility ay hindi gagana sa sinumang iba pa.
  • Kapag gumagamit ng Windows bilang client OS, maaaring hindi gumana nang tama ang file system watcher. Napansin ang bug na ito kapag nagtatrabaho sa malalaking direktoryo - na may malaking bilang ng mga nested na file at direktoryo. Nilikha namin kaugnay na isyu sa syncthing project, ngunit wala pang pag-unlad dito (mula noong simula ng Hulyo).
  • Gamitin ang file .stignore upang tukuyin ang mga landas o mga pattern ng file na hindi kailangang i-synchronize (halimbawa, mga direktoryo app/cache ΠΈ .git).
  • Bilang default, ire-restart ng ksync ang container sa tuwing nagbabago ang mga file. Para sa Node.js ito ay maginhawa, ngunit para sa PHP ito ay ganap na hindi kailangan. Mas mainam na i-off ang opcache at gamitin ang bandila --reload=false.
  • Maaaring palaging itama ang configuration sa $HOME/.ksync/ksync.yaml.

Kalabasa

  • Kakanyahan: mga proseso ng debug nang direkta sa cluster.
  • GitHub.
  • Maikling istatistika ng GH: 1154 na bituin, 279 commit, 23 taga-ambag.
  • Wika: Pumunta ka.
  • Lisensya: Lisensya ng Apache 2.0.

Idinisenyo ang tool na ito para sa mga proseso ng pag-debug nang direkta sa mga pod. Ang utility ay simple at interactive na nagbibigay-daan sa iyo upang piliin ang nais na debugger (tingnan sa ibaba) at namespace + pod, sa proseso kung saan kailangan mong makialam. Kasalukuyang sinusuportahan:

  • delve - para sa mga Go application;
  • GDB - sa pamamagitan ng target na remote + port forwarding;
  • JDWP port forwarding para sa pag-debug ng mga Java application.

Sa panig ng IDE, ang suporta ay magagamit lamang sa VScode (gamit ang pagpapalawak), gayunpaman, kasama sa mga plano para sa kasalukuyang (2019) na taon ang Eclipse at Intellij.

Upang i-debug ang mga proseso, ang Squash ay nagpapatakbo ng isang privileged container sa mga cluster node, kaya kailangan mo munang maging pamilyar sa mga kakayahan ligtas na mode upang maiwasan ang mga problema sa seguridad.

Mga kumpletong solusyon

Lumipat tayo sa mabibigat na artilerya - mas maraming "malalaking" proyekto na idinisenyo upang agad na matugunan ang marami sa mga pangangailangan ng mga developer.

NB: Sa listahang ito, siyempre, mayroong isang lugar para sa aming Open Source utility werf (dating kilala bilang dapp). Gayunpaman, naisulat at napag-usapan na namin ito nang higit sa isang beses, at samakatuwid ay nagpasya na huwag isama ito sa pagsusuri. Para sa mga nagnanais na maging mas pamilyar sa mga kakayahan nito, inirerekomenda namin ang pagbabasa/pakikinig sa ulat "Ang werf ay ang aming tool para sa CI/CD sa Kubernetes'.

DevSpace

  • Kakanyahan: para sa mga gustong magsimulang magtrabaho sa Kubernetes, ngunit hindi nais na bungkalin nang malalim ang kagubatan nito.
  • GitHub.
  • Maikling istatistika ng GH: 630 bituin, 1912 commit, 13 contributor.
  • Wika: Pumunta ka.
  • Lisensya: Lisensya ng Apache 2.0.

Isang solusyon mula sa kumpanyang may parehong pangalan, na nagbibigay ng mga pinamamahalaang cluster na may Kubernetes para sa pagbuo ng team. Ang utility ay nilikha para sa mga komersyal na cluster, ngunit mahusay na gumagana sa anumang iba pa.

Kapag pinapatakbo ang utos devspace init sa katalogo ng proyekto ay iaalok sa iyo (interactively):

  • pumili ng gumaganang Kubernetes cluster,
  • gamitin ang umiiral Dockerfile (o bumuo ng bago) upang lumikha ng isang lalagyan batay dito,
  • pumili ng isang repository para sa pag-iimbak ng mga imahe ng lalagyan, atbp.

Matapos ang lahat ng mga hakbang na ito sa paghahanda, maaari mong simulan ang pag-unlad sa pamamagitan ng pagpapatakbo ng command devspace dev. Bubuo ito ng container, ia-upload ito sa repository, ilalabas ang deployment sa cluster at sisimulan ang port forwarding at pag-synchronize ng container sa lokal na direktoryo.

Opsyonal, ipo-prompt kang ilipat ang terminal sa lalagyan. Hindi ka dapat tumanggi, dahil sa katotohanan ang lalagyan ay nagsisimula sa utos ng pagtulog, at para sa tunay na pagsubok ang application ay kailangang ilunsad nang manu-mano.

Sa wakas, ang koponan devspace deploy inilalabas ang application at ang nauugnay na imprastraktura sa kumpol, pagkatapos nito ang lahat ay magsisimulang gumana sa combat mode.

Ang lahat ng pagsasaayos ng proyekto ay naka-imbak sa isang file devspace.yaml. Bilang karagdagan sa mga setting ng kapaligiran sa pag-unlad, maaari ka ring makahanap ng isang paglalarawan ng imprastraktura sa loob nito, katulad ng mga karaniwang Kubernetes na manifest, na pinasimple lamang.

Mga tool para sa mga developer ng mga application na tumatakbo sa Kubernetes
Arkitektura at mga pangunahing yugto ng pagtatrabaho sa DevSpace

Bilang karagdagan, madaling magdagdag ng paunang natukoy na bahagi (halimbawa, isang MySQL DBMS) o isang Helm chart sa proyekto. Magbasa nang higit pa sa dokumentasyon - hindi ito kumplikado.

Skaffold

  • Π‘Π°ΠΉΡ‚; GitHub.
  • Maikling istatistika ng GH: 7423 star, 4173 commit, 136 contributor.
  • Wika: Pumunta ka.
  • Lisensya: Lisensya ng Apache 2.0.

Sinasabi ng utility na ito mula sa Google na sumasaklaw sa lahat ng pangangailangan ng isang developer na ang code ay gagana sa isang Kubernetes cluster. Ang pagsisimula sa paggamit nito ay hindi kasingdali ng devspace: walang interactivity, language detection at auto-creation Dockerfile hindi nila ito iaalok sa iyo dito.

Gayunpaman, kung hindi ka nito tinatakot, narito ang pinapayagan ng Skaffold na gawin mo:

  • Subaybayan ang mga pagbabago sa source code.
  • I-synchronize ito sa lalagyan ng pod kung hindi ito nangangailangan ng pagpupulong.
  • Kolektahin ang mga lalagyan na may code, kung ang wika ay binibigyang kahulugan, o mag-compile ng mga artifact at i-pack ang mga ito sa mga lalagyan.
  • Awtomatikong sinusuri gamit ang mga resultang larawan container-structure-test.
  • Pag-tag at pag-upload ng mga larawan sa Docker Registry.
  • Mag-deploy ng application sa isang cluster gamit ang kubectl, Helm o kustomize.
  • Magsagawa ng port forwarding.
  • Debug application na nakasulat sa Java, Node.js, Python.

Ang daloy ng trabaho sa iba't ibang mga pagkakaiba-iba ay ipinahayag na inilarawan sa file skaffold.yaml. Para sa isang proyekto, maaari mo ring tukuyin ang ilang mga profile kung saan maaari mong bahagyang o ganap na baguhin ang mga yugto ng pagpupulong at pag-deploy. Halimbawa, para sa pag-unlad, tukuyin ang isang batayang imahe na maginhawa para sa developer, at para sa pagtatanghal ng dula at produksyon - isang minimal (+ paggamit securityContext container o muling tukuyin ang cluster kung saan ide-deploy ang application).

Ang mga docker container ay maaaring itayo nang lokal o malayuan: sa Google Cloud Build o sa isang cluster gamit Kaniko. Sinusuportahan din ang Bazel at Jib Maven/Gradle. Para sa pag-tag, sinusuportahan ng Skaffold ang maraming mga diskarte: sa pamamagitan ng git commit hash, petsa/oras, sha256-sum ng mga source, atbp.

Hiwalay, ito ay nagkakahalaga ng pagpuna sa posibilidad ng pagsubok ng mga lalagyan. Ang nabanggit na container-structure-test framework ay nag-aalok ng mga sumusunod na paraan ng pag-verify:

  • Pagpapatupad ng mga command sa konteksto ng isang container na may mga tracking exit status at pagsuri sa text output ng command.
  • Sinusuri ang presensya ng mga file sa lalagyan at tumutugma sa mga katangiang tinukoy.
  • Kontrol ng mga nilalaman ng file gamit ang mga regular na expression.
  • Pag-verify ng metadata ng larawan (ENV, ENTRYPOINT, VOLUMES atbp.)
  • Sinusuri ang pagiging tugma sa lisensya.

Ang pag-synchronize ng mga file sa lalagyan ay hindi isinasagawa sa pinakamainam na paraan: Gumagawa lamang ang Skaffold ng isang archive na may mga mapagkukunan, kinokopya ito at i-unpack ito sa lalagyan (dapat i-install ang tar). Samakatuwid, kung ang iyong pangunahing gawain ay ang pag-synchronize ng code, mas mahusay na tumingin patungo sa isang dalubhasang solusyon (ksync).

Mga tool para sa mga developer ng mga application na tumatakbo sa Kubernetes
Mga pangunahing yugto ng pagpapatakbo ng Skaffold

Sa pangkalahatan, hindi ka pinapayagan ng tool na mag-abstract mula sa mga manifest ng Kubernetes at walang anumang interaktibidad, kaya maaaring mukhang mahirap na makabisado. Ngunit ito rin ang kalamangan nito - higit na kalayaan sa pagkilos.

Hardin

  • Π‘Π°ΠΉΡ‚; GitHub.
  • Maikling istatistika ng GH: 1063 star, 1927 commit, 17 contributor.
  • Wika: TypeScript (Plano itong hatiin ang proyekto sa ilang bahagi, ang ilan sa mga ito ay nasa Go, at gumawa din ng SDK para sa paglikha ng mga add-on sa TypeScript/JavaScript at Go).
  • Lisensya: Lisensya ng Apache 2.0.

Tulad ng Skaffold, layunin ng Garden na i-automate ang mga proseso ng paghahatid ng code ng aplikasyon sa cluster ng K8s. Upang gawin ito, kailangan mo munang ilarawan ang istraktura ng proyekto sa isang YAML file, at pagkatapos ay patakbuhin ang command garden dev. Gagawin niya ang lahat ng mahika:

  • Mangolekta ng mga lalagyan na may iba't ibang bahagi ng proyekto.
  • Nagsasagawa ng integration at mga unit test, kung mayroon man na inilarawan.
  • Inilalabas ang lahat ng bahagi ng proyekto sa cluster.
  • Kung magbabago ang source code, ire-restart nito ang buong pipeline.

Ang pangunahing pokus ng paggamit ng tool na ito ay ang pagbabahagi ng remote cluster sa isang development team. Sa kasong ito, kung ang ilan sa mga hakbang sa pagbuo at pagsubok ay nagawa na, ito ay makabuluhang mapabilis ang buong proseso, dahil magagamit ng Garden ang mga naka-cache na resulta.

Ang isang module ng proyekto ay maaaring isang lalagyan, isang lalagyan ng Maven, isang Helm chart, isang manifest para sa kubectl apply o kahit isang OpenFaaS function. Bukod dito, ang alinman sa mga module ay maaaring makuha mula sa isang malayong Git repository. Maaaring tukuyin o hindi ng isang module ang mga serbisyo, gawain, at pagsubok. Maaaring magkaroon ng mga dependency ang mga serbisyo at gawain, para matukoy mo ang pagkakasunud-sunod ng deployment ng isang partikular na serbisyo at ayusin ang paglulunsad ng mga gawain at pagsubok.

Ang Garden ay nagbibigay sa user ng magandang dashboard (kasalukuyang nasa pang-eksperimentong estado), na nagpapakita ng graph ng proyekto: mga bahagi, pagkakasunud-sunod ng pagpupulong, pagsasagawa ng mga gawain at pagsubok, ang kanilang mga koneksyon at dependency. Sa browser mismo, maaari mong tingnan ang mga log ng lahat ng mga bahagi ng proyekto at suriin kung ano ang output ng isang partikular na bahagi sa pamamagitan ng HTTP (kung, siyempre, isang mapagkukunan ng pagpasok ay ipinahayag para dito).

Mga tool para sa mga developer ng mga application na tumatakbo sa Kubernetes
Panel para sa Hardin

Ang tool na ito ay mayroon ding hot-reload mode, na nagsi-synchronize lamang ng mga pagbabago sa script sa container sa cluster, na lubos na nagpapabilis sa proseso ng pag-debug ng application. Maganda ang hardin ang babasahin at hindi masama hanay ng mga halimbawa, na nagbibigay-daan sa iyong mabilis na masanay dito at simulang gamitin ito. Nga pala, kamakailan lang ay na-publish namin pagsasalin ng artikulo mula sa mga may-akda nito.

Konklusyon

Siyempre, ang listahang ito ng mga tool para sa pagbuo at pag-debug ng mga application sa Kubernetes ay hindi limitado sa. Marami pang napaka-kapaki-pakinabang at praktikal na mga kagamitan na karapat-dapat, kung hindi isang hiwalay na artikulo, pagkatapos ay isang pagbanggit. Sabihin sa amin kung ano ang iyong ginagamit, anong mga problema ang iyong naranasan at kung paano mo nalutas ang mga ito!

PS

Basahin din sa aming blog:

Pinagmulan: www.habr.com

Magdagdag ng komento