Mga himan alang sa mga nag-develop sa mga aplikasyon nga nagdagan sa Kubernetes

Mga himan alang sa mga nag-develop sa mga aplikasyon nga nagdagan sa Kubernetes

Ang usa ka modernong pamaagi sa mga operasyon nakasulbad sa daghang mga dinalian nga mga problema sa negosyo. Ang mga sudlanan ug mga orkestra nagpasayon ​​sa pag-scale sa mga proyekto sa bisan unsang pagkakomplikado, pagpayano sa pagpagawas sa mga bag-ong bersyon, paghimo kanila nga mas kasaligan, apan sa samang higayon naghimo sila og dugang nga mga problema alang sa mga developers. Ang programmer, una sa tanan, nagpakabana sa iyang code: arkitektura, kalidad, pasundayag, kaanyag - ug dili kung giunsa kini molihok sa Kubernetes ug kung giunsa kini pagsulay ug pag-debug pagkahuman sa paghimo bisan gamay nga pagbag-o. Busa, natural usab nga ang mga himan alang sa Kubernetes aktibo nga gipalambo, nga nagtabang sa pagsulbad sa mga problema bisan sa labing "karaan" nga mga developer ug gitugotan sila nga magpunting sa panguna nga butang.

Kini nga pagrepaso naghatag ug mubo nga impormasyon bahin sa pipila ka mga himan nga makapasayon ​​sa kinabuhi sa usa ka programmer kansang code nagdagan sa pod'ax sa usa ka Kubernetes cluster.

Simple nga mga katabang

Kubectl-debug

  • Ang ilawom nga linya: idugang ang imong sudlanan sa usa ka Pod ug tan-awa kung unsa ang mahitabo niini.
  • GitHub.
  • Mubo nga estadistika sa GH: 715 ka bituon, 54 ka pasalig, 9 ka tigtampo.
  • Pinulongan: Lakaw.
  • Lisensya: Lisensya sa Apache 2.0.

Kini nga plugin alang sa kubectl nagtugot kanimo sa paghimo og dugang nga sudlanan sa sulod sa pod sa interes, nga mopaambit sa proseso nga namespace sa ubang mga sudlanan. Diha niini mahimo nimong i-debug ang operasyon sa pod: susihon ang network, paminaw sa trapiko sa network, paghimo og usa ka strace sa proseso sa interes, ug uban pa.

Mahimo ka usab nga mobalhin sa sudlanan sa proseso pinaagi sa pagdagan chroot /proc/PID/root - kini mahimong sayon ​​​​kaayo kung kinahanglan nimo nga makakuha usa ka kabhang sa ugat sa usa ka sudlanan diin kini gibutang sa manifest securityContext.runAs.

Ang himan yano ug epektibo, aron kini mahimong mapuslanon sa matag developer. Gisulat namon ang dugang bahin niini sa lahi nga artikulo.

Pagkalain sa kaugalingon

  • Ang ilawom nga linya: ibalhin ang aplikasyon sa imong kompyuter. Pagpalambo ug pag-debug sa lokal.
  • Сайт; GitHub.
  • Mubo nga mga estadistika sa GH: 2131 ka bituon, 2712 ka pasalig, 33 ka kontribyutor.
  • Pinulongan: Python.
  • Lisensya: Lisensya sa Apache 2.0.

Ang ideya sa kini nga snap-in mao ang paglansad sa usa ka sudlanan nga adunay aplikasyon sa lokal nga kompyuter sa tiggamit ug i-proxy ang tanan nga trapiko gikan sa cluster ngadto niini ug pabalik. Kini nga pamaagi nagtugot kanimo sa pagpalambo sa lokal pinaagi lamang sa pag-edit sa mga file sa imong paborito nga IDE: ang mga resulta magamit dayon.

Ang mga bentaha sa pagdagan sa lokal mao ang kasayon ​​​​sa mga pag-edit ug dayon nga mga resulta, ang abilidad sa pag-debug sa aplikasyon sa naandan nga paagi. Ang downside mao nga kini nangayo sa katulin sa koneksyon, nga labi ka mamatikdan kung kinahanglan nimo nga magtrabaho sa usa ka aplikasyon nga adunay taas nga RPS ug trapiko. Dugang pa, ang Telepresence adunay mga problema sa pag-mount sa volume sa Windows, nga mahimo’g usa ka mahukmanon nga limitasyon alang sa mga developer nga naanad sa kini nga OS.

