{"id":33654,"date":"2019-10-31T21:53:58","date_gmt":"2019-10-31T18:53:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/deploj-prilozhenij-v-vm-nomad-i-kubernetes\/"},"modified":"2019-10-31T21:53:58","modified_gmt":"2019-10-31T18:53:58","slug":"deploj-prilozhenij-v-vm-nomad-i-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/deploj-prilozhenij-v-vm-nomad-i-kubernetes","title":{"rendered":"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sveiki visiem! Mani sauc P\u0101vels Agalecskis. Es str\u0101d\u0101ju par komandas vad\u012bt\u0101ju komand\u0101, kas izstr\u0101d\u0101 Lamoda pieg\u0101des sist\u0113mu. 2018. gad\u0101 es uzst\u0101ju uz konferences HighLoad++, un \u0161odien v\u0113los pied\u0101v\u0101t sava zi\u0146ojuma transkripciju.<\/p>\n<p>Mans temats ir velt\u012bts m\u016bsu uz\u0146\u0113muma pieredzei sist\u0113mu un pakalpojumu izvieto\u0161an\u0101 da\u017e\u0101d\u0101s vid\u0113s. S\u0101ksim no m\u016bsu pirmsv\u0113stures, kad m\u0113s visu sist\u0113mu izvietojumu veic\u0101m parastajos virtu\u0101lajos serveros, un nosl\u0113dzot ar pak\u0101penisku p\u0101reju no Nomad uz izvieto\u0161anu Kubernetes. Past\u0101st\u012b\u0161u, k\u0101p\u0113c m\u0113s to dar\u012bj\u0101m un k\u0101das probl\u0113mas mums rad\u0101s \u0161aj\u0101 proces\u0101.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"oqrb7dWECSo\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/oqrb7dWECSo\/hqdefault.jpg\" alt=\"Atska\u0146ot video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1>Lietojumprogrammu izvieto\u0161ana uz VM<\/h1>\n<p>\nS\u0101ksim ar to, ka pirms 3 gadiem visas uz\u0146\u0113muma sist\u0113mas un pakalpojumi tika izvietoti uz parastajiem virtu\u0101lajiem serveriem. Tehniski tas tika organiz\u0113ts t\u0101, ka visa m\u016bsu sist\u0113mu kods atrad\u0101s un tika uzb\u016bv\u0113ts autom\u0101tisk\u0101s b\u016bv\u0113\u0161anas veid\u0101, izmantojot Jenkins. Ar Ansible tas tika p\u0101rvietots no m\u016bsu versiju kontroles sist\u0113mas uz virtu\u0101lajiem serveriem. Pie tam katra sist\u0113ma, kas bija m\u016bsu uz\u0146\u0113mum\u0101, tika izvietota vismaz uz 2 serveriem: viens no tiem \u2014 uz head, otrs \u2014 uz tail. \u0160iem diviem serveriem bija piln\u012bgi identiskas konfigur\u0101cijas, jaudas un citi uzst\u0101d\u012bjumi. At\u0161\u0137ir\u012bba starp tiem bija tikai t\u0101da, ka head sa\u0146\u0113ma lietot\u0101ju trafiku, bet tail nekad sa\u0146\u0113ma lietot\u0101ju trafiku. <\/p>\n<p>K\u0101p\u0113c tas tika dar\u012bts? <\/p>\n<p>Kad m\u0113s izvietoj\u0101m jaunus m\u016bsu lietojumprogrammas laidienus, m\u0113s v\u0113l\u0113j\u0101mies nodro\u0161in\u0101t iesp\u0113jami neman\u0101mu izvieto\u0161anu, tas ir, bez ac\u012bmredzam\u0101m sek\u0101m lietot\u0101jiem. Tas tika pan\u0101kts, uzst\u0101dot n\u0101kamo sagatavoto laidienu uz tail ar Ansible. Tur cilv\u0113ki, kas veica izvieto\u0161anu, var\u0113ja p\u0101rbaud\u012bt un p\u0101rliecin\u0101ties, ka viss ir k\u0101rt\u012bb\u0101: visas metriskas, sada\u013cas un lietojumprogrammas darbojas; tiek palaisti pareizie skripti. Tikai p\u0113c tam, kad vi\u0146i p\u0101rliecin\u0101j\u0101s, ka viss ir k\u0101rt\u012bb\u0101, tvertne tika p\u0101rsl\u0113gta. Trafiks s\u0101ka iet uz serveri, kas l\u012bdz tam bija tail. Savuk\u0101rt tas, kas iepriek\u0161 bija head, palika bez lietot\u0101ju trafika, tom\u0113r ar iepriek\u0161\u0113jo m\u016bsu lietojumprogrammas versiju.<\/p>\n<p>T\u0101d\u0113j\u0101di lietot\u0101jiem tas bija nevainojami. P\u0101rsl\u0113g\u0161an\u0101s notika acumirkl\u012b, jo t\u0101 ir tikai slodzes l\u012bdzsvarot\u0101ja p\u0101rsl\u0113g\u0161ana. \u013boti viegli var atgriezties pie iepriek\u0161\u0113j\u0101s versijas, vienk\u0101r\u0161i atgrie\u017eot slodzes l\u012bdzsvarot\u0101ju atpaka\u013c. M\u0113s ar\u012b var\u0113j\u0101m p\u0101rliecin\u0101ties par lietojumprogrammas sagatavot\u012bbu ra\u017eo\u0161an\u0101 v\u0113l pirms lietot\u0101ju satiksmes iesaistes, kas bija \u013coti \u0113rti. <\/p>\n<p>K\u0101dus ieguvumus m\u0113s redz\u0113j\u0101m vis\u0101 \u0161aj\u0101 proces\u0101?<\/p>\n<ol>\n<li>Pirmk\u0101rt, tas ir diezgan <b>vienk\u0101r\u0161i darbojas.<\/b> Visiem ir skaidrs, k\u0101 darbojas \u0161\u0101da izvieto\u0161anas sh\u0113ma, jo liel\u0101k\u0101 da\u013ca cilv\u0113ku k\u0101dreiz ir izvietoju\u0161i parastos virtu\u0101los serverus.<\/li>\n<li>Tas ir diezgan <b>uzticami<\/b>, jo izvieto\u0161anas tehnolo\u0123ija ir vienk\u0101r\u0161a, ko izmantoju\u0161as t\u016bksto\u0161iem uz\u0146\u0113mumu. Miljoniem serveru tiek izvietoti tie\u0161i \u0161\u0101d\u0101 veid\u0101. Gr\u016bti kaut ko salauzt. <\/li>\n<li>Un visbeidzot, m\u0113s var\u0113j\u0101m ieg\u016bt <b>atom\u0101rus izvietojumus<\/b>. Izvietojumi, kas lietot\u0101jiem notiek acumirkl\u012b, bez man\u0101mas p\u0101rejas posma starp veco un jauno versiju. <\/li>\n<\/ol>\n<p>\nBet vis\u0101 \u0161aj\u0101 proces\u0101 m\u0113s ar\u012b redz\u0113j\u0101m da\u017eus tr\u016bkumus: <\/p>\n<ol>\n<li>Papildus ra\u017eo\u0161anas videi, izstr\u0101des videi, ir v\u0113l citas vides. Piem\u0113ram, qa un iepriek\u0161\u0113j\u0101 ra\u017eo\u0161an\u0101. Taj\u0101 br\u012bd\u012b mums bija daudz serveru un apm\u0113ram 60 pakalpojumu. T\u0101p\u0113c bija nepiecie\u0161ams <b>katram pakalpojumam uztur\u0113t aktu\u0101lo versiju <\/b>virtu\u0101laj\u0101 ma\u0161\u012bn\u0101. Turkl\u0101t, ja v\u0113laties atjaunin\u0101t bibliot\u0113kas vai instal\u0113t jaunas atkar\u012bbas, jums tas j\u0101dara vis\u0101s vid\u0113s. T\u0101pat bija nepiecie\u0161ams sinhroniz\u0113t laiku, kad pl\u0101nojat izvietot n\u0101kamo jauno versiju savai lietojumprogrammai, ar laiku, kad devops veiks nepiecie\u0161amos vides konfigur\u0101cijas. \u0160\u0101d\u0101 gad\u012bjum\u0101 ir viegli non\u0101kt situ\u0101cij\u0101, kad vide mums vair\u0101k\u0101s sec\u012bg\u0101s vid\u0113s at\u0161\u0137iras. Piem\u0113ram, QA vid\u0113 b\u016bs citas bibliot\u0113ku versijas, bet ra\u017eo\u0161an\u0101 \u2014 citas, kas rad\u012bs probl\u0113mas. <\/li>\n<li><b>Gr\u016bt\u012bbas, atjauninot atkar\u012bbas<\/b> j\u016bsu lietojumprogrammai. Tas nav atkar\u012bgs no jums, bet no citas komandas. Proti, no devops komandas, kas uztur serverus. Jums ir j\u0101uzdod vi\u0146iem atbilsto\u0161s uzdevums un j\u0101dod apraksts par to, ko v\u0113laties paveikt.<\/li>\n<li>Taj\u0101 laik\u0101 m\u0113s ar\u012b v\u0113l\u0113j\u0101mies sadal\u012bt m\u016bsu lielos monol\u012btos maz\u0101k\u0101s atsevi\u0161\u0137\u0101s pakalpojumu da\u013c\u0101s, saprazdami, ka to k\u013c\u016bs arvien vair\u0101k. Taj\u0101 br\u012bd\u012b mums jau bija vair\u0101k nek\u0101 100. Katram jaunajam pakalpojums nepiecie\u0161ams izveidot atsevi\u0161\u0137u jaunu virtu\u0101lo ma\u0161\u012bnu, kuru ar\u012b j\u0101p\u0101rvalda un j\u0101izvieto. Turkl\u0101t, nepiecie\u0161amas ne viena, bet vismaz divas ma\u0161\u012bnas. Tam visam kl\u0101t n\u0101k QA vide. Tas rada probl\u0113mas un apgr\u016btina jaunu sist\u0113mu izveidi un palai\u0161anu. <b>T\u0101d\u0113j\u0101di tas padara procesu sare\u017e\u0123\u012bt\u0101ku, d\u0101rg\u0101ku un ilg\u0101ku.<\/b><\/li>\n<\/ol>\n<p>\nT\u0101p\u0113c m\u0113s pie\u0146\u0113m\u0101m l\u0113mumu, ka b\u016bs \u0113rt\u0101k p\u0101riet no parasto virtu\u0101lo ma\u0161\u012bnu izvieto\u0161anas uz m\u016bsu lietot\u0146u izvieto\u0161anu Docker konteiner\u0101. Esot Docker, ir nepiecie\u0161ama sist\u0113ma, kas var\u0113s palaist lietotni klaster\u012b, jo konteineru vienk\u0101r\u0161i t\u0101pat nevar pacelt. Parasti ir v\u0113lme uzraudz\u012bt, cik konteineru ir pacelti, lai tie tiktu pacelti autom\u0101tiski. T\u0101p\u0113c mums bija j\u0101izv\u0113las p\u0101rvald\u012bbas sist\u0113ma. <\/p>\n<p>M\u0113s ilgi dom\u0101j\u0101m par to, kuru no t\u0101m var\u0113tu izv\u0113l\u0113ties. Paties\u012bb\u0101 taj\u0101 laik\u0101 m\u016bsu izplat\u012b\u0161anas tehnolo\u0123iju steks uz parastaj\u0101m virtu\u0101laj\u0101m server\u0113m bija nedaudz novecojis, jo tur bija ne pa\u0161u jaun\u0101ko oper\u0101ciju sist\u0113mu versijas. K\u0101d\u0101 br\u012bd\u012b pat tika izmantota FreeBSD, kuru nebija \u0113rti apkalpot. M\u0113s saprat\u0101m, ka j\u0101veic migr\u0101cija uz Docker p\u0113c iesp\u0113jas \u0101tr\u0101k. M\u016bsu DevOps speci\u0101listi apl\u016bkoja savu eso\u0161o pieredzi ar da\u017e\u0101dajiem risin\u0101jumiem un izv\u0113l\u0113j\u0101s sist\u0113mu, kas tiek saukta par Nomad. <\/p>\n<h1>P\u0101reja uz Nomad<\/h1>\n<p>\nNomad ir uz\u0146\u0113muma \u201cHashiCorp\u201d produkts. Vi\u0146i ir paz\u012bstami ar\u012b ar citiem risin\u0101jumiem:<\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/25dfbfe20b92f6e6865bdd8a2f15d8fa.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>\u00abConsul\u00bb<\/b> \u2014 t\u0101 ir l\u012bdzeklis pakalpojumu atkl\u0101\u0161anai.<\/p>\n<p><b>\u00abTerraform\u00bb<\/b> \u2014 t\u0101 ir sist\u0113ma serveru p\u0101rvald\u012bbai, kas \u013cauj jums tos konfigur\u0113t caur konfigur\u0101ciju, kas tiek saukta par infrastrukt\u016bru k\u0101 kodu.<\/p>\n<p><b>\u00abVagrant\u00bb<\/b> \u013cauj jums izvietot virtu\u0101l\u0101s ma\u0161\u012bnas lok\u0101li vai m\u0101ko\u0146os, izmantojot noteiktus konfigur\u0101cijas failus. <\/p>\n<p>Nomad mums taj\u0101 br\u012bd\u012b \u0161\u0137ita pietiekami vienk\u0101r\u0161s risin\u0101jums, uz kuru var\u0113ja \u0101tri p\u0101riet, nesasniedzot visu infrastrukt\u016bru. Turkl\u0101t to ir diezgan viegli apg\u016bt. T\u0101p\u0113c tie\u0161i to m\u0113s izv\u0113l\u0113j\u0101mies k\u0101 m\u016bsu konteineru p\u0101rvald\u012bbas sist\u0113mu. <\/p>\n<p>Kas nepiecie\u0161ams, lai visp\u0101r izvietotu savu sist\u0113mu Nomad? <\/p>\n<ol>\n<li>Pirmk\u0101rt, nepiecie\u0161ams <b>docker att\u0113ls<\/b> j\u016bsu lietotnes. Ir nepiecie\u0161ams to uzb\u016bv\u0113t un ievietot docker att\u0113lu kr\u0101tuv\u0113. M\u016bsu gad\u012bjum\u0101 tas ir artifactory - \u0161\u0101da sist\u0113ma, kas \u013cauj taj\u0101 izmantot da\u017e\u0101dus artefaktus da\u017e\u0101dos veidos. T\u0101 sp\u0113j glab\u0101t arh\u012bvus, docker att\u0113lus, PHP composer pakotnes, NPM pakotnes un t\u0101 t\u0101l\u0101k. <\/li>\n<li>T\u0101pat nepiecie\u0161ams<b> konfigur\u0101cijas fails<\/b>, kas pateiks Nomad, ko, kur un k\u0101d\u0101 daudzum\u0101 v\u0113laties izvietot. <\/li>\n<\/ol>\n<p>\nKad m\u0113s run\u0101jam par Nomad, inform\u0101cijas failu form\u0101t\u0101 tas izmanto HCL valodu, kas tiek \u012bsin\u0101ta k\u0101 <i>HashiCorp Configuration Language<\/i>. Tas ir supersets p\u0101r Yaml, kas \u013cauj jums aprakst\u012bt savu pakalpojumu Nomad terminos. <\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/bee3d1feedd52249c4325d8a3984a766.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTas \u013cauj pateikt, cik konteinerus v\u0113laties izvietot, no k\u0101diem att\u0113liem nodot tiem da\u017e\u0101dus parametrus izvieto\u0161anas laik\u0101. T\u0101d\u0113j\u0101di j\u016bs pieg\u0101d\u0101jat \u0161o failu Nomad, un tas palaid\u012bs konteinerus ra\u017eo\u0161an\u0101 saska\u0146\u0101 ar to. <\/p>\n<p>M\u016bsu gad\u012bjum\u0101 m\u0113s saprat\u0101m, ka vienk\u0101r\u0161i rakst\u012bt piln\u012bgi identiskus HCL failus katram pakalpojumam neb\u016btu diezgan \u0113rti, jo pakalpojumu ir daudz un da\u017ereiz v\u0113las tos atjaunin\u0101t. Ir gad\u012bjumi, kad viens pakalpojums tiek izvietots ne vien\u0101 eksempl\u0101r\u0101, bet vair\u0101kos da\u017e\u0101dos. Piem\u0113ram, viens no m\u016bsu ra\u017eo\u0161anas sist\u0113m\u0101m ir vair\u0101k nek\u0101 100 instan\u010du ra\u017eo\u0161an\u0101. Tie tiek palaisti no vieniem un tiem pa\u0161iem att\u0113liem, bet at\u0161\u0137iras ar konfigur\u0101cijas iestat\u012bjumiem un konfigur\u0101cijas failiem. <\/p>\n<p>T\u0101d\u0113\u013c m\u0113s nol\u0113m\u0101m, ka mums b\u016bs \u0113rti glab\u0101t visus m\u016bsu izvieto\u0161anas konfigur\u0101cijas failus vien\u0101 kop\u012bg\u0101 repozitorij\u0101. T\u0101d\u0113j\u0101di tie k\u013c\u016bst redzami: tos bija viegli atbalst\u012bt un var\u0113ja redz\u0113t, k\u0101di sist\u0113mas mums ir. Ja nepiecie\u0161ams, ar\u012b neb\u016bs gr\u016bti kaut ko atjaunin\u0101t vai main\u012bt. Jaunas sist\u0113mas pievieno\u0161ana ar\u012b nesag\u0101d\u0101s gr\u016bt\u012bbas \u2014 pietiek ar to, ka tiek izveidots konfigur\u0101cijas fails jaun\u0101 direktorij\u0101. Taj\u0101 atrodas faili: service.hcl, kas satur m\u016bsu pakalpojuma aprakstu, un vair\u0101ki env faili, kas \u013cauj \u0161im pakalpojumam, b\u016bdams izvietots ra\u017eo\u0161an\u0101, tikt konfigur\u0113tam. <\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/c0b0bdb763d3c3bb84fbc9e5dfecff82.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTom\u0113r da\u017eas m\u016bsu sist\u0113mas ir izvietotas ra\u017eo\u0161an\u0101 ne vien\u0101 eksempl\u0101r\u0101, bet vair\u0101kos uzreiz. T\u0101p\u0113c m\u0113s nol\u0113m\u0101m, ka mums b\u016bs \u0113rti glab\u0101t ne konfigur\u0101ciju nesak\u0101rtot\u0101 veid\u0101, bet to veidotos paraugus. Un k\u0101 veid\u0146u valodu m\u0113s izv\u0113l\u0113j\u0101mies <i>jinja 2<\/i>. \u0160\u0101d\u0101 form\u0101t\u0101 m\u0113s glab\u0101jam gan pa\u0161a pakalpojuma konfigur\u0101cijas, gan env-failus, kas ir nepiecie\u0161ami tam. <\/p>\n<p>Turkl\u0101t m\u0113s pievienoj\u0101m kop\u012bgu skriptu-izvietot\u0101ju repozitorij\u0101 visiem projektiem, kas \u013cauj palaist un izvietot j\u016bsu pakalpojumu ra\u017eo\u0161an\u0101, pareizaj\u0101 vid\u0113 un m\u0113r\u0137\u012b. Gad\u012bjum\u0101, ja m\u0113s p\u0101rv\u0113r\u0161am savu HCL konfigur\u0101ciju par veidni, tad HCL fails, kas agr\u0101k bija parasta Nomad konfigur\u0101cija, \u0161aj\u0101 gad\u012bjum\u0101 s\u0101k izskat\u012bties nedaudz cit\u0101d\u0101k.<\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/202472f109ba09798d592418b1774a29.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTas noz\u012bm\u0113, ka m\u0113s aizvietoj\u0101m da\u017eas vietas konfigur\u0101cijas ar main\u012bgo ievietojumiem, kas tiek \u0146emti no env-failiem vai cit\u0101m avotiem. Turkl\u0101t m\u0113s ieguv\u0101m iesp\u0113ju dinamiski veidot HCL failus, tas ir, m\u0113s varam izmantot ne tikai parastos main\u012bgo ievietojumus. T\u0101 k\u0101 jinja atbalsta ciklus un nosac\u012bjumus, taj\u0101 var izveidot konfigur\u0101cijas failus, kas main\u0101s atkar\u012bb\u0101 no t\u0101, kur tie\u0161i j\u016bs izvietojat savas lietotnes. <\/p>\n<p>Piem\u0113ram, j\u016bs v\u0113laties izvietot savu pakalpojumu pirms ra\u017eo\u0161anas un ra\u017eo\u0161an\u0101. Pie\u0146emsim, ka pirms ra\u017eo\u0161anas j\u016bs nev\u0113laties palaist cron-skriptus, bet vienk\u0101r\u0161i v\u0113laties redz\u0113t pakalpojumu uz atsevi\u0161\u0137a dom\u0113na, lai p\u0101rliecin\u0101tos, ka tas darbojas. Ikvienam, kur\u0161 izvieto pakalpojumu, process izskat\u0101s \u013coti vienk\u0101r\u0161i un caurredzami. Pietiek veikt faila deploy.sh izpildi, nor\u0101dot, kuru pakalpojumu v\u0113laties izvietot un k\u0101d\u0101 m\u0113r\u0137\u012b. Piem\u0113ram, ja v\u0113laties izvietot k\u0101du sist\u0113mu Krievij\u0101, Baltkrievij\u0101 vai Kazahst\u0101n\u0101. Tam pietiek tikai main\u012bt vienu no parametriem, un jums tiks izveidots pareizais konfigur\u0101cijas fails. <\/p>\n<p>Kad pakalpojums Nomad jau ir izvietots j\u016bsu klaster\u012b, tas izskat\u0101s \u0161\u0101di.<\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/60e2e2b5502936809d643d73c6d853e2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVispirms jums nepiecie\u0161ams k\u0101ds balans\u0113t\u0101js \u0101rpus\u0113, kas uz\u0146em visu lietot\u0101ju trafiku. Tas darbosies kop\u0101 ar Consul un uzzin\u0101s no t\u0101, kur, uz kuras mezgls atrodas konkr\u0113tais pakalpojums, kas atbilst attiec\u012bgajam dom\u0113na v\u0101rdam. <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/lv\/lir\/ipv4\/\"   title=\"IP adresi\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"585\">IP adresi<\/a> Pakalpojumi Consul par\u0101d\u0101s no pa\u0161a Nomad. T\u0101 k\u0101 \u0161ie ir vienas un t\u0101s pa\u0161as komp\u0101nijas produkti, tie ir diezgan cie\u0161i saist\u012bti. Var teikt, ka Nomad noklus\u0113jum\u0101 sp\u0113j re\u0123istr\u0113t visus taj\u0101 palaistos pakalpojumus Consul iek\u0161ien\u0113. <\/p>\n<p>P\u0113c tam, kad j\u016bsu \u0101r\u0113jais l\u012bdzsvarot\u0101js uzzina, uz kuru servisu nepiecie\u0161ams novirz\u012bt trafiku, vi\u0146\u0161 to novirza uz attiec\u012bgo konteineru vai vair\u0101kiem konteineriem, kas atbilst j\u016bsu lietojumprogrammai. Protams, ir j\u0101dom\u0101 ar\u012b par dro\u0161\u012bbu. Pat ja visi servisi tiek palaisti uz vien\u0101m un t\u0101m pa\u0161\u0101m virtu\u0101laj\u0101m ma\u0161\u012bn\u0101m konteineros, parasti ir nepiecie\u0161ams aizliegt br\u012bvu piek\u013cuvi no jebkura servisa uz jebkuru citu. M\u0113s sasniedz\u0101m \u0161o ar segment\u0101ciju. Katrs serviss tika palaists sav\u0101 virtu\u0101laj\u0101 t\u012bkl\u0101, kur\u0101 bija noteikti mar\u0161rut\u0113\u0161anas noteikumi un noteikumi par piek\u013cuves at\u013cau\u0161anu\/aizlieg\u0161anu cit\u0101m sist\u0113m\u0101m un servisiem. Tie var\u0113ja atrasties gan \u0161aj\u0101 klaster\u012b, gan \u0101rpus t\u0101. Piem\u0113ram, ja v\u0113laties aizliegt servisam piek\u013c\u016bt konkr\u0113tai datub\u0101zei, to var izdar\u012bt, segment\u0113jot t\u012bkla l\u012bmen\u012b. T\u0101d\u0113j\u0101di pat nepareizi j\u016bs nevarat nejau\u0161i piesl\u0113gties no test\u0113\u0161anas vides j\u016bsu ra\u017eo\u0161anas datub\u0101zei.<\/p>\n<p>Cik cilv\u0113kresursu mums izmaks\u0101ja p\u0101rejas process? <\/p>\n<p>Aptuveni 5-6 m\u0113ne\u0161us aiz\u0146\u0113ma visas komp\u0101nijas p\u0101reja uz Nomad. M\u0113s p\u0101rg\u0101j\u0101m pakalpojumu l\u012bmen\u012b, bet diezgan \u0101tr\u0101 temp\u0101. Katrai komandai bija j\u0101izveido savi konteineri saviem servisiem. <\/p>\n<p>Mums ir pie\u0146emts t\u0101ds pieejas modelis, ka katra komanda pati atbild par savu sist\u0113mu docker att\u0113liem. DevOps nodro\u0161ina kop\u0113jo infrastrukt\u016bru, kas nepiecie\u0161ama izvieto\u0161anai, t.i., atbalstu pa\u0161u klasterim, atbalstu CI sist\u0113mai un t\u0101 t\u0101l\u0101k. Un taj\u0101 br\u012bd\u012b mums vair\u0101k nek\u0101 60 sist\u0113mas bija p\u0101rg\u0101ju\u0161as uz Nomad, radot apm\u0113ram 2000 konteineru. <\/p>\n<p>DevOps atbild par kop\u0113jo infrastrukt\u016bru, kas saist\u012bta ar izvieto\u0161anu, ar serveriem. Savuk\u0101rt katra izstr\u0101des komanda atbild par savu konkr\u0113to sist\u0113mu konteineru \u012bsteno\u0161anu, jo tie\u0161i komanda zina, kas tai visp\u0101r nepiecie\u0161ams attiec\u012bgaj\u0101 konteiner\u0101.<\/p>\n<h1>Iemesli atteik\u0161an\u0101s no Nomad<\/h1>\n<p>\nK\u0101dus ieguvumus m\u0113s guv\u0101m, p\u0101rejot uz izvieto\u0161anu, izmantojot Nomad un docker, tostarp?<\/p>\n<ol>\n<li>M\u0113s<b> nodro\u0161in\u0101j\u0101m vien\u0101dus apst\u0101k\u013cus<\/b> vis\u0101m vid\u0113m. Izstr\u0101d\u0113, QA vid\u0113, priek\u0161produkcij\u0101 un ra\u017eo\u0161an\u0101 tiek izmantoti vieni un tie pa\u0161i konteineru att\u0113li ar vien\u0101m un t\u0101m pa\u0161\u0101m atkar\u012bb\u0101m. L\u012bdz ar to jums praktiski nav iesp\u0113ju, ka ra\u017eo\u0161an\u0101 nok\u013c\u016bs kaut kas cits, ko iepriek\u0161 esat test\u0113ju\u0161i lok\u0101li vai test\u0113\u0161anas vid\u0113. <\/li>\n<li>K\u0101 ar\u012b m\u0113s noskaidroj\u0101m, ka ir pietiekami <b>viegls jaun\u0101 pakalpojuma pievieno\u0161anas process<\/b>. Jebkuras jaunas sist\u0113mas attiec\u012bb\u0101 uz izvieto\u0161anu tiek palaistas \u013coti vienk\u0101r\u0161i. Pietiek doties uz repozitoriju, kur\u0101 tiek glab\u0101ti konfigur\u0101cijas faili, pievienot tur jaunu konfigur\u0101ciju j\u016bsu sist\u0113mai, un jums viss ir gatavs. J\u016bs varat izvietot savu sist\u0113mu ra\u017eo\u0161an\u0101 bez papildu piep\u016bles no devops puses. <\/li>\n<li>Viss <b>konfigur\u0101cijas faili<\/b> vien\u0101 kop\u0113j\u0101 repozitorij\u0101 <b>izr\u0101d\u012bj\u0101s p\u0101rskat\u0101mi<\/b>. Taj\u0101 br\u012bd\u012b, kad m\u0113s izvietoj\u0101m m\u016bsu sist\u0113mas ar <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/lv\/vps\/\"   title=\"virtu\u0101los serverus\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"791\">virtu\u0101los serverus<\/a>, m\u0113s izmantoj\u0101m Ansible, kur\u0101 konfigur\u0101cijas faili atrad\u0101s vien\u0101 un taj\u0101 pa\u0161\u0101 repozitorij\u0101. Tom\u0113r vairumam izstr\u0101d\u0101t\u0101ju str\u0101d\u0101t ar to bija nedaudz gr\u016bt\u0101k. Tagad konfigur\u0101ciju un koda apjoms, ko nepiecie\u0161ams pievienot, lai izvietotu pakalpojumu, k\u013cuva daudz maz\u0101ks. Plus, devops ir \u013coti viegli to labot vai main\u012bt. P\u0101rveidojumu gad\u012bjum\u0101, piem\u0113ram, uz jauno Nomad versiju, vi\u0146i var \u0146emt un masveid\u0101 atjaunin\u0101t visus oper\u0101cijas failus, kas atrodas vien\u0101 un taj\u0101 pa\u0161\u0101 viet\u0101.<\/li>\n<\/ol>\n<p>\nTom\u0113r m\u0113s sask\u0101r\u0101mies ar\u012b ar da\u017eiem tr\u016bkumiem: <\/p>\n<p>Izr\u0101d\u012bj\u0101s, ka m\u0113s <b>nevar\u0113j\u0101m sasniegt nevainojamu izvietojumu <\/b>gad\u012bjum\u0101 ar Nomad. Izvietojot konteinerus no da\u017e\u0101d\u0101m vid\u0113m, var\u0113ja gad\u012bties, ka tas tika palaists, un Nomad to uzskat\u012bja par gatavu pie\u0146emt trafiku. Tas notika v\u0113l pirms aplik\u0101cija iek\u0161\u0101 bija pasp\u0113jusi start\u0113t. \u0160\u012b iemesla d\u0113\u013c sist\u0113ma uz \u012bsu laiku s\u0101ka izsniegt 500. k\u013c\u016bdas, jo trafiks s\u0101ka pl\u016bst uz konteineru, kuru v\u0113l nebija gatavs pie\u0146emt. <\/p>\n<p>M\u0113s sask\u0101r\u0101mies ar vair\u0101kiem <b>k\u013c\u016bd\u0101m<\/b>. Visb\u016btisk\u0101kais k\u013c\u016bdas punkts ir tas, ka Nomad ne \u012bpa\u0161i labi uztver lielu klasteri, ja jums ir daudz sist\u0113mu un konteineru. Kad v\u0113laties iz\u0146emt apkalpo\u0161an\u0101 vienu no serveriem, kas ir iek\u013cauts Nomad klaster\u012b, past\u0101v pietiekami liela iesp\u0113ja, ka klasteris j\u016btas slikti un sabr\u016bk. Da\u013ca konteineru var, piem\u0113ram, nokrist un neuzcelties \u2014 tas jums v\u0113l\u0101k izmaks\u0101s \u013coti d\u0101rgi, ja visas j\u016bsu sist\u0113mas atrodas ra\u017eo\u0161an\u0101 tie\u0161i klaster\u012b, ko p\u0101rvalda Nomad. <\/p>\n<p>T\u0101p\u0113c m\u0113s nol\u0113m\u0101m padom\u0101t, kur m\u0113s dosimies t\u0101l\u0101k. Taj\u0101 br\u012bd\u012b m\u0113s daudz lab\u0101k apzin\u0101j\u0101mies, ko v\u0113lamies sasniegt. Proti: m\u0113s v\u0113lamies uzticam\u012bbu, nedaudz vair\u0101k funkciju, nek\u0101 sniedz Nomad, un nobriedu\u0161u, stabil\u0101ku sist\u0113mu. <\/p>\n<p>\u0160aj\u0101 zi\u0146\u0101 m\u016bsu izv\u0113le krita uz Kubernetes k\u0101 uz vispopul\u0101r\u0101ko platformu klasteru palai\u0161anai. \u012apa\u0161i \u0146emot v\u0113r\u0101, ka m\u016bsu konteineru izm\u0113rs un skaits bija pietiekami liels. \u0160\u0101diem m\u0113r\u0137iem Kubernetes \u0161\u0137ita vispiem\u0113rot\u0101k\u0101 sist\u0113ma no t\u0101m, kuras m\u0113s var\u0113j\u0101m apskat\u012bt. <\/p>\n<h1>P\u0101reja uz Kubernetes<\/h1>\n<p>\nNedaudz past\u0101st\u012b\u0161u par to, k\u0101di ir galvenie Kubernetes j\u0113dzieni un k\u0101 tie at\u0161\u0137iras no Nomad. <\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/5723a69309f387e6cc6c5959b62ca18b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVispirms pats pamata j\u0113dziens Kubernetes ir pod. <b>Pod<\/b> \u2014 t\u0101 ir viena vai vair\u0101ku konteineru grupa, kas vienm\u0113r tiek palaista kop\u0101. Un tie darbojas t\u0101, it k\u0101 vienm\u0113r b\u016btu stingri vien\u0101 virtu\u0101l\u0101 ma\u0161\u012bn\u0101. Tie ir pieejami viens otram pa IP adresi 127.0.0.1 uz da\u017e\u0101diem portiem. <\/p>\n<p>Pie\u0146emot, ka jums ir PHP lietojumprogramma, kas sast\u0101v no nginx un php-fpm \u2013 klasisk\u0101 sh\u0113ma. Dr\u012bz\u0101k j\u016bs v\u0113l\u0113sieties, lai gan nginx, gan php-fpm konteineri vienm\u0113r b\u016btu kop\u0101. Kubernetes \u013cauj to sasniegt, aprakstot tos k\u0101 vienu kop\u012bgu pod. Tie\u0161i to m\u0113s nevar\u0113j\u0101m ieg\u016bt, izmantojot Nomad.<\/p>\n<p>Otrs j\u0113dziens ir <b>deployment<\/b>. Proti, pod pats par sevi ir efem\u0113ra lieta, t\u0101 tiek palaista un paz\u016bd. Vai v\u0113laties vispirms nogalin\u0101t visus savus iepriek\u0161\u0113jos konteinerus, un p\u0113c tam uzreiz palaist jaun\u0101s versijas, vai tom\u0113r v\u0113laties t\u0101s izlai\u017eot pak\u0101peniski \u2013 tie\u0161i par \u0161o procesu atbild j\u0113dziens deployment. Tas apraksta, k\u0101 j\u016bs izvieto savus podus, k\u0101d\u0101 daudzum\u0101 un k\u0101 tos atjaunot. <\/p>\n<p>Tre\u0161ais j\u0113dziens ir <b>service<\/b>. J\u016bsu service faktiski ir j\u016bsu sist\u0113ma, kas pie\u0146em noteiktu datu pl\u016bsmu un p\u0113c tam novirza to uz vienu vai vair\u0101kiem podiem, kas atbilst j\u016bsu servisam. Tas noz\u012bm\u0113, ka tas \u013cauj nor\u0101d\u012bt, ka visa ien\u0101ko\u0161\u0101 datu pl\u016bsma uz konkr\u0113tu servisu ar noteiktu nosaukumu ir j\u0101nos\u016bta tie\u0161i uz \u0161iem podiem. Turkl\u0101t tas nodro\u0161ina jums datu pl\u016bsmas balans\u0113\u0161anu. Tas noz\u012bm\u0113, ka j\u016bs varat palaist divus j\u016bsu lietojumprogrammas podus, un visa ien\u0101ko\u0161\u0101 datu pl\u016bsma tiks vienm\u0113r\u012bgi l\u012bdzsvarota starp attiec\u012bgajiem \u0161\u012b servisa podiem.<\/p>\n<p>Un ceturt\u0101 pamatj\u0113dziena \u2014 <b>Egress<\/b>. Tas ir serviss, kas tiek palaists Kubernetes klaster\u012b. Tas kalpo k\u0101 \u0101r\u0113jais slodzes balans\u0113t\u0101js, kas pie\u0146em visus piepras\u012bjumus. Izmantojot Kubernetes Ingress API, var noteikt, kur \u0161os piepras\u012bjumus nos\u016bt\u012bt. Turkl\u0101t vi\u0146\u0161 to dara \u013coti elast\u012bgi. J\u016bs varat pateikt, ka visi piepras\u012bjumi uz \u0161o hostu un t\u0101du URL tiek nos\u016bt\u012bti uz \u0161o servisu. Savuk\u0101rt \u0161os piepras\u012bjumus, kas n\u0101k uz \u0161o hostu un citu URL, nos\u016bt\u0101m uz citu servisu. <\/p>\n<p>Visvair\u0101k satrieco\u0161ais no izstr\u0101d\u0101t\u0101ja perspekt\u012bvas ir tas, ka j\u016bs varat patst\u0101v\u012bgi vad\u012bt visu \u0161o procesu. Nor\u0101dot Ingress konfigur\u0101ciju, varat visu ien\u0101ko\u0161o datu pl\u016bsmu, kas n\u0101k uz noteiktu API, nos\u016bt\u012bt uz atsevi\u0161\u0137iem konteineriem, kas piem\u0113ram, ir uzrakst\u012bti Go. Bet \u0161o datu pl\u016bsmu, kas n\u0101k uz to pa\u0161u dom\u0113nu, bet uz citu URL, nos\u016bt\u012bt uz konteineriem, kas uzrakst\u012bti PHP, kur ir daudz lo\u0123ikas, bet tie nav \u013coti \u0101tri.<\/p>\n<p>Ja sal\u012bdzina visus \u0161os j\u0113dzienus ar Nomad, var teikt, ka pirmie tr\u012bs j\u0113dzieni kopum\u0101 veido Service. Savuk\u0101rt p\u0113d\u0113jais j\u0113dziens Nomad iek\u0161ien\u0113 neb\u016bt nav. M\u0113s to aizvietoj\u0101m ar \u0101r\u0113ju slodzes balans\u0113t\u0101ju: tas var b\u016bt haproxy, nginx, nginx+ un t\u0101 t\u0101l\u0101k. Gad\u012bjum\u0101 ar Kubernetes jums nav j\u0101ievie\u0161 \u0161is papildu j\u0113dziens atsevi\u0161\u0137i. Tom\u0113r, ja paskat\u0101s uz Ingress iek\u0161ien\u0113, tad tas ir vai nu nginx, vai haproxy, vai traefik, bet k\u0101da veid\u0101 ieb\u016bv\u0113ts Kubernetes. <\/p>\n<p>Visi manis aprakst\u012btie j\u0113dzieni ir, b\u016bt\u012bb\u0101, resursi, kas past\u0101v Kubernetes klaster\u012b. To aprakst\u012b\u0161anai Kubernetes izmanto yaml form\u0101tu, kas ir las\u0101m\u0101ks un ierast\u0101ks nek\u0101 HCL faili Nomad gad\u012bjum\u0101. Ta\u010du struktur\u0101li tie apraksta, piem\u0113ram, podu, to pa\u0161u. Vi\u0146i saka \u2014 v\u0113los izvietot noteiktus podus tur, ar noteiktiem att\u0113liem, noteikt\u0101 daudzum\u0101. <\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/13836e7474b377a5e6b05112a53bfedd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTurkl\u0101t m\u0113s saprat\u0101m, ka nev\u0113lamies manu\u0101li izveidot katru resursu: deployment, pakalpojumus, Ingress un citus. T\u0101 viet\u0101 m\u0113s v\u0113l\u0113j\u0101mies, lai izvieto\u0161anas laik\u0101 katru m\u016bsu sist\u0113mu aprakst\u012btu Kubernetes terminolo\u0123ij\u0101, lai neb\u016btu nepiecie\u0161ams roku darbs, atk\u0101rtojot visas nepiecie\u0161am\u0101s resursu atkar\u012bbas. \u0160\u0101dai sist\u0113mai, kas \u013c\u0101va mums to paveikt, tika izv\u0113l\u0113ts Helm. <\/p>\n<h1>Pamata j\u0113dzieni Helm<\/h1>\n<p>\nHelm \u2013 tas ir <b>pakot\u0146u p\u0101rvaldnieks<\/b> Kubernetes. Tas ir \u013coti l\u012bdz\u012bgs tam, k\u0101 darbojas pakot\u0146u p\u0101rvaldnieki programm\u0113\u0161anas valod\u0101s. Tie \u013cauj jums uzglab\u0101t pakalpojumu, kas sast\u0101v, piem\u0113ram, no deployment nginx, deployment php-fpm, konfigur\u0101cijas Ingress, configmaps (t\u0101s ir entit\u0101tes, kas \u013cauj jums nor\u0101d\u012bt env un citus parametrus j\u016bsu sist\u0113mai) k\u0101 t\u0101 d\u0113v\u0113tos chart. Turkl\u0101t Helm <b>darbojas virs Kubernetes<\/b>. Tas nav k\u0101da sist\u0113ma, kas st\u0101v mal\u0101, bet dr\u012bz\u0101k v\u0113l viens pakalpojums, kas darbojas kub\u0101. J\u016bs mijiedarbojaties ar to caur t\u0101 API, izmantojot konsoles komandu. T\u0101s \u0113rtums un priek\u0161roc\u012bba ir t\u0101da, ka pat ja helm saboj\u0101jas vai j\u016bs to izdz\u0113s\u012bsiet no klastera, j\u016bsu pakalpojumi nepazud\u012bs, jo helm pamat\u0101 kalpo tikai sist\u0113mas palai\u0161anai. Par pakalpojumu darb\u012bbu un st\u0101vokli t\u0101l\u0101k atbild pats Kubernetes. <\/p>\n<p>M\u0113s ar\u012b saprat\u0101m, ka <b>\u0161ablon\u0113\u0161ana<\/b>, ko l\u012bdz \u0161im bij\u0101m spiesti veikt pa\u0161i, ievie\u0161ot jinja m\u016bsu konfigur\u0101cij\u0101s, ir viena no galvenaj\u0101m helm funkcij\u0101m. Visas konfigur\u0101cijas, kuras izveidojat sav\u0101m sist\u0113m\u0101m, tiek uzglab\u0101tas helm \u0161ablonu veid\u0101, kas nedaudz atg\u0101dina jinja, ta\u010du paties\u012bb\u0101 izmanto Go valodas \u0161ablon\u0113\u0161anu, kur\u0101 ir uzrakst\u012bts helm, t\u0101pat k\u0101 Kubernetes. <\/p>\n<p>Helm pievieno v\u0113l da\u017eas papildu defin\u012bcijas. <\/p>\n<p><b>Chart<\/b> \u2014 tas ir j\u016bsu pakalpojuma apraksts. Citos pakot\u0146u p\u0101rvaldniekos to d\u0113v\u0113tu par pakotni, bundle vai kaut ko taml\u012bdz\u012bgu. \u0160eit tas tiek d\u0113v\u0113ts par chart. <\/p>\n<p><b>Values <\/b>\u2013 t\u0101s ir main\u012bg\u0101s v\u0113rt\u012bbas, kuras v\u0113laties izmantot, lai izveidotu savus konfigur\u0101cijas no \u0161abloniem. <\/p>\n<p><b>Izlaidums<\/b>Katru reizi, kad pakalpojums, kas tiek izvietots ar helm pal\u012bdz\u012bbu, sa\u0146em inkrement\u0101lo versiju. Helm atceras, k\u0101ds bija pakalpojuma konfigur\u0101cija iepriek\u0161\u0113j\u0101, p\u0101ris iepriek\u0161\u0113j\u0101 izdevum\u0101 un t\u0101 t\u0101l\u0101k. T\u0101p\u0113c, ja nepiecie\u0161ams atgriezties atpaka\u013c, pietiek izpild\u012bt komandu helm callback, nor\u0101dot iepriek\u0161\u0113jo versiju. Pat ja attiec\u012bg\u0101 konfigur\u0101cija j\u016bsu kr\u0101tuv\u0113 br\u012bdi atgrie\u0161an\u0101s nav pieejama, helm tom\u0113r atceras, k\u0101 t\u0101 bija, un atgriez\u012bs j\u016bsu sist\u0113mu taj\u0101 st\u0101vokl\u012b, k\u0101d\u0101 t\u0101 bija iepriek\u0161\u0113j\u0101 izdevum\u0101. <\/p>\n<p>Ja gad\u012bjum\u0101, kad m\u0113s izmantojam helm, parast\u0101s konfigur\u0101cijas Kubernetes ar\u012b p\u0101rv\u0113r\u0161as par \u0161abloniem, kuros ir iesp\u0113ja izmantot main\u012bg\u0101s, funkcijas, piem\u0113rot nosac\u012bjumus. T\u0101d\u0113j\u0101di, j\u016bs varat veidot sava pakalpojuma konfigur\u0101ciju atkar\u012bb\u0101 no vides.<\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/b70ba431211038eacf911ba3aee22363.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPraktiski m\u0113s izlem\u0101m r\u012bkoties nedaudz cit\u0101di, nek\u0101 to dar\u012bj\u0101m gad\u012bjum\u0101 ar Nomad. Ja Nomad vien\u0101 kr\u0101tuv\u0113 tika glab\u0101tas gan konfigur\u0101cijas izvieto\u0161anai, gan n-main\u012bgie, kas nepiecie\u0161ami m\u016bsu pakalpojuma izvieto\u0161anai, tad \u0161eit m\u0113s nol\u0113m\u0101m tos sadal\u012bt div\u0101s atsevi\u0161\u0137\u0101s kr\u0101tuv\u0113s. Kr\u0101tuv\u0113 \"deploy\" tiek glab\u0101ti tikai n-main\u012bgie, kas nepiecie\u0161ami izvieto\u0161anai, bet kr\u0101tuv\u0113 \"helm\" tiek glab\u0101tas konfigur\u0101cijas vai charti.<\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/4add11a8f9d9a9244127f0b07d027fa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKo tas mums deva? <\/p>\n<p>Neskatoties uz to, ka pa\u0161os konfigur\u0101cijas failos m\u0113s neglab\u0101jam k\u0101dus patiesi jut\u012bgus datus, piem\u0113ram, paraugus uz datub\u0101z\u0113m. Tie tiek glab\u0101ti k\u0101 secrets Kubernetes, tom\u0113r tur joproj\u0101m ir atsevi\u0161\u0137as lietas, pie kur\u0101m m\u0113s negribam \u013caut piek\u013c\u016bt visiem. T\u0101p\u0113c piek\u013cuve kr\u0101tuv\u0113m \"deploy\" ir ierobe\u017eot\u0101ka, bet kr\u0101tuve \"helm\" satur tikai pakalpojuma aprakstu. \u0160\u012b iemesla d\u0113\u013c taj\u0101 dro\u0161i var pieksties pla\u0161\u0101kam personu lokam. <\/p>\n<p>\u0145emot v\u0113r\u0101, ka mums ir ne tikai ra\u017eo\u0161anas, bet ar\u012b citas vides, t\u0101d\u0113j\u0101di, pateicoties \u0161\u0101dai sadalei, m\u0113s varam atk\u0101rtoti izmantot m\u016bsu helm chartus, lai izvietotu pakalpojumus ne tikai ra\u017eo\u0161an\u0101, bet ar\u012b, piem\u0113ram, QA vid\u0113. Pat t\u0101d\u0101 veid\u0101, lai tos izveidotu lok\u0101li, izmantojot <i>Minikube<\/i> \u2014 t\u0101 ir \u0161\u0101da lieta lok\u0101lai Kubernetes palai\u0161anai. <\/p>\n<p>Katrs repozitorijs satur atsevi\u0161\u0137as direktorijas katram pakalpojumam. Tas noz\u012bm\u0113, ka katr\u0101 direktorij\u0101 atrodas veidnes, kas saist\u012btas ar konkr\u0113to diagrammu un apraksta resursus, kas j\u0101izvieto, lai uzs\u0101ktu m\u016bsu sist\u0113mu. Repzitorij\u0101 \u201edeploy\u201d m\u0113s esam atst\u0101ju\u0161i tikai envs. \u0160aj\u0101 gad\u012bjum\u0101 m\u0113s neizmantoj\u0101m jinja veid\u0146u veido\u0161anu, jo helm nodro\u0161ina veid\u0146u veido\u0161anu tie\u0161i ieb\u016bv\u0113t\u0101 veid\u0101 \u2013 t\u0101 ir viena no t\u0101 galvenaj\u0101m funkcij\u0101m. <\/p>\n<p>M\u0113s esam atst\u0101ju\u0161i izvieto\u0161anas skriptu \u2013 deploy.sh, kas vienk\u0101r\u0161o un standartiz\u0113 izvieto\u0161anas palai\u0161anu ar helm. T\u0101d\u0113j\u0101di, ikvienam, kur\u0161 v\u0113las izvietot, izvieto\u0161anas saskarne izskat\u0101s tie\u0161i t\u0101pat k\u0101 bija gad\u012bjum\u0101, ja to veica ar Nomad. T\u0101ds pats deploy.sh, j\u016bsu pakalpojuma nosaukums un vieta, kur v\u0113laties to izvietot. Tas noved pie t\u0101, ka tiek palaists helm. Tas savuk\u0101rt apkopo konfigur\u0101cijas no veidn\u0113m, aizvieto taj\u0101s nepiecie\u0161am\u0101s values-failes un p\u0113c tam izvieto, palaidams t\u0101s Kubernetes. <\/p>\n<h1>Secin\u0101jumi<\/h1>\n<p>\nKubernetes pakalpojums izskat\u0101s sare\u017e\u0123\u012bt\u0101ks nek\u0101 Nomad. <\/p>\n<p><img decoding=\"async\" alt=\"Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/5a9b5636ab4721acde096fea986ba38b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0160eit izejo\u0161ais datu pl\u016bsma non\u0101k Ingress. Tas ir tie\u0161i priek\u0161\u0113jais kontrolieris, kas pie\u0146em visus piepras\u012bjumus un p\u0113c tam s\u016bta tos uz attiec\u012bgajiem pakalpojumiem, kas atbilst piepras\u012bjumam. Tas tos nosaka, pamatojoties uz konfigur\u0101cij\u0101m, kas ir da\u013ca no j\u016bsu lietojumprogrammas apraksta helm un kuras izstr\u0101d\u0101t\u0101ji nosaka pa\u0161i. Pakalpojums p\u0113c tam s\u016bta piepras\u012bjumus uz saviem podiem, tas ir, konkr\u0113t\u0101m konteiner\u0113m, l\u012bdzsvarojot ien\u0101ko\u0161o datu pl\u016bsmu starp vis\u0101m kontein\u0113riem, kas pieder \u0161im pakalpojumam. Un, protams, nevajadz\u0113tu aizmirst par to, ka no t\u012bkla dro\u0161\u012bbas viedok\u013ca m\u0113s nedr\u012bkstam doties nekur. T\u0101d\u0113\u013c Kubernetes klastra iek\u0161ien\u0113 darbojas segment\u0101cija, kas balst\u0101s uz mar\u0137\u0113\u0161anu. Vis\u0101m pakalpojumiem ir noteikti mar\u0137\u0113jumi, pie kuriem ir saist\u012btas pakalpojumu piek\u013cuves ties\u012bbas attiec\u012bb\u0101 uz da\u017e\u0101diem \u0101r\u0113jiem \/ iek\u0161\u0113jiem resursiem iek\u0161pus\u0113 vai \u0101rpus klastera. <\/p>\n<p>P\u0101rej\u0101 gad\u012bjum\u0101 m\u0113s redz\u0113j\u0101m, ka Kubernetes pied\u0101v\u0101 visas iesp\u0113jas, ko iepriek\u0161 nodro\u0161in\u0101ja Nomad, ko m\u0113s izmantoj\u0101m, k\u0101 ar\u012b pievieno daudz jauna. To var papla\u0161in\u0101t, izmantojot spraud\u0146us, praktiski caur piel\u0101gotajiem resursu veidiem. Tas noz\u012bm\u0113, ka jums ir iesp\u0113ja ne tikai izmantot to, kas n\u0101k kop\u0101 ar Kubernetes, bet ar\u012b izveidot savu resursu un pakalpojumu, kas las\u012bs j\u016bsu resursu. Tas sniedz papildu iesp\u0113jas j\u016bsu sist\u0113mas papla\u0161in\u0101\u0161anai bez nepiecie\u0161am\u012bbas p\u0101rinstal\u0113t Kubernetes un bez vajadz\u012bbas veikt izmai\u0146as. <\/p>\n<p>Piem\u0113rs t\u0101dai izmanto\u0161anai ir Prometheus, kas darbojas m\u016bsu Kubernetes klaster\u012b. Lai tas s\u0101ktu v\u0101kt metrikas no k\u0101da pakalpojuma, mums j\u0101papildina pakalpojuma apraksts ar papildu resursu veidu, t\u0101 saucamo pakalpojuma monitoru. Prometheus, sp\u0113jot las\u012bt piel\u0101goto resursu veidus, autom\u0101tiski s\u0101k v\u0101kt metrikas no jaun\u0101s sist\u0113mas. Tas ir diezgan \u0113rti. <\/p>\n<p>Pirmais nolikums, ko m\u0113s veic\u0101m Kubernetes, bija 2018. gada mart\u0101. Un kop\u0161 t\u0101 laika m\u0113s nekad neesam sask\u0101ru\u0161ies ar nek\u0101das probl\u0113m\u0101m. Tas darbojas diezgan stabil\u012bgi bez b\u016btiskiem k\u013c\u016bd\u0101m. Turkl\u0101t m\u0113s to varam t\u0101l\u0101k papla\u0161in\u0101t. \u0160odien mums pietiek ar iesp\u0113j\u0101m, kas taj\u0101 ir, un mums \u013coti pat\u012bk Kubernetes att\u012bst\u012bbas temps. Pa \u0161odienai vair\u0101k nek\u0101 3000 konteineru ir Kubernetes. Klasteris aptver vair\u0101kus mezglus. Taj\u0101 pa\u0161\u0101 laik\u0101 tas ir apkalpots, stabils un \u013coti kontrol\u0113ts.<br \/>\n<br \/>Avots: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/lamoda\/blog\/451644\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u0410\u0433\u0430\u043b\u0435\u0446\u043a\u0438\u0439. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0442\u0438\u043c\u043b\u0438\u0434\u043e\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 Lamoda. \u0412 2018 \u0433\u043e\u0434\u0443 \u044f \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u043b \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 HighLoad++, \u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u0430. \u041c\u043e\u044f \u0442\u0435\u043c\u0430 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043e\u043f\u044b\u0442\u0443 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u043e \u0434\u0435\u043f\u043b\u043e\u044e \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b. \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u043d\u0430\u0448\u0438\u0445 \u0434\u043e\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0440\u0435\u043c\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u0435\u043f\u043b\u043e\u0438\u043b\u0438 \u0432\u0441\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25343,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33654","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u0410\u0433\u0430\u043b\u0435\u0446\u043a\u0438\u0439. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0442\u0438\u043c\u043b\u0438\u0434\u043e\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 Lamoda.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/deploj-prilozhenij-v-vm-nomad-i-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0414\u0435\u043f\u043b\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 VM, Nomad \u0438 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u0410\u0433\u0430\u043b\u0435\u0446\u043a\u0438\u0439. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0442\u0438\u043c\u043b\u0438\u0434\u043e\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 Lamoda.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/deploj-prilozhenij-v-vm-nomad-i-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:53:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:53:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Lietojumprogrammu izvieto\u0161ana VM, Nomad un Kubernetes | ProHoster","description":"Sveiki visiem! Mani sauc P\u0101vels Agalecskis. Es esmu komandas l\u012bderis komand\u0101, kas izstr\u0101d\u0101 Lamoda pieg\u0101des sist\u0113mu.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/deploj-prilozhenij-v-vm-nomad-i-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0414\u0435\u043f\u043b\u043e\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 VM, Nomad \u0438 Kubernetes | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u0410\u0433\u0430\u043b\u0435\u0446\u043a\u0438\u0439. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0442\u0438\u043c\u043b\u0438\u0434\u043e\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 Lamoda.","og:url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/deploj-prilozhenij-v-vm-nomad-i-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:53:58+00:00","article:modified_time":"2019-10-31T18:53:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33654","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-02-08 20:38:40","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:36:34","updated":"2026-02-08 20:38:40","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/33654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=33654"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/33654\/revisions"}],"predecessor-version":[{"id":157982,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/33654\/revisions\/157982"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/25343"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=33654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=33654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=33654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}