L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

Hi kollha! Jisimni Pavel Agaletsky. Naħdem bħala team lead f'tim li jiżviluppa s-sistema ta' konsenja Lamoda. Fl-2018, tkellimt fil-konferenza HighLoad++, u llum nixtieq nippreżenta traskrizzjoni tar-rapport tiegħi.

Is-suġġett tiegħi huwa ddedikat għall-esperjenza tal-kumpanija tagħna fl-iskjerament ta 'sistemi u servizzi f'ambjenti differenti. Nibdew minn żminijiet preistoriċi tagħna, meta skjerajna s-sistemi kollha f'servers virtwali ordinarji, u spiċċajna bit-tranżizzjoni gradwali minn Nomad għall-iskjerament f'Kubernetes. Jien ngħidlek għaliex għamilna u x'problemi kellna fil-proċess.

L-iskjerament ta' applikazzjonijiet għal VM

Nibdew bil-fatt li 3 snin ilu s-sistemi u s-servizzi kollha tal-kumpanija ġew skjerati fuq servers virtwali regolari. Teknikament, kien organizzat b'tali mod li l-kodiċi kollu għas-sistemi tagħna kien maħżun u mmuntat bl-użu ta 'għodod awtomatiċi ta' assemblaġġ, bl-użu ta 'jenkins. Bl-użu ta 'Ansible, ġie mxerred mis-sistema ta' kontroll tal-verżjoni tagħna għal servers virtwali. Barra minn hekk, kull sistema li kellha l-kumpanija tagħna ġiet skjerata għal mill-inqas 2 servers: wieħed minnhom fuq ir-ras, it-tieni fuq id-denb. Dawn iż-żewġ sistemi kienu assolutament identiċi għal xulxin fis-settings kollha tagħhom, qawwa, konfigurazzjoni, eċċ. L-unika differenza bejniethom kienet li ras irċieva traffiku tal-utent, filwaqt li denb qatt ma rċieva traffiku tal-utent.

Għaliex sar dan?

Meta skjerajna rilaxxi ġodda tal-applikazzjoni tagħna, ridna niżguraw tnedija bla xkiel, jiġifieri, mingħajr konsegwenzi notevoli għall-utenti. Dan inkiseb minħabba l-fatt li r-rilaxx ikkumpilat li jmiss bl-użu ta 'Ansible ġie rolled out to tail. Hemmhekk, in-nies li kienu involuti fl-iskjerament setgħu jiċċekkjaw u jiżguraw li kollox kien tajjeb: il-metriċi, it-taqsimiet u l-applikazzjonijiet kollha kienu qed jaħdmu; jitnedew l-iskripts meħtieġa. Biss wara li kienu konvinti li kollox kien ok, it-traffiku inbidel. Hija bdiet tmur għas-server li qabel kien denb. U dik li qabel kienet ir-ras baqgħet mingħajr traffiku tal-utent, filwaqt li xorta kellha l-verżjoni preċedenti tal-applikazzjoni tagħna fuqha.

Allura kien bla xkiel għall-utenti. Minħabba li l-bidla hija istantanja, peress li sempliċement qed taqleb il-balancer. Tista 'faċilment terġa' lura għall-verżjoni preċedenti billi sempliċement taqleb il-balancer lura. Nistgħu wkoll nivverifikaw li l-applikazzjoni kienet kapaċi tipproduċi anki qabel ma rċeviet it-traffiku tal-utent, li kien pjuttost konvenjenti.

X’vantaġġi rajna f’dan kollu?

  1. L-ewwelnett, huwa biżżejjed jaħdem biss. Kulħadd jifhem kif taħdem skema ta 'skjerament bħal din, minħabba li ħafna nies qatt skjerati għal servers virtwali regolari.
  2. Dan huwa biżżejjed b'mod affidabbli, peress li t-teknoloġija tal-iskjerament hija sempliċi, ittestjata minn eluf ta 'kumpaniji. Miljuni ta 'servers huma skjerati b'dan il-mod. Huwa diffiċli li tkisser xi ħaġa.
  3. U finalment nistgħu niksbu skjeramenti atomiċi. Skjeramenti li jseħħu fl-istess ħin għall-utenti, mingħajr stadju notevoli ta 'bidla bejn il-verżjoni l-antika u l-ġdida.