Gipaambit na namo ang among kasinatian sa paggamit sa Telepresence dinhi.

Ksync

  • Ang ilawom nga linya: hapit dihadiha nga pag-synchronize sa code sa sudlanan sa cluster.
  • GitHub.
  • Mubo nga estadistika sa GH: 555 ka bituon, 362 ka pasalig, 11 ka tigtampo.
  • Pinulongan: Lakaw.
  • Lisensya: Lisensya sa Apache 2.0.

Gitugotan ka sa utility nga i-synchronize ang mga sulud sa usa ka lokal nga direktoryo sa direktoryo sa usa ka sudlanan nga nagdagan sa cluster. Ang ingon nga himan perpekto alang sa mga nag-develop sa scripting programming language, kansang panguna nga problema mao ang paghatud sa code sa usa ka nagdagan nga sudlanan. Gidisenyo ang Ksync aron mahupay kini nga labad sa ulo.

Kung gisugdan sa makausa pinaagi sa mando ksync init usa ka DaemonSet ang gihimo sa cluster, nga gigamit sa pagmonitor sa kahimtang sa file system sa pinili nga sudlanan. Sa iyang lokal nga kompyuter, ang developer nagpadagan sa mando ksync watch, nga nagmonitor sa mga configuration ug run syncthing, nga direktang nag-synchronize sa mga file sa cluster.

Ang nahabilin mao ang pagtudlo sa ksync kung unsa ang i-synchronize sa kung unsa. Pananglitan, kini nga sugo:

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

...maghimo ug watcher nga ginganlan myprojectnga mangita pod ug label app=backend ug pagsulay sa pag-synchronize sa lokal nga direktoryo /home/user/myproject/ uban sa katalogo /var/www/myproject/ sa sudlanan nga gitawag php.

Mga problema ug mga nota sa ksync gikan sa among kasinatian:

  • Kinahanglang gamiton sa Kubernetes cluster node overlay2 ingon usa ka drayber sa pagtipig alang sa Docker. Ang utility dili molihok sa uban.
  • Kung gigamit ang Windows isip OS sa kliyente, ang tigbantay sa file system mahimong dili molihok sa husto. Namatikdan kini nga bug sa dihang nagtrabaho uban ang dagkong mga direktoryo - nga adunay daghang gidaghanon sa mga salag nga mga file ug mga direktoryo. Among gibuhat may kalabutan nga isyu sa syncthing nga proyekto, apan wala pa'y pag-uswag niini (sukad sa pagsugod sa Hulyo).
  • Gamita ang file .stignore aron matino ang mga agianan o mga pattern sa file nga dili kinahanglan nga i-synchronize (pananglitan, mga direktoryo app/cache и .git).
  • Sa kasagaran, ang ksync mag-restart sa sudlanan kung magbag-o ang mga file. Alang sa Node.js kini sayon, apan alang sa PHP kini hingpit nga wala kinahanglana. Mas maayo nga i-off ang opcache ug gamiton ang bandila --reload=false.
  • Ang configuration mahimong matul-id kanunay sa $HOME/.ksync/ksync.yaml.

Kalabasa

  • Ang ilawom nga linya: debug nga mga proseso direkta sa cluster.
  • GitHub.
  • Mubo nga estadistika sa GH: 1154 ka bituon, 279 ka pasalig, 23 ka tigtampo.
  • Pinulongan: Lakaw.
  • Lisensya: Lisensya sa Apache 2.0.

Kini nga himan gidisenyo alang sa pag-debug sa mga proseso direkta sa pods. Ang utility yano ug interactive nga nagtugot kanimo sa pagpili sa gusto nga debugger (Tan-awa sa ubos) ug namespace + pod, sa proseso nga kinahanglan nimo nga mangilabot. Gisuportahan karon:

  • delve - alang sa mga aplikasyon sa Go;
  • GDB - pinaagi sa target remote + port forwarding;
  • JDWP port forwarding para sa pag-debug sa mga aplikasyon sa Java.

Sa bahin sa IDE, ang suporta magamit ra sa VScode (gamit pagpalapad), bisan pa, ang mga plano alang sa karon (2019) nga tuig naglakip sa Eclipse ug Intellij.

Aron ma-debug ang mga proseso, ang Squash nagpadagan ug usa ka pribilihiyo nga sudlanan sa mga cluster node, mao nga kinahanglan nimo nga pamilyar ang imong kaugalingon sa mga kapabilidad. luwas nga paagi aron malikayan ang mga problema sa seguridad.

Kompleto nga mga solusyon

Mopadayon kita sa bug-at nga artilerya - daghang mga "dagko nga" proyekto nga gidisenyo aron matubag dayon ang daghang mga panginahanglanon sa mga developer.

NB: Sa kini nga lista, siyempre, adunay usa ka lugar alang sa among Open Source utility werf (kanhi nailhan nga dapp). Bisan pa, kami nagsulat ug naghisgot bahin niini labaw pa sa kausa, ug busa nakahukom nga dili iapil kini sa pagrepaso. Alang niadtong gusto nga mahimong mas pamilyar sa mga kapabilidad niini, among girekomendar ang pagbasa/pagpaminaw sa report “Ang werf mao ang among himan alang sa CI/CD sa Kubernetes".

DevSpace

  • Ang ilawom nga linya: alang sa mga gusto magsugod sa pagtrabaho sa Kubernetes, apan dili gusto nga mag-unlod sa ilang kalasangan.
  • GitHub.
  • Mubo nga estadistika sa GH: 630 ka bituon, 1912 mipasalig, 13 ka tigtampo.
  • Pinulongan: Lakaw.
  • Lisensya: Lisensya sa Apache 2.0.

Usa ka solusyon gikan sa kompanya sa parehas nga ngalan, nga naghatag gidumala nga mga cluster sa Kubernetes alang sa pagpauswag sa team. Ang utility gihimo alang sa komersyal nga mga pungpong, apan maayo kaayo sa uban pa.

Sa diha nga nagdagan sa sugo devspace init sa katalogo sa proyekto itanyag ka (interactive):

  • pagpili og nagtrabaho nga Kubernetes cluster,
  • gamita ang anaa Dockerfile (o paghimo og bag-o) aron makahimo og sudlanan nga gibase niini,
  • pagpili og repository alang sa pagtipig sa mga hulagway sa sudlanan, ug uban pa.

Pagkahuman sa tanan nga mga lakang sa pag-andam, mahimo ka magsugod sa pag-uswag pinaagi sa pagpadagan sa mando devspace dev. Kini magtukod sa sudlanan, i-upload kini sa repository, i-roll out ang deployment sa cluster ug magsugod sa port forwarding ug pag-synchronize sa sudlanan sa lokal nga direktoryo.

Opsyonal, aghaton ka nga ibalhin ang terminal sa sudlanan. Kinahanglan nga dili ka magdumili, tungod kay sa tinuud ang sudlanan nagsugod sa mando sa pagkatulog, ug alang sa tinuud nga pagsulay ang aplikasyon kinahanglan nga ilunsad nga mano-mano.

Sa katapusan, ang team devspace deploy gilansad ang aplikasyon ug ang kauban nga imprastraktura sa kumpol, pagkahuman ang tanan nagsugod sa paglihok sa mode sa kombat.

Ang tanan nga configuration sa proyekto gitipigan sa usa ka file devspace.yaml. Gawas pa sa mga setting sa palibot sa pag-uswag, makit-an usab nimo ang usa ka paghulagway sa imprastraktura sa sulod niini, susama sa mga standard nga gipakita sa Kubernetes, gipasimple lang kaayo.

Mga himan alang sa mga nag-develop sa mga aplikasyon nga nagdagan sa Kubernetes
Arkitektura ug nag-unang yugto sa pagtrabaho kauban ang DevSpace

Dugang pa, dali ra ang pagdugang usa ka gitakda nang daan nga sangkap (pananglitan, usa ka MySQL DBMS) o usa ka tsart sa Helm sa proyekto. Basaha ang dugang sa dokumentasyon - dili kini komplikado.

