Zouti pou devlopè aplikasyon ki kouri sou Kubernetes

Zouti pou devlopè aplikasyon ki kouri sou Kubernetes

Yon apwòch modèn nan operasyon rezoud anpil pwoblèm biznis ijan. Kontenè ak orchestrators fè li fasil pou echèl pwojè nenpòt ki konpleksite, senplifye lage nouvo vèsyon, fè yo pi serye, men an menm tan yo kreye pwoblèm adisyonèl pou devlopè yo. Pwogramè a, anvan tout bagay, gen sousi pou kòd li a: achitekti, bon jan kalite, pèfòmans, distenksyon - epi yo pa ki jan li pral travay nan Kubernetes ak ki jan yo teste ak debogaj li apre yo fin fè menm chanjman minim. Se poutèt sa, li se tou byen natirèl ke zouti pou Kubernetes yo aktivman ap devlope, ede yo rezoud pwoblèm yo nan menm devlopè ki pi "akayik" epi ki pèmèt yo konsantre sou bagay prensipal la.

Revizyon sa a bay enfòmasyon kout sou kèk nan zouti ki fè lavi pi fasil pou yon pwogramè ki gen kòd kouri nan pod'ax nan yon gwoup Kubernetes.

Asistan senp

Kubectl-debug

  • Liy anba la: ajoute veso ou a nan yon Pod epi gade sa k ap pase ladan l.
  • GitHub.
  • Brèf estatistik GH: 715 zetwal, 54 komèt, 9 kontribitè.
  • Lang: Ale.
  • Lisans: Apache Lisans 2.0.

Plugin sa a pou kubectl pèmèt ou kreye yon veso adisyonèl andedan gous enterè a, ki pral pataje espas non pwosesis la ak lòt resipyan. Nan li ou ka debug operasyon gous la: tcheke rezo a, koute trafik rezo a, fè yon trase nan pwosesis la nan enterè, elatriye.

Ou kapab tou chanje nan veso a pwosesis pa kouri chroot /proc/PID/root - sa a ka trè pratik lè ou bezwen jwenn yon kokiy rasin nan yon veso pou ki li mete nan manifest la securityContext.runAs.

Zouti a se senp epi efikas, kidonk li ka itil pou chak pwomotè. Nou te ekri plis sou li nan separe atik.

Telepresans

  • Liy anba la: transfere aplikasyon an nan òdinatè w lan. Devlope ak debogaj lokalman.
  • Lokal la; GitHub.
  • Brèf estatistik GH: 2131 zetwal, 2712 komèt, 33 kontribitè.
  • Lang: Python.
  • Lisans: Apache Lisans 2.0.

Lide snap-in sa a se lanse yon veso ak aplikasyon an sou òdinatè itilizatè lokal la ak proxy tout trafik soti nan gwoup la ak tounen lakay ou. Apwòch sa a pèmèt ou devlope lokalman pa tou senpleman koreksyon dosye nan IDE pi renmen ou: rezilta yo ap disponib imedyatman.

Avantaj ki genyen nan kouri lokalman se konvenyans nan modifye ak rezilta enstantane, kapasite nan debug aplikasyon an nan fason nòmal la. Dezavantaj la se ke li se mande sou vitès koneksyon, ki se espesyalman aparan lè ou gen travay ak yon aplikasyon ki gen RPS jistis segondè ak trafik. Anplis de sa, Teleprezans gen pwoblèm ak kantite volim sou Windows, ki ka yon limit desizif pou devlopè ki abitye ak eksplwatasyon sa a.

Nou deja pataje eksperyans nou nan itilize Teleprezans isit la.

Ksync

  • Liy anba la: senkronizasyon prèske enstantane nan kòd ak veso a nan gwoup la.
  • GitHub.
  • Brèf estatistik GH: 555 zetwal, 362 komèt, 11 kontribitè.
  • Lang: Ale.
  • Lisans: Apache Lisans 2.0.

Sèvis piblik la pèmèt ou senkronize sa ki nan yon anyè lokal ak anyè a nan yon veso k ap kouri nan gwoup la. Yon zouti sa yo pafè pou devlopè nan langaj pwogramasyon script, ki gen pwoblèm prensipal se livrezon kòd nan yon veso k ap kouri. Ksync fèt pou soulaje tèt fè mal sa a.