Imma rajna wkoll diversi nuqqasijiet f’dan kollu:

  1. Minbarra l-ambjent tal-produzzjoni, l-ambjent tal-iżvilupp, hemm ambjenti oħra. Per eżempju, qa u preproduzzjoni. Dak iż-żmien kellna ħafna servers u madwar 60 servizz. Għal din ir-raġuni kien meħtieġ għal kull servizz, żomm l-aħħar verżjoni għaliha magna virtwali. Barra minn hekk, jekk trid taġġorna libreriji jew tinstalla dipendenzi ġodda, trid tagħmel dan fl-ambjenti kollha. Int meħtieġa wkoll tissinkronizza l-ħin meta tkun se tuża l-verżjoni l-ġdida li jmiss tal-applikazzjoni tiegħek mal-ħin meta devops iwettaq is-settings ambjentali meħtieġa. F'dan il-każ, huwa faċli li tidħol f'sitwazzjoni fejn l-ambjent tagħna jkun kemmxejn differenti fl-ambjenti kollha f'daqqa. Pereżempju, f'ambjent ta 'QA se jkun hemm xi verżjonijiet ta' libreriji, u f'ambjent ta 'produzzjoni se jkun hemm oħrajn, li jwasslu għal problemi.
  2. Diffikultà fl-aġġornament tad-dipendenzi l-applikazzjoni tiegħek. Jiddependi mhux minnek, imma mit-tim l-ieħor. Jiġifieri, mit-tim devops li jżomm is-servers. Int trid tagħtihom kompitu xieraq u deskrizzjoni ta 'dak li trid tagħmel.
  3. Dak iż-żmien, ridna wkoll naqsmu l-monoliti kbar kbar li kellna f’servizzi żgħar separati, peress li fhimna li se jkun hemm aktar u aktar minnhom. Dak iż-żmien, diġà kellna aktar minn 100. Għal kull servizz ġdid, kien meħtieġ li tinħoloq magna virtwali ġdida separata, li kellha wkoll tinżamm u tiġi skjerata. Barra minn hekk, għandek bżonn mhux karozza waħda, iżda mill-inqas tnejn. Ma’ dan kollu hemm l-ambjent tal-QA. Dan jikkawża problemi u jagħmilha aktar diffiċli għalik biex tibni u tħaddem sistemi ġodda. proċess kumpless, għali u twil.

Għalhekk, iddeċidejna li jkun aktar konvenjenti li nimxu mill-iskjerament ta 'magni virtwali regolari għall-iskjerament tal-applikazzjonijiet tagħna f'kontenitur docker. Jekk għandek docker, għandek bżonn sistema li tista' tħaddem l-applikazzjoni fi cluster, peress li ma tistax tgħolli kontenitur biss. Normalment trid iżżomm kont ta 'kemm kontenituri jittellgħu sabiex jerfgħu awtomatikament. Għal din ir-raġuni, kellna bżonn nagħżlu sistema ta 'kontroll.

Ħsibna għal żmien twil dwar liema waħda nistgħu nieħdu. Il-fatt hu li dak iż-żmien dan il-munzell tal-iskjerament fuq servers virtwali regolari kien kemmxejn skadut, peress li ma kellhomx l-aħħar verżjonijiet tas-sistemi operattivi. F'xi punt, kien hemm saħansitra FreeBSD, li ma tantx kien konvenjenti biex jiġi appoġġjat. Aħna fhimna li kellna bżonn nimmigraw lejn docker kemm jista 'jkun malajr. Id-devops tagħna ħarsu lejn l-esperjenza eżistenti tagħhom b'soluzzjonijiet differenti u għażlu sistema bħal Nomad.

Aqleb għal Nomad

Nomad huwa prodott ta 'HashiCorp. Huma magħrufa wkoll għas-soluzzjonijiet l-oħra tagħhom:

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

"Konslu" hija għodda għall-iskoperta tas-servizz.

"Terraform" - sistema għall-ġestjoni tas-servers li tippermettilek tikkonfigurahom permezz tal-konfigurazzjoni, l-hekk imsejħa infrastructure-as-a-code.

"Vagrant" jippermettilek li tuża magni virtwali lokalment jew fis-sħab permezz ta 'fajls ta' konfigurazzjoni speċifiċi.

Nomad dak iż-żmien dehret soluzzjoni pjuttost sempliċi li tista 'tinbidel malajr mingħajr ma tinbidel l-infrastruttura kollha. Barra minn hekk, huwa pjuttost faċli li titgħallem. Huwa għalhekk li għażilna bħala s-sistema ta 'filtrazzjoni għall-kontenitur tagħna.

X'għandek bżonn biex tuża s-sistema tiegħek għal Nomad?

  1. L-ewwelnett għandek bżonn immaġni docker l-applikazzjoni tiegħek. Għandek bżonn tibniha u poġġiha fir-repożitorju tal-immaġni docker. Fil-każ tagħna, din hija artifactory - sistema li tippermettilek li timbotta diversi artifacts ta 'tipi differenti fiha. Jista 'jaħżen arkivji, immaġini docker, pakketti PHP tal-kompożitur, pakketti NPM, eċċ.
  2. Hemm bżonn ukoll fajl tal-konfigurazzjoni, li se tgħid lil Nomad x', fejn u f'liema kwantità trid tiskjera.