Skaffold

  • Сайт; GitHub.
  • Mubo nga estadistika sa GH: 7423 ka bituon, 4173 ka pasalig, 136 ka tigtampo.
  • Pinulongan: Lakaw.
  • Lisensya: Lisensya sa Apache 2.0.

Ang kini nga utility gikan sa Google nag-angkon nga gisakup ang tanan nga mga panginahanglanon sa usa ka developer kansang code sa usa ka paagi modagan sa usa ka Kubernetes cluster. Ang pagsugod sa paggamit niini dili sama kasayon ​​sa devspace: walay interaktibidad, detection sa pinulongan ug auto-creation Dockerfile dili nila kini itanyag kanimo dinhi.

Bisan pa, kung dili kini makapahadlok kanimo, ania ang gitugotan sa Skaffold nga buhaton nimo:

  • Pagsubay sa mga pagbag-o sa source code.
  • I-synchronize kini sa sudlanan sa pod kung wala kini magkinahanglan og asembliya.
  • Pagkolekta sa mga sudlanan nga adunay code, kung ang pinulongan gihubad, o pag-compile sa mga artifact ug ibutang kini sa mga sudlanan.
  • Ang resulta nga mga imahe awtomatikong gisusi gamit container-structure-test.
  • Pag-tag ug pag-upload sa mga imahe sa Docker Registry.
  • I-deploy ang aplikasyon sa cluster gamit ang kubectl, Helm o kustomize.
  • Ipahigayon ang port forwarding.
  • Mga aplikasyon sa pag-debug nga gisulat sa Java, Node.js, Python.

Ang dagan sa trabaho sa lain-laing mga kalainan gipahayag nga gihulagway sa file skaffold.yaml. Alang sa usa ka proyekto, mahimo usab nimo ipasabut ang daghang mga profile diin mahimo nimo nga partially o hingpit nga usbon ang mga yugto sa asembliya ug pag-deploy. Pananglitan, alang sa pag-uswag, ipiho ang usa ka base nga imahe nga kombenyente alang sa developer, ug alang sa dula ug paghimo - usa ka gamay (+ paggamit securityContext mga sudlanan o i-redefine ang cluster diin i-deploy ang aplikasyon).

Ang mga sudlanan sa docker mahimong matukod sa lokal o layo: in Google Cloud Pagtukod o sa usa ka cluster gamit Kaniko. Gisuportahan usab ang Bazel ug Jib Maven/Gradle. Alang sa pag-tag, ang Skaffold nagsuporta sa daghang mga estratehiya: pinaagi sa git commit hash, petsa/oras, sha256-sum sa mga tinubdan, ug uban pa.

Gilain, angay nga matikdan ang posibilidad sa pagsulay sa mga sudlanan. Ang nahisgutan na nga container-structure-test framework nagtanyag sa mosunod nga mga pamaagi sa pag-verify:

  • Pagpatuman sa mga sugo sa konteksto sa usa ka sudlanan nga adunay pagsubay sa mga exit status ug pagsusi sa text output sa command.
  • Pagsusi sa presensya sa mga file sa sudlanan ug pagpares sa mga hiyas nga gipiho.
  • Pagkontrol sa mga sulod sa file gamit ang regular nga mga ekspresyon.
  • Pagpamatuod sa metadata sa hulagway (ENV, ENTRYPOINT, VOLUMES ug uban pa.).
  • Pagsusi sa pagkaangay sa lisensya.

Ang pag-synchronize sa mga file sa sudlanan wala gihimo sa labing kamalaumon nga paagi: Ang Skaffold yano nga nagmugna usa ka archive nga adunay mga gigikanan, gikopya kini ug gi-unpack kini sa sudlanan (kinahanglan nga i-install ang tar). Busa, kung ang imong panguna nga buluhaton mao ang pag-synchronize sa code, mas maayo nga tan-awon ang usa ka espesyal nga solusyon (ksync).

Mga himan alang sa mga nag-develop sa mga aplikasyon nga nagdagan sa Kubernetes
Pangunang yugto sa operasyon sa Skaffold

Sa kinatibuk-an, ang himan wala magtugot kanimo sa abstract gikan sa Kubernetes manifests ug walay bisan unsa nga interactivity, mao nga kini daw lisud nga sa pag-master. Apan kini usab ang iyang bentaha - mas dako nga kagawasan sa paglihok.

Tanaman

  • Сайт; GitHub.
  • Mubo nga estadistika sa GH: 1063 ka bituon, 1927 commit, 17 ka tigtampo.
  • Pinulongan: TypeScript (giplanohan nga bahinon ang proyekto sa daghang mga sangkap, ang pipila niini naa sa Go, ug maghimo usab usa ka SDK alang sa paghimo og mga add-on sa TypeScript/JavaScript ug Go).
  • Lisensya: Lisensya sa Apache 2.0.

Sama sa Skaffold, ang Garden nagtumong sa pag-automate sa mga proseso sa paghatud sa code sa aplikasyon sa K8s cluster. Aron mahimo kini, kinahanglan nimo una nga ihulagway ang istruktura sa proyekto sa usa ka YAML file, ug dayon ipadagan ang mando garden dev. Buhaton niya ang tanang salamangka:

  • Pagkolekta sa mga sudlanan nga adunay lainlaing bahin sa proyekto.
  • Nagdumala sa panagsama ug mga pagsulay sa yunit, kung adunay gihulagway.
  • I-roll out ang tanang component sa proyekto ngadto sa cluster.
  • Kung mausab ang source code, i-restart niini ang tibuuk nga pipeline.

Ang nag-unang pokus sa paggamit niini nga himan mao ang pagpaambit sa usa ka hilit nga cluster sa usa ka development team. Sa kini nga kaso, kung ang pipila sa mga lakang sa pagtukod ug pagsulay nahimo na, kini makapadali sa tibuuk nga proseso, tungod kay magamit sa Garden ang mga naka-cache nga mga resulta.

Ang module sa proyekto mahimong usa ka sudlanan, usa ka sudlanan sa Maven, usa ka tsart sa Helm, usa ka manifest para sa kubectl apply o bisan usa ka function sa OpenFaaS. Dugang pa, ang bisan unsang mga module mahimong makuha gikan sa usa ka hilit nga Git repository. Ang usa ka module mahimo o dili mahimong maghubit sa mga serbisyo, buluhaton, ug mga pagsulay. Ang mga serbisyo ug mga buluhaton mahimong adunay mga dependency, salamat nga mahimo nimong mahibal-an ang pagkasunod-sunod sa pag-deploy sa usa ka partikular nga serbisyo ug pag-organisar sa paglansad sa mga buluhaton ug mga pagsulay.

Ang tanaman naghatag sa tiggamit og usa ka matahum nga dashboard (karon sa eksperimento nga kahimtang), nga nagpakita sa project graph: mga component, assembly sequence, execution of tasks and tests, their connections and dependencies. Diha mismo sa browser, mahimo nimong tan-awon ang mga log sa tanan nga mga component sa proyekto ug susihon kung unsa ang usa ka partikular nga component nga outputs pinaagi sa HTTP (kung, siyempre, usa ka ingress resource ang gideklarar alang niini).

Mga himan alang sa mga nag-develop sa mga aplikasyon nga nagdagan sa Kubernetes
Panel alang sa Garden

Kini nga himan usab adunay usa ka hot-reload mode, nga yano nga nag-synchronize sa mga pagbag-o sa script sa sudlanan sa cluster, nga nagpadali sa proseso sa pag-debug sa aplikasyon. Ang hardin adunay usa ka maayo dokumentasyon ug dili daotan hugpong sa mga ehemplo, nga nagtugot kanimo nga dali nga maanad niini ug magsugod sa paggamit niini. By the way, bag-o lang na-publish paghubad sa artikulo gikan sa mga tagsulat niini.

konklusyon

Siyempre, kini nga lista sa mga himan alang sa pagpalambo ug pag-debug sa mga aplikasyon sa Kubernetes dili limitado sa. Adunay daghan pa kaayo nga mapuslanon ug praktikal nga mga gamit nga takus, kung dili usa ka bulag nga artikulo, nan labing menos usa ka paghisgot. Isulti kanamo kung unsa ang imong gigamit, unsa nga mga problema ang imong nasugatan ug giunsa nimo kini pagsulbad!

PS

Basaha usab sa among blog:

Source: www.habr.com

Idugang sa usa ka comment