Lè inisyalize yon fwa pa kòmandman an ksync init yon DaemonSet kreye nan gwoup la, ki itilize pou kontwole eta sistèm fichye veso yo chwazi a. Sou òdinatè lokal li a, pwomotè a kouri lòd la ksync watch, ki kontwole konfigirasyon ak kouri sentèz, ki dirèkteman senkronize dosye ak gwoup la.

Tout sa ki rete se enstwi ksync sa pou senkronize ak sa. Pou egzanp, lòd sa a:

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

... pral kreye yon siveyan yo te rele myprojectki pral chèche yon gous ak yon etikèt app=backend epi eseye senkronize anyè lokal la /home/user/myproject/ ak katalòg /var/www/myproject/ nan veso ki rele php.

Pwoblèm ak nòt sou ksync nan eksperyans nou an:

  • Ou dwe itilize sou nœuds gwoup Kubernetes overlay2 kòm yon chofè depo pou Docker. Sèvis piblik la pa pral travay ak nenpòt lòt moun.
  • Lè w ap itilize Windows kòm yon eksplwatasyon kliyan, siveyan sistèm dosye a ka pa travay kòrèkteman. Ensèk sa a te remake lè w ap travay ak gwo repèrtwar - ak yon gwo kantite fichye ak repèrtwar. Nou te kreye pwoblèm ki enpòtan nan pwojè syncthing la, men pa gen okenn pwogrè sou li ankò (depi kòmansman mwa Jiyè).
  • Sèvi ak dosye .stignore pou presize chemen oswa modèl dosye ki pa bezwen senkronize (pa egzanp, anyè app/cache и .git).
  • Pa default, ksync pral rekòmanse veso a chak fwa dosye yo chanje. Pou Node.js sa a se pratik, men pou PHP li se konplètman nesesè. Li pi bon pou fèmen opcache epi sèvi ak drapo a --reload=false.
  • Konfigirasyon an ka toujou korije nan $HOME/.ksync/ksync.yaml.

Kalbas

  • Liy anba la: debug pwosesis dirèkteman nan gwoup la.
  • GitHub.
  • Brèf estatistik GH: 1154 zetwal, 279 komèt, 23 kontribitè.
  • Lang: Ale.
  • Lisans: Apache Lisans 2.0.

Zouti sa a fèt pou pwosesis debogaj dirèkteman nan gous. Sèvis piblik la se senp epi entèaktif pèmèt ou chwazi debugger a vle (gade anba a) ak namespace + gous, nan pwosesis la nan ki ou bezwen entèvni. Aktyèlman sipòte:

  • fouye - pou aplikasyon pou Go;
  • GDB - atravè sib aleka + transfè pò;
  • Transmisyon pò JDWP pou debogaj aplikasyon Java yo.

Sou bò IDE, sipò disponib sèlman nan VScode (itilize ekstansyon), sepandan, plan pou ane aktyèl la (2019) gen ladan Eclipse ak Intellij.

Pou debogaj pwosesis, Squash kouri yon veso privilejye sou nœuds gwoup yo, kidonk ou dwe premye familyarize w ak kapasite yo. mòd san danje pou evite pwoblèm sekirite.

Solisyon konplè

Ann ale nan zam lou - plis pwojè "gwo echèl" ki fèt pou satisfè imedyatman anpil nan bezwen devlopè yo.

NB: Nan lis sa a, nan kou, gen yon kote pou sèvis piblik Open Source nou an werf (ansyen ke yo rekonèt kòm dapp). Sepandan, nou te deja ekri ak pale sou li plis pase yon fwa, ak Se poutèt sa deside pa enkli li nan revizyon an. Pou moun ki vle vin pi abitye ak kapasite li yo, nou rekòmande pou li/koute rapò a "werf se zouti nou an pou CI/CD nan Kubernetes'.

DevSpace

  • Liy anba la: pou moun ki vle kòmanse travay nan Kubernetes, men ki pa vle fouye byen fon nan forè li yo.
  • GitHub.
  • Brèf estatistik GH: 630 zetwal, 1912 komèt, 13 kontribitè.
  • Lang: Ale.
  • Lisans: Apache Lisans 2.0.

Yon solisyon soti nan konpayi an ki gen menm non, ki bay gwoup jere ak Kubernetes pou devlopman ekip. Yo te kreye sèvis piblik la pou grap komèsyal yo, men li travay byen ak nenpòt lòt moun.