Meta nitkellmu dwar Nomad, juża l-lingwa HCL bħala l-format tal-fajl ta 'informazzjoni tiegħu, li tirrappreżenta Lingwa tal-Konfigurazzjoni HashiCorp. Dan huwa superset ta' Yaml li jippermettilek tiddeskrivi s-servizz tiegħek f'termini Nomad.

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

Jippermettilek tgħid kemm kontenituri trid tiskjera, minn liema immaġini jgħaddulhom diversi parametri waqt l-iskjerament. Għalhekk, inti tgħaddi dan il-fajl lil Nomad, u tniedi kontenituri fil-produzzjoni skond dan.

Fil-każ tagħna, indunajna li sempliċiment tikteb fajls HCL assolutament identiċi għal kull servizz ma jkunx konvenjenti ħafna, minħabba li hemm ħafna servizzi u xi kultant trid taġġornahom. Jiġri li servizz wieħed jiġi skjerat mhux f'każ wieħed, iżda f'varjetà ta 'oħrajn differenti. Pereżempju, waħda mis-sistemi li għandna fil-produzzjoni għandha aktar minn 100 każ fil-produzzjoni. Jiġru mill-istess immaġini, iżda jvarjaw fl-issettjar tal-konfigurazzjoni u l-fajls tal-konfigurazzjoni.

Għalhekk, iddeċidejna li jkun konvenjenti għalina li naħżnu l-fajls tal-konfigurazzjoni kollha tagħna għall-iskjerament f'repożitorju komuni wieħed. B'dan il-mod kienu viżibbli: kienu faċli biex jinżammu u stajna naraw x'sistemi kellna. Jekk meħtieġ, huwa wkoll faċli li taġġorna jew tibdel xi ħaġa. Iż-żieda ta' sistema ġdida mhijiex diffiċli wkoll - għandek bżonn biss li toħloq fajl ta' konfigurazzjoni ġewwa d-direttorju l-ġdid. Ġewwa fih hemm il-fajls li ġejjin: service.hcl, li fih deskrizzjoni tas-servizz tagħna, u xi fajls env li jippermettu li dan is-servizz stess, li qed jiġi skjerat fil-produzzjoni, jiġi kkonfigurat.

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

Madankollu, xi wħud mis-sistemi tagħna huma skjerati fil-produzzjoni mhux f'kopja waħda, iżda f'diversi f'daqqa. Għalhekk, iddeċidejna li jkun konvenjenti għalina li naħżnu mhux il-konfigurazzjonijiet fil-forma pura tagħhom, iżda l-forma mudell tagħhom. U għażilna jinja 2. F'dan il-format, aħna naħżnu kemm il-konfigurazzjonijiet tas-servizz innifsu kif ukoll il-fajls env meħtieġa għalih.

Barra minn hekk, poġġejna fir-repożitorju skript ta 'skjerament komuni għall-proġetti kollha, li jippermettilek li tniedi u tuża s-servizz tiegħek fil-produzzjoni, fl-ambjent mixtieq, fil-mira mixtieqa. Fil-każ meta dawwarna l-konfigurazzjoni HCL tagħna f'mudell, allura l-fajl HCL, li qabel kien konfigurazzjoni Nomad regolari, f'dan il-każ beda jidher ftit differenti.

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

Jiġifieri, biddel xi varjabbli tal-post tal-konfigurazzjoni b'varjabbli mdaħħla li jittieħdu minn fajls env jew sorsi oħra. Barra minn hekk, sirna l-opportunità li niġbru fajls HCL b'mod dinamiku, jiġifieri, nistgħu nużaw mhux biss inserzjonijiet varjabbli ordinarji. Peress li jinja jappoġġja loops u kundizzjonijiet, tista 'wkoll toħloq fajls ta' konfigurazzjoni hemmhekk, li jinbidlu skont fejn eżattament tiskjera l-applikazzjonijiet tiegħek.

Pereżempju, trid tuża s-servizz tiegħek għall-pre-produzzjoni u l-produzzjoni. Ejja ngħidu li fil-pre-produzzjoni ma tridx tħaddem skripts cron, iżda trid biss tara s-servizz fuq dominju separat biex tiżgura li qed jaħdem. Għal kull min juża s-servizz, il-proċess jidher sempliċi ħafna u trasparenti. Kull ma trid tagħmel hu li tesegwixxi l-fajl deploy.sh, speċifika liema servizz trid tuża u għal liema mira. Pereżempju, trid tuża ċerta sistema fir-Russja, il-Belarus jew il-Każakstan. Biex tagħmel dan, sempliċement ibdel wieħed mill-parametri, u jkollok il-fajl ta 'konfigurazzjoni korrett.

Meta s-servizz Nomad ikun diġà skjerat fil-cluster tiegħek, jidher bħal dan.

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

L-ewwel, għandek bżonn xi tip ta 'balancer barra, li se jirċievi t-traffiku kollu tal-utent. Se taħdem flimkien mal-Konslu u ssir taf minnha fejn, fuq liema node, f'liema indirizz IP jinsab servizz speċifiku li jikkorrispondi għal isem ta 'dominju partikolari. Is-servizzi fil-Konslu jiġu minn Nomad innifsu. Peress li dawn huma prodotti mill-istess kumpanija, huma pjuttost relatati ma 'xulxin. Nistgħu ngħidu li Nomad out of the box jista’ jirreġistra s-servizzi kollha mnedija fiha ġewwa Konslu.

Ladarba l-balancer tat-tagħbija front-end tiegħek ikun jaf lil liema servizz jibgħat it-traffiku, jgħaddih lill-kontenitur xieraq jew kontenituri multipli li jaqblu mal-applikazzjoni tiegħek. Naturalment, huwa wkoll meħtieġ li wieħed jaħseb dwar is-sigurtà. Anke jekk is-servizzi kollha jaħdmu fuq l-istess magni virtwali f'kontenituri, dan normalment jeħtieġ li jiġi evitat aċċess ħieles minn kwalunkwe servizz għal kwalunkwe ieħor. Dan ksibna permezz tas-segmentazzjoni. Kull servizz ġie mniedi fin-netwerk virtwali tiegħu stess, li fuqu ġew preskritti regoli ta' routing u regoli għall-permess/ċaħda tal-aċċess għal sistemi u servizzi oħra. Jistgħu jkunu jinsabu kemm ġewwa dan il-cluster kif ukoll barra minnu. Pereżempju, jekk trid tipprevjeni servizz milli jikkonnettja ma 'database speċifika, dan jista' jsir permezz ta 'segmentazzjoni fil-livell tan-netwerk. Jiġifieri, anki bi żball, ma tistax tikkonnettja aċċidentalment mill-ambjent tat-test mad-database tal-produzzjoni tiegħek.

Kemm swietna t-tranżizzjoni f’termini ta’ riżorsi umani?

It-tranżizzjoni tal-kumpanija kollha għal Nomad ħadet madwar 5-6 xhur. Imxejna fuq bażi ta’ servizz b’servizz, iżda b’pass pjuttost mgħaġġel. Kull tim kellu joħloq il-kontenituri tiegħu għas-servizzi.

Adottajna tali approċċ li kull tim huwa responsabbli għall-immaġini docker tas-sistemi tagħhom b'mod indipendenti. DevOps jipprovdu l-infrastruttura ġenerali meħtieġa għall-iskjerament, jiġifieri appoġġ għall-cluster innifsu, appoġġ għas-sistema CI, eċċ. U dak iż-żmien, kellna aktar minn 60 sistema mċaqalqa lejn Nomad, li ammontaw għal madwar 2 kontenitur.

Devops huwa responsabbli għall-infrastruttura ġenerali ta 'dak kollu relatat mal-iskjerament u s-servers. U kull tim ta 'żvilupp, min-naħa tiegħu, huwa responsabbli għall-implimentazzjoni ta' kontenituri għas-sistema speċifika tiegħu, peress li huwa t-tim li jaf dak li ġeneralment jeħtieġ f'kontenitur partikolari.

Raġunijiet għall-abbandun ta' Nomad

X'vantaġġi ksibna billi nbiddlu għall-iskjerament bl-użu ta' Nomad u docker, fost oħrajn?

  1. Aħna sakemm kundizzjonijiet ugwali għall-ambjenti kollha. Fl-iżvilupp, QA ambjent, pre-produzzjoni, produzzjoni, l-istess immaġini kontenitur huma użati, bl-istess dipendenzi. Għaldaqstant, prattikament ma jkollok l-ebda ċans li dak li se jispiċċa fil-produzzjoni mhuwiex dak li qabel ittestjajt lokalment jew fl-ambjent tat-test tiegħek.
  2. Sibna wkoll li huwa biżżejjed faċli biex iżżid servizz ġdid. Mil-lat tal-iskjerament, kwalunkwe sistema ġdida titnieda b'mod sempliċi ħafna. Sempliċement mur fir-repożitorju li jaħżen il-konfigurazzjonijiet, żid konfigurazzjoni oħra għas-sistema tiegħek hemmhekk, u tkun lest. Tista' tuża s-sistema tiegħek għall-produzzjoni mingħajr ebda sforz addizzjonali mid-devops.
  3. Kollha fajls tal-konfigurazzjoni f'repożitorju komuni wieħed irriżulta li kien taħt reviżjoni. Fiż-żmien meta skjerajna s-sistemi tagħna bl-użu ta 'servers virtwali, użajna Ansible, li fih il-konfigurazzjonijiet kienu fl-istess repożitorju. Madankollu, għall-biċċa l-kbira tal-iżviluppaturi dan kien daqsxejn aktar diffiċli biex taħdem magħhom. Hawnhekk il-volum ta 'konfigurazzjonijiet u kodiċi li għandek bżonn iżżid biex tuża s-servizz sar ħafna iżgħar. Barra minn hekk, huwa faċli ħafna għad-devops li jiffissaw jew jibdlu. Fil-każ ta 'tranżizzjonijiet, pereżempju, għal verżjoni ġdida ta' Nomad, jistgħu jieħdu u jaġġornaw bl-ingrossa l-fajls operattivi kollha li jinsabu fl-istess post.