Lè w ap kouri lòd la devspace init nan katalòg pwojè a yo pral ofri w (entèaktif):

  • chwazi yon gwoup Kubernetes k ap travay,
  • itilize ki egziste deja Dockerfile (oswa jenere yon nouvo) pou kreye yon veso ki baze sou li,
  • chwazi yon depo pou estoke imaj veso, elatriye.

Apre tout etap preparasyon sa yo, ou ka kòmanse devlopman nan kouri lòd la devspace dev. Li pral bati veso a, telechaje li nan depo a, woule deplwaman an nan gwoup la epi kòmanse transmisyon pò ak senkronizasyon veso a ak anyè lokal la.

Opsyonèlman, yo pral mande w pou w deplase tèminal la nan veso a. Ou pa ta dwe refize, paske an reyalite veso a kòmanse ak lòd dòmi an, epi pou tès reyèl aplikasyon an bezwen yo dwe lanse manyèlman.

Finalman, ekip la devspace deploy woule aplikasyon an ak enfrastrikti ki asosye nan gwoup la, apre sa tout bagay kòmanse fonksyone nan mòd konba.

Tout konfigirasyon pwojè yo estoke nan yon dosye devspace.yaml. Anplis de anviwònman anviwònman devlopman, ou ka jwenn tou yon deskripsyon enfrastrikti nan li, menm jan ak estanda Kubernetes manifeste, sèlman anpil senplifye.

Zouti pou devlopè aplikasyon ki kouri sou Kubernetes
Achitekti ak etap prensipal nan travay ak DevSpace

Anplis de sa, li fasil pou ajoute yon eleman predefini (pa egzanp, yon DBMS MySQL) oswa yon tablo Helm nan pwojè a. Li plis nan dokiman - li pa konplike.

Skaffold

  • Lokal la; GitHub.
  • Brèf estatistik GH: 7423 zetwal, 4173 komèt, 136 kontribitè.
  • Lang: Ale.
  • Lisans: Apache Lisans 2.0.

Sa a sèvis piblik soti nan Google reklamasyon yo kouvri tout bezwen yo nan yon pwomotè ki gen kòd ki pral yon jan kanmenm kouri sou yon gwoup Kubernetes. Kòmanse sèvi ak li se pa fasil tankou devspace: pa gen okenn entèaktif, deteksyon lang ak oto-kreyasyon Dockerfile yo p'ap ofri'w li isit la.

Sepandan, si sa a pa fè ou pè, men sa Skaffold pèmèt ou fè:

  • Swiv chanjman kòd sous.
  • Senkronize li ak veso gous la si li pa bezwen asanble.
  • Kolekte resipyan ki gen kòd, si yo entèprete lang lan, oswa konpile zafè epi pake yo nan resipyan.
  • Imaj yo ki kapab lakòz yo tcheke otomatikman lè l sèvi avèk kontenè-estrikti-tès.
  • Tagging ak telechaje imaj nan Rejis Docker.
  • Deplwaye yon aplikasyon nan yon gwoup lè l sèvi avèk kubectl, Helm oswa kustomize.
  • Fè pò transfè.
  • Debug aplikasyon ki ekri nan Java, Node.js, Python.

Workflow nan divès varyasyon se declaratively dekri nan dosye a skaffold.yaml. Pou yon pwojè, ou ka defini tou plizyè pwofil kote ou ka pasyèlman oswa konplètman chanje etap yo asanble ak deplwaman. Pou egzanp, pou devlopman, presize yon imaj de baz ki bon pou pwomotè a, ak pou sèn ak pwodiksyon - yon sèl minim (+ itilize securityContext kontenè oswa redefini gwoup kote aplikasyon an pral deplwaye).

Kontenè Docker yo ka bati lokalman oswa adistans: nan Google Cloud Build oswa nan yon gwoup lè l sèvi avèk Kaniko. Bazel ak Jib Maven/Gradle yo sipòte tou. Pou tagging, Skaffold sipòte anpil estrateji: pa git commit hash, dat / lè, sha256-som nan sous, elatriye.

Separeman, li vo anyen posiblite pou teste resipyan yo. Kad veso-estrikti-tès deja mansyone ofri metòd verifikasyon sa yo:

  • Egzekite kòmandman nan kontèks yon veso ak swiv estati sòti ak tcheke pwodiksyon tèks la nan lòd la.
  • Tcheke prezans nan dosye nan veso a ak matche atribi yo espesifye.
  • Kontwòl kontni fichye a lè l sèvi avèk ekspresyon regilye.
  • Verifikasyon metadata imaj (ENV, ENTRYPOINT, VOLUMES elatriye).
  • Tcheke konpatibilite lisans.