Iżda ltqajna wkoll ma 'diversi żvantaġġi:

Irriżulta li aħna ma setgħetx tikseb skjeramenti bla xkiel fil-każ ta’ Nomad. Meta jitfgħu kontenituri taħt kundizzjonijiet differenti, jista 'jirriżulta li jkun qed jaħdem, u Nomad pperċepitu bħala kontenitur lest biex jirċievi t-traffiku. Dan ġara qabel ma l-applikazzjoni ġewwa fiha saħansitra kellha ċans titnieda. Għal din ir-raġuni, is-sistema bdiet tipproduċi 500 żball għal perjodu qasir ta’ żmien, għax it-traffiku beda jmur f’kontejner li kien għadu mhux lest jaċċettah.

Iltqajna ma’ xi wħud bugs. L-aktar bug sinifikanti huwa li Nomad ma jimmaniġġjax raggruppament kbir tajjeb ħafna jekk għandek ħafna sistemi u kontenituri. Meta trid tieħu waħda mis-servers li hija inkluża fil-cluster Nomad għall-manutenzjoni, hemm probabbiltà pjuttost għolja li r-raggruppament ma jħossux tajjeb ħafna u jinqasam. Xi kontenituri jistgħu, pereżempju, jaqgħu u ma jogħlewx - dan jiswik ħafna aktar tard jekk is-sistemi kollha tal-produzzjoni tiegħek jinsabu f'grupp immexxi minn Nomad.

Għalhekk iddeċidejna li naħsbu fejn għandna mmorru. F'dak il-punt, sirna ħafna aktar konxji ta 'dak li ridna niksbu. Jiġifieri: irridu affidabilità, ftit aktar funzjonijiet milli jipprovdi Nomad, u sistema aktar matura u aktar stabbli.

F'dan ir-rigward, l-għażla tagħna waqgħet fuq Kubernetes bħala l-aktar pjattaforma popolari għat-tnedija ta 'clusters. Speċjalment meta wieħed iqis li d-daqs u n-numru tal-kontenituri tagħna kien kbir biżżejjed. Għal skopijiet bħal dawn, Kubernetes deher li kien l-aktar sistema adattata li nistgħu nħarsu lejha.

Transizzjoni għal Kubernetes

Jien ngħidlek ftit dwar il-kunċetti bażiċi ta 'Kubernetes u kif huma differenti minn Nomad.

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

L-ewwelnett, l-aktar kunċett bażiku f'Kubernetes huwa l-kunċett ta 'pod. Pod huwa grupp ta' kontenitur wieħed jew aktar li dejjem jimxu flimkien. U dejjem jaħdmu daqslikieku strettament fuq magna virtwali waħda. Huma aċċessibbli għal xulxin permezz tal-IP 127.0.0.1 fuq portijiet differenti.

Ejja nassumu li għandek applikazzjoni PHP li tikkonsisti f'nginx u php-fpm - l-iskema klassika. Ħafna probabbli, trid iżżomm kemm il-kontenituri nginx kif ukoll php-fpm flimkien il-ħin kollu. Kubernetes jippermettilek tikseb dan billi tiddeskrivihom bħala pod komuni wieħed. Dan huwa eżattament dak li ma stajniex niksbu b'Nomad.

It-tieni kunċett huwa iskjerament. Il-fatt hu li l-miżwed innifsu huwa ħaġa effimera; jibda u jisparixxi. Trid toqtol il-kontenituri preċedenti kollha tiegħek l-ewwel, u mbagħad tniedi verżjonijiet ġodda f'daqqa, jew trid tgħaddihom gradwalment? Dan huwa l-proċess li l-kunċett tal-iskjerament huwa responsabbli għalih. Jiddeskrivi kif tuża l-imżiewed tiegħek, f'liema kwantità u kif taġġornahom.

It-tielet kunċett huwa servizz. Is-servizz tiegħek fil-fatt huwa s-sistema tiegħek, li tirċievi xi traffiku u mbagħad tibgħatha lil pods wieħed jew aktar li jikkorrispondu mas-servizz tiegħek. Jiġifieri, jippermettilek tgħid li t-traffiku kollu deħlin għal tali jew tali servizz b'tali jew tali isem irid jintbagħat lil dawn il-miżwed speċifiċi. U fl-istess ħin jipprovdilek ibbilanċjar tat-traffiku. Jiġifieri, tista 'tniedi żewġ imżiewed tal-applikazzjoni tiegħek, u t-traffiku kollu li jkun dieħel ikun ibbilanċjat b'mod ugwali bejn il-miżwed relatati ma' dan is-servizz.

U r-raba 'kunċett bażiku huwa Ingress. Dan huwa servizz li jaħdem fuq cluster Kubernetes. Jaġixxi bħala bilanċjar tat-tagħbija esterna li jieħu f'idejh it-talbiet kollha. Bl-użu tal-API Kubernetes, Ingress jista' jiddetermina fejn għandhom jintbagħtu dawn it-talbiet. Barra minn hekk, jagħmel dan b'mod flessibbli ħafna. Tista' tgħid li t-talbiet kollha lil dan il-host u tali URL jintbagħtu lil dan is-servizz. U dawn it-talbiet li jaslu lil dan il-host u lil URL ieħor jintbagħtu lil servizz ieħor.

L-iktar ħaġa sabiħa mil-lat ta 'xi ħadd li jiżviluppa applikazzjoni hija li inti kapaċi tmexxi dan kollu lilek innifsek. Billi tissettja l-konfigurazzjoni Ingress, tista 'tibgħat it-traffiku kollu li ġej għal tali jew tali API għal kontenituri separati miktuba, pereżempju, f'Go. Iżda dan it-traffiku, li jasal għall-istess dominju, iżda għal URL differenti, għandu jintbagħat f'kontenituri miktuba f'PHP, fejn hemm ħafna loġika, iżda mhumiex veloċi ħafna.

Jekk inqabblu dawn il-kunċetti kollha ma Nomad, nistgħu ngħidu li l-ewwel tliet kunċetti huma kollha flimkien Servizz. U l-aħħar kunċett huwa nieqes f'Nomad innifsu. Aħna użajna balancer estern hekk kif: jista 'jkun haproxy, nginx, nginx+, eċċ. Fil-każ ta 'kubu, m'għandekx bżonn tintroduċi dan il-kunċett addizzjonali separatament. Madankollu, jekk tħares lejn Ingress internament, huwa jew nginx, haproxy, jew traefik, iżda tip ta 'mibni f'Kubernetes.

Il-kunċetti kollha li ddeskrivejt huma, fil-fatt, riżorsi li jeżistu fi ħdan cluster Kubernetes. Biex tiddeskrivihom fil-kubu, jintuża format yaml, li huwa aktar leġibbli u familjari mill-fajls HCL fil-każ ta 'Nomad. Iżda strutturalment jiddeskrivu l-istess ħaġa fil-każ ta ', pereżempju, pod. Jgħidu - irrid niskjera tali u tali imżiewed hemmhekk, b'tali u tali immaġini, fi tali u tali kwantitajiet.

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

Barra minn hekk, indunajna li ma ridniex noħolqu kull riżors individwali bl-idejn: iskjerament, servizzi, Ingress, eċċ. Minflok, ridna niddeskrivu kull waħda mis-sistemi tagħna f'termini ta 'Kubernetes waqt l-iskjerament, sabiex ma jkollnax għalfejn nirrikrejaw manwalment id-dipendenzi kollha tar-riżorsi meħtieġa fl-ordni t-tajba. Helm intgħażlet bħala s-sistema li ppermettietna nagħmlu dan.

Kunċetti bażiċi fil Helm

Tmun huwa maniġer tal-pakketti għal Kubernetes. Huwa simili ħafna għal kif jaħdmu l-maniġers tal-pakketti fil-lingwi tal-ipprogrammar. Huma jippermettulek taħżen servizz li jikkonsisti, pereżempju, deployment nginx, deployment php-fpm, config for Ingress, configmaps (din hija entità li tippermettilek li tissettja env u parametri oħra għas-sistema tiegħek) fil-forma ta’ so- imsejħa charts. Fl-istess ħin Helm timxi fuq Kubernetes. Jiġifieri, din mhix xi tip ta 'sistema mwarrba, iżda biss servizz ieħor imniedi ġewwa l-kubu. Inti jinteraġixxu magħha permezz tal-API tagħha permezz ta 'kmand tal-console. Il-konvenjenza u s-sbuħija tagħha hija li anki jekk it-tmun jinkiser jew tneħħih mill-cluster, is-servizzi tiegħek mhux se jisparixxu, peress li t-tmun essenzjalment iservi biss biex tibda s-sistema. Kubernetes innifsu huwa mbagħad responsabbli għall-prestazzjoni u l-istat tas-servizzi.

Irrealizzajna wkoll li templateization, li qabel konna mġiegħla nagħmlu aħna billi nintroduċu jinja fil-konfigurazzjonijiet tagħna, hija waħda mill-karatteristiċi ewlenin tat-tmun. Il-konfigurazzjonijiet kollha li inti toħloq għas-sistemi tiegħek huma maħżuna fil-tmun fil-forma ta 'mudelli, ftit simili għal jinja, iżda, fil-fatt, bl-użu tat-templating tal-lingwa Go, li fiha tmun huwa miktub, bħal Kubernetes.

Helm iżid ftit aktar kunċetti għalina.

Chart - din hija deskrizzjoni tas-servizz tiegħek. F'maniġers ta 'pakketti oħra jkun jissejjaħ pakkett, pakkett jew xi ħaġa simili. Hawnhekk huwa msejjaħ chart.

valuri huma l-varjabbli li trid tuża biex tibni l-konfigurazzjonijiet tiegħek minn mudelli.

Rilaxx. Kull darba li servizz li jiġi skjerat bl-użu tat-tmun jirċievi verżjoni inkrementali tar-rilaxx. Helm jiftakar x'kienet il-konfigurazzjoni tas-servizz fir-rilaxx preċedenti, ir-rilaxx qabel dik, eċċ. Għalhekk, jekk għandek bżonn li rollback, sempliċement mexxi l-kmand callback tat-tmun, tippontah lejn il-verżjoni tar-rilaxx preċedenti. Anke jekk il-konfigurazzjoni korrispondenti fir-repożitorju tiegħek ma tkunx disponibbli fiż-żmien tar-rollback, it-tmun xorta se jiftakar dak li kien u se jreġġa' lura s-sistema tiegħek għall-istat li kien fih fir-rilaxx preċedenti.

Fil-każ meta nużaw it-tmun, il-konfigurazzjonijiet regolari għal Kubernetes jinbidlu wkoll f'mudelli li fihom huwa possibbli li tuża varjabbli, funzjonijiet, u tapplika dikjarazzjonijiet kundizzjonali. Dan il-mod tista' tiġbor il-konfigurazzjoni tas-servizz tiegħek skont l-ambjent.

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

Fil-prattika, iddeċidejna li nagħmlu l-affarijiet ftit differenti milli għamilna ma' Nomad. Jekk f'Nomad kemm il-konfigurazzjonijiet tal-iskjerament kif ukoll n-varjabbli li kienu meħtieġa biex jiġi skjerat is-servizz tagħna kienu maħżuna f'repożitorju wieħed, hawnhekk iddeċidejna li naqsmuhom f'żewġ repożitorji separati. Ir-repożitorju "skjerament" jaħżen biss n-varjabbli meħtieġa għall-iskjerament, u r-repożitorju "tmun" jaħżen konfigurazzjonijiet jew charts.

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

X'tagħna dan?

Minkejja l-fatt li aħna ma naħżnu l-ebda data verament sensittiva fil-fajls tal-konfigurazzjoni nfushom. Per eżempju, passwords għal databases. Huma maħżuna bħala sigrieti f'Kubernetes, iżda madankollu, għad hemm ċerti affarijiet hemmhekk li ma rridux nagħtu aċċess għalihom lil kulħadd. Għalhekk, l-aċċess għar-repożitorju "skjerament" huwa aktar limitat, u r-repożitorju "tmun" sempliċement fih deskrizzjoni tas-servizz. Għal din ir-raġuni, jista 'jkun aċċessat b'mod sikur minn firxa usa' ta 'nies.

Peress li għandna mhux biss produzzjoni, iżda wkoll ambjenti oħra, bis-saħħa ta 'din is-separazzjoni nistgħu nużaw mill-ġdid it-tabelli tat-tmun tagħna biex niskjeraw servizzi mhux biss għall-produzzjoni, iżda wkoll, pereżempju, għal ambjent ta' QA. Anke biex tużahom lokalment bl-użu Minikube - din hija ħaġa għat-tmexxija ta' Kubernetes lokalment.

Ġewwa kull repożitorju, ħallejna diviżjoni f'direttorji separati għal kull servizz. Jiġifieri, ġewwa kull direttorju hemm mudelli relatati mat-tabella korrispondenti u li jiddeskrivu r-riżorsi li jeħtieġ li jiġu skjerati biex iniedu s-sistema tagħna. Ħallejna biss envs fir-repożitorju "skjerament". F'dan il-każ, aħna ma użajnax templating bl-użu ta 'jinja, minħabba li t-tmun innifsu jipprovdi templating barra mill-kaxxa - din hija waħda mill-funzjonijiet ewlenin tagħha.

Ħallna skript tal-iskjerament - deploy.sh, li jissimplifika u jistandardizza t-tnedija għall-iskjerament bl-użu ta 'tmun. Għalhekk, għal kull min irid juża, l-interface tal-iskjerament tidher eżattament l-istess bħal meta kienet qed tintuża permezz ta 'Nomad. L-istess deploy.sh, l-isem tas-servizz tiegħek, u fejn trid tiskjerah. Dan jikkawża t-tmun jibda internament. Min-naħa tiegħu, jiġbor il-konfigurazzjonijiet minn mudelli, idaħħal il-fajls tal-valuri meħtieġa fihom, imbagħad jużahom, u jniedihom f'Kubernetes.

Sejbiet

Is-servizz Kubernetes jidher li huwa aktar kumpless minn Nomad.

L-iskjerament ta' applikazzjonijiet għal VM, Nomad u Kubernetes

Hawnhekk it-traffiku ħerġin jasal għal Ingress. Dan huwa biss il-kontrollur ta 'quddiem, li jieħu f'idejh it-talbiet kollha u sussegwentement jibgħathom lis-servizzi li jikkorrispondu mad-dejta tat-talba. Jiddeterminahom ibbażati fuq konfigurazzjonijiet li huma parti mid-deskrizzjoni tal-applikazzjoni tiegħek fit-tmun u liema żviluppaturi jistabbilixxu waħedhom. Is-servizz jibgħat talbiet lill-imżiewed tiegħu, jiġifieri, kontejners speċifiċi, li jibbilanċja t-traffiku li jkun dieħel bejn il-kontejners kollha li jappartjenu għal dan is-servizz. U, ovvjament, m'għandniex ninsew li m'għandna mmorru imkien mis-sigurtà fil-livell tan-netwerk. Għalhekk, is-segmentazzjoni taħdem fi cluster Kubernetes, li huwa bbażat fuq it-tikkettar. Is-servizzi kollha għandhom ċerti tags li magħhom huma assoċjati d-drittijiet ta’ aċċess tas-servizzi għal ċerti riżorsi esterni/interni ġewwa jew barra l-cluster.

Hekk kif għamilna t-tranżizzjoni, rajna li Kubernetes kellu l-kapaċitajiet kollha ta 'Nomad, li konna użajna qabel, u żied ukoll ħafna affarijiet ġodda. Jista 'jiġi estiż permezz ta' plugins, u fil-fatt permezz ta 'tipi ta' riżorsi tad-dwana. Jiġifieri, għandek l-opportunità mhux biss li tuża xi ħaġa li tiġi ma 'Kubernetes barra mill-kaxxa, iżda li toħloq ir-riżors u s-servizz tiegħek stess li se jaqra r-riżors tiegħek. Dan jagħtik għażliet addizzjonali biex tespandi s-sistema tiegħek mingħajr ma jkollok bżonn terġa' tinstalla Kubernetes u mingħajr ma teħtieġ modifiki.

Eżempju ta’ użu bħal dan huwa Prometheus, li jaħdem ġewwa l-cluster tagħna ta’ Kubernetes. Sabiex jibda jiġbor metriċi minn servizz partikolari, jeħtieġ li nżidu tip addizzjonali ta 'riżorsa, l-hekk imsejjaħ moniter tas-servizz, mad-deskrizzjoni tas-servizz. Prometheus, minħabba l-fatt li jista 'jaqra tip ta' riżorsa apposta meta jitnieda f'Kubernetes, awtomatikament jibda jiġbor metriċi mis-sistema l-ġdida. Huwa pjuttost konvenjenti.

L-ewwel skjerament li għamilna lil Kubernetes kien f'Marzu 2018. U matul dan iż-żmien qatt ma esperjenzajna xi problemi magħha. Jaħdem pjuttost stabbli mingħajr bugs sinifikanti. Barra minn hekk, nistgħu nespanduha aktar. Illum għandna biżżejjed mill-kapaċitajiet li għandha, u nħobbu ħafna l-pass ta 'żvilupp ta' Kubernetes. Bħalissa, aktar minn 3000 kontenitur jinsabu f'Kubernetes. Il-cluster jokkupa diversi Nodi. Fl-istess ħin, huwa utli, stabbli u kontrollabbli ħafna.

Sors: www.habr.com

Żid kumment