Senkronize fichye yo ak veso a pa fèt nan fason ki pi bon an: Skaffold tou senpleman kreye yon achiv ak sous yo, kopye li epi depake li nan veso a (godwon dwe enstale). Se poutèt sa, si travay prensipal ou a se senkronizasyon kòd, li pi bon gade nan direksyon pou yon solisyon espesyalize (ksync).

Zouti pou devlopè aplikasyon ki kouri sou Kubernetes
Etap prensipal yo nan operasyon Skaffold

An jeneral, zouti a pa pèmèt ou abstrè soti nan manifest Kubernetes epi li pa gen okenn entèaktif, kidonk li ka sanble difisil pou metrize. Men, sa a se tou avantaj li yo - pi gwo libète nan aksyon.

Jaden

  • Lokal la; GitHub.
  • Brèf estatistik GH: 1063 zetwal, 1927 komèt, 17 kontribitè.
  • Lang: TypeScript (li planifye pou divize pwojè a an plizyè konpozan, kèk ladan yo pral nan Go, epi tou fè yon SDK pou kreye ajoute-ons nan TypeScript/JavaScript ak Go).
  • Lisans: Apache Lisans 2.0.

Menm jan ak Skaffold, Garden gen pou objaktif pou otomatize pwosesis livrezon kòd aplikasyon pou gwoup K8s la. Pou fè sa, ou premye bezwen dekri estrikti pwojè a nan yon dosye YAML, ak Lè sa a, kouri lòd la garden dev. Li pral fè tout maji yo:

  • Kolekte resipyan ak divès pati nan pwojè a.
  • Fè tès entegrasyon ak tès inite yo, si yo dekri nenpòt.
  • Woule tout eleman pwojè nan gwoup la.
  • Si kòd sous la chanje, li pral rekòmanse tiyo a tout antye.

Konsantre prensipal lè w sèvi ak zouti sa a se pataje yon gwoup aleka ak yon ekip devlopman. Nan ka sa a, si kèk nan bilding ak tès etap yo te deja fè, sa a pral siyifikativman akselere pwosesis la tout antye, depi Garden yo pral kapab sèvi ak rezilta yo kachèt.

Yon modil pwojè kapab yon veso, yon veso Maven, yon tablo Helm, yon manifest pou kubectl apply oswa menm yon fonksyon OpenFaaS. Anplis, nenpòt nan modil yo ka rale soti nan yon depo Git aleka. Yon modil ka oswa pa ka defini sèvis, travay, ak tès yo. Sèvis ak travay yo ka gen depandans, kidonk, ou ka detèmine sekans deplwaman yon sèvis patikilye epi òganize lansman travay ak tès yo.

Garden bay itilizatè a yon bèl tablodbò (kounye a nan eta eksperimantal), ki montre graf pwojè a: konpozan, sekans asanble, ekzekisyon travay ak tès, koneksyon yo ak depandans yo. Dwat nan navigatè a, ou ka wè mòso bwa yo nan tout eleman pwojè yo epi tcheke sa yon eleman patikilye pwodiksyon atravè HTTP (si, nan kou, yo deklare yon resous antre pou li).

Zouti pou devlopè aplikasyon ki kouri sou Kubernetes
Panel pou Jaden

Zouti sa a tou gen yon mòd cho-rechaje, ki tou senpleman senkronize chanjman script ak veso ki nan gwoup la, anpil akselere pwosesis debogaj aplikasyon an. Jaden gen yon bon dokiman an e pa move seri egzanp, ki pèmèt ou byen vit abitye ak li epi kòmanse sèvi ak li. By wout la, jis dènyèman nou pibliye tradiksyon atik soti nan otè li yo.

Konklizyon

Natirèlman, lis zouti sa a pou devlope ak debogaj aplikasyon nan Kubernetes se pa sa sèlman. Gen anpil plis itilite trè itil ak pratik ki merite, si se pa yon atik separe, Lè sa a, omwen yon mansyone. Di nou sa ou itilize, ki pwoblèm ou rankontre ak ki jan ou rezoud yo!

PS

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè