{"id":81173,"date":"2020-05-11T13:42:51","date_gmt":"2020-05-11T11:42:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/production-ready-images-for-k8s"},"modified":"2020-05-11T13:42:51","modified_gmt":"2020-05-11T11:42:51","slug":"production-ready-images-for-k8s","status":"publish","type":"post","link":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/production-ready-images-for-k8s","title":{"rendered":"Produkcijas gatav\u0101s bildes k8s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u0160\u012b ir st\u0101sts par to, k\u0101 m\u0113s izmantojam konteinerus produkta vid\u0113, \u012bpa\u0161i Kubernetes. Raksts ir velt\u012bts metrikas un \u017eurn\u0101lu v\u0101k\u0161anai no konteineriem, k\u0101 ar\u012b att\u0113lu veido\u0161anai.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/c7e8df02d845138e489c09c55cd616e6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nM\u0113s esam fintehnolo\u0123iju uz\u0146\u0113mums Exness, kas nodarbojas ar tie\u0161saistes tirdzniec\u012bbas pakalpojumu un fintehnolo\u0123iju produktu izstr\u0101di B2B un B2C. M\u016bsu R&amp;D ir daudzas da\u017e\u0101das komandas, izstr\u0101des noda\u013c\u0101 str\u0101d\u0101 vair\u0101k nek\u0101 100 darbinieku.<\/p>\n<p>M\u0113s p\u0101rst\u0101v\u0113jam komandu, kas atbild par platformas izstr\u0101di, kas tiek izmantota, lai v\u0101ktu un palaistu kodu m\u016bsu izstr\u0101d\u0101t\u0101jiem. It \u012bpa\u0161i m\u0113s atbildam par metrikas, \u017eurn\u0101lu un notikumu v\u0101k\u0161anu, glab\u0101\u0161anu un snieg\u0161anu no lietotn\u0113m. Pa\u0161laik m\u0113s apkalpojam apm\u0113ram tr\u012bs t\u016bksto\u0161us Docker konteineru produkta vid\u0113, uzturam m\u016bsu big data kr\u0101tuvi ar apjomu 50 TB un pied\u0101v\u0101jam arhitekt\u016bras risin\u0101jumus, kas ir balst\u012bti uz m\u016bsu infra strukt\u016bru: Kubernetes, Rancher un da\u017e\u0101di publiskie m\u0101ko\u0146u pakalpojumu sniedz\u0113ji.\u00a0<\/p>\n<h1>M\u016bsu motiv\u0101cija<\/h1>\n<p>\nKas deg? Neviens nevar atbild\u0113t. Kur ir avots? Gr\u016bti saprast. Kad tas aizdeg\u0101s? Var noskaidrot, bet ne uzreiz.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/3ca2271caf1d02ba14937680cd89d65d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u0101p\u0113c da\u017ei konteineri st\u0101v, bet citi nokritu\u0161i? Kur\u0161 konteineris ir pie vainas? Galu gal\u0101 no \u0101rpuses konteineri izskat\u0101s vien\u0101di, bet katram iek\u0161pus\u0113 ir savs Neo.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/f971583f21e363244f9ea754da2a1f4c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u016bsu izstr\u0101d\u0101t\u0101ji ir zino\u0161i speci\u0101listi. Vi\u0146i veido labus pakalpojumus, kas uz\u0146\u0113mumam nes pe\u013c\u0146u. Bet m\u0113dz b\u016bt neveiksmju mirk\u013ci, kad lietot\u0146u konteineri non\u0101k haotisk\u0101 st\u0101vokl\u012b. Viens konteineris pat\u0113r\u0113 p\u0101r\u0101k daudz CPU, cits - t\u012bklu, tre\u0161ais - I\/O oper\u0101cijas, ceturtais visp\u0101r nav skaidrs, ko dara ar soketiem. Viss tas avar\u0113 un ku\u0123is grimst.\u00a0<\/p>\n<h1>A\u0123enti<\/h1>\n<p>\nLai saprastu, kas notiek iek\u0161ien\u0113, m\u0113s nol\u0113m\u0101m uzst\u0101d\u012bt a\u0123entus tie\u0161i konteineros.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/cc9eb47d1250bb866ec9452181479df4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0160ie a\u0123enti ir ierobe\u017eojo\u0161as programmas, kas uztur konteinerus t\u0101d\u0101 st\u0101vokl\u012b, lai tie nesaboj\u0101tu viens otru. A\u0123enti ir standartiz\u0113ti, un tas \u013cauj standartiz\u0113t pieeju konteineru apkalpo\u0161anai.\u00a0<\/p>\n<p>M\u016bsu gad\u012bjum\u0101 a\u0123entiem j\u0101nodro\u0161ina \u017eurn\u0101li standartiz\u0113t\u0101 form\u0101t\u0101, ar mar\u0137\u0113jumu un regul\u0113\u0161anu. Vi\u0146iem ar\u012b j\u0101pied\u0101v\u0101 standartiz\u0113tas metrikas, kas ir papla\u0161in\u0101mas uz\u0146\u0113m\u0113jdarb\u012bbas lietot\u0146u skat\u012bjum\u0101.<\/p>\n<p>A\u0123enti ietver ar\u012b r\u012bkus ekspluat\u0101cijai un apkalpo\u0161anai, kas ir sp\u0113j\u012bgi str\u0101d\u0101t da\u017e\u0101d\u0101s or\u0137estra sist\u0113m\u0101s un atbalsta da\u017e\u0101das images (Debian, Alpine, Centos utt.).<\/p>\n<p>Visbeidzot, a\u0123entiem ir j\u0101atbalsta vienk\u0101r\u0161s CI\/CD, kas ietver Docker failus. Pret\u0113j\u0101 gad\u012bjum\u0101 ku\u0123is sa\u0101rd\u012bsies, jo konteineri tiks pieg\u0101d\u0101ti pa \"krokiem\" slied\u0113m.<\/p>\n<h1>B\u016bves process un m\u0113r\u0137a att\u0113la ier\u012bce<\/h1>\n<p>\nLai viss b\u016btu standartiz\u0113ts un p\u0101rvald\u0101ms, ir j\u0101iev\u0113ro k\u0101ds standarta b\u016bves process. T\u0101p\u0113c m\u0113s nol\u0113m\u0101m veidot konteinerus, izmantojot konteinerus \u2014 t\u0101da ir rekursija.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/708715af05bf79ce1eb9c2a8ce2aeca6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0160eit konteineri ir att\u0113loti k\u0101 solidi kont\u016bri. M\u0113s ar\u012b izl\u0113m\u0101m ievietot tajos distrib\u016bcijas, lai \"dz\u012bve nesan\u0101ktu k\u0101 ave\u0146u lauks\". K\u0101p\u0113c tas tika izdar\u012bts, m\u0113s past\u0101st\u012bsim zem\u0101k.<br \/>\n\u00a0<br \/>\nRezult\u0101t\u0101 izveidoj\u0101m b\u016bves r\u012bku \u2014 noteikta versijas konteiners, kur\u0161 atsaucas uz noteikt\u0101m distrib\u016bciju versij\u0101m un noteikt\u0101m skriptu versij\u0101m.<\/p>\n<p>K\u0101 m\u0113s to lietojam? Mums ir Docker Hub, kur\u0101 atrodas konteiners. M\u0113s to mirgojam sav\u0101 sist\u0113m\u0101, lai atbr\u012bvotos no \u0101r\u0113j\u0101m atkar\u012bb\u0101m. Rezult\u0101t\u0101 m\u0113s ieg\u016bstam konteiners, kur\u0161 ir mar\u0137\u0113ts dzelten\u0101 kr\u0101s\u0101. M\u0113s izveidojam veidni, lai uzst\u0101d\u012btu visus nepiecie\u0161amos distrib\u016bcijas un skriptus konteiner\u0101. P\u0113c tam m\u0113s veidojam darbam gatavu att\u0113lu: izstr\u0101d\u0101t\u0101ji taj\u0101 ievieto kodu un da\u017eas savas specifisk\u0101s atkar\u012bbas.\u00a0<\/p>\n<p>K\u0101p\u0113c \u0161\u0101ds pieejas modelis ir labs?\u00a0<\/p>\n<ul>\n<li>Pirmk\u0101rt, piln\u012bga versiju kontrole b\u016bves r\u012bkiem \u2013 b\u016bves konteiners, skriptu un distrib\u016bciju versijas.\u00a0<\/li>\n<li>Otrk\u0101rt, m\u0113s sasniedz\u0101m standartiz\u0101ciju: vien\u0101d\u0101 veid\u0101 izveidojam veidnes, starpposma un darbam gatavas att\u0113lus.\u00a0<\/li>\n<li>Tre\u0161k\u0101rt, konteineri nodro\u0161ina mums p\u0101rn\u0113s\u0101jamu risin\u0101jumu. \u0160odien m\u0113s izmantosim GitLab, bet r\u012bt p\u0101riesim uz TeamCity vai Jenkins un t\u0101pat var\u0113sim palaist m\u016bsu konteinerus.\u00a0<\/li>\n<li>Ceturk\u0101rt, atkar\u012bbu minimiz\u0101cija. M\u0113s nejau\u0161i ievietoj\u0101m distrib\u016bcijas konteiner\u0101, jo tas \u013cauj neb\u016bt katru reizi j\u0101lejupiel\u0101d\u0113 t\u0101s no Interneta.\u00a0<\/li>\n<li>Piektk\u0101rt, uzlaboj\u0101s b\u016bves \u0101trums \u2013 lok\u0101lo att\u0113lu kl\u0101tb\u016btne \u013cauj net\u0113r\u0113t laiku lejupiel\u0101d\u0113\u0161anai, jo ir lok\u0101lais att\u0113ls.\u00a0<\/li>\n<\/ul>\n<p>\nCitiem v\u0101rdiem sakot, m\u0113s esam sasniegu\u0161i kontrol\u0113tu un elast\u012bgu b\u016bves procesu. M\u0113s izmantojam vien\u0101dus r\u012bkus, lai veidotu jebk\u0101dus konteinerus ar pilnu versiju kontrole.\u00a0<\/p>\n<h1>K\u0101 darbojas m\u016bsu b\u016bves proced\u016bra<\/h1>\n<p>\n<img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/22b9a8546005e289f79962188dbb0659.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSavilka s\u0101kas ar vienu komandu, process tiek izpild\u012bts att\u0113l\u0101 (izcelts sarkan\u0101 kr\u0101s\u0101). Izstr\u0101d\u0101t\u0101jam ir Docker fails (izcelts dzelten\u0101 kr\u0101s\u0101), kuru m\u0113s render\u0113jam, aizst\u0101jot main\u012bgos ar v\u0113rt\u012bb\u0101m. Un blakus pievienojam header\u2019\u012b un footer\u2019\u012b \u2014 tie ir m\u016bsu a\u0123enti.\u00a0<\/p>\n<p>Header pievieno izplat\u012bjumus no attiec\u012bgajiem att\u0113liem. Footer iek\u0161pus\u0113 iestata m\u016bsu pakalpojumus, konfigur\u0113 darba slodzes uzs\u0101k\u0161anu, \u017eurn\u0101lu veido\u0161anu un citus a\u0123entus, aizst\u0101j entrypoint utt.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/4004e57dc45771479e535921a839716d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u0113s ilgi dom\u0101j\u0101m, vai mums vajag supervizoru. Galu gal\u0101, m\u0113s nol\u0113m\u0101m, ka tas mums ir nepiecie\u0161ams. Izv\u0113l\u0113j\u0101mies S6. Supervizors nodro\u0161ina konteineru p\u0101rvald\u012bbu: \u013cauj piek\u013c\u016bt tam, ja galvenais process sabr\u016bk, un nodro\u0161ina manu\u0101lo konteineru p\u0101rvald\u012bbu bez t\u0101 atk\u0101rtotas izveides. \u017durn\u0101li un metrikas ir procesi, kas tiek izpild\u012bti iek\u0161pus\u0113 konteiner\u0101. Tos ar\u012b ir j\u0101uzrauga, un m\u0113s to dar\u0101m ar supervizoru. Visbeidzot, S6 uz\u0146emas m\u0101jas p\u0101rvald\u012bbu, sign\u0101lu apstr\u0101di un citas prasmes.<\/p>\n<p>T\u0101 k\u0101 m\u0113s izmantojam da\u017e\u0101das or\u0137estr\u0101cijas sist\u0113mas, p\u0113c konteineru izstr\u0101des un uzs\u0101k\u0161anas tam ir j\u0101izprot, k\u0101d\u0101 vid\u0113 tas atrodas, un j\u0101r\u012bkojas atbilsto\u0161i situ\u0101cijai. Piem\u0113ram:<br \/>\nTas \u013cauj mums izveidot vienu att\u0113lu un palaist to da\u017e\u0101d\u0101s or\u0137estr\u0101cijas sist\u0113m\u0101s, turkl\u0101t t\u0101 uzs\u0101k\u0161ana notiks, \u0146emot v\u0113r\u0101 \u0161\u012bs or\u0137estr\u0101cijas sist\u0113mas specifiku.<\/p>\n<p>\u00a0<img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/6e76396afedbbf0e71d44a7fbb8521da.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVienam un tam pa\u0161am konteineram m\u0113s ieg\u016bstam da\u017e\u0101das procesu kokus Docker un Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/83f9d23876192930ffebafcdd549915e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNoder\u012bg\u0101 slodze tiek izpild\u012bta supervizora S6 uzraudz\u012bb\u0101. L\u016bdzu, piev\u0113rsiet uzman\u012bbu collector un events \u2014 tie ir m\u016bsu a\u0123enti, kas atbild par \u017eurn\u0101liem un metriku. Kubernetes tie nav, bet Docker ir. K\u0101p\u0113c?\u00a0<\/p>\n<p>Ja paskat\u0101mies uz \u00abpoda\u00bb specifik\u0101ciju (no \u0161\u012bs br\u012b\u017ea \u2014 Kubernetes pod), tad redzam, ka konteineru events izpilda pod\u0101, kur\u0101 ir atsevi\u0161\u0137s konteiner collector, kas veic metrikas un \u017eurn\u0101lu v\u0101k\u0161anas funkciju. M\u0113s varam izmantot Kubernetes iesp\u0113jas: konteineru uzs\u0101k\u0161anu vien\u0101 pod\u0101, vienot\u0101 procesu un\/vai t\u012bkla telpas ietvaros. Faktiski ieviest savus a\u0123entus un veikt k\u0101das funkcijas. Un, ja \u0161is pats konteineris tiks uzs\u0101kts Docker, tas sa\u0146ems visus tos pa\u0161us iesp\u0113jas, t.i., var\u0113s pieg\u0101d\u0101t \u017eurn\u0101lus un metrikas, jo a\u0123enti tiks uzs\u0101kti iek\u0161pus\u0113.\u00a0<\/p>\n<h1>Metrikas un \u017eurn\u0101li<\/h1>\n<p>\nMetriku un \u017eurn\u0101lu pieg\u0101de ir sare\u017e\u0123\u012bta uzdevums. Ar \u0161\u012bs probl\u0113mas risin\u0101\u0161anu saist\u012bti vair\u0101ki aspekti.<br \/>\nInfrastrukt\u016bra tiek veidota, lai izpild\u012btu noder\u012bgu slodzi, nevis masveida \u017eurn\u0101lu pieg\u0101di. Proti, \u0161im procesam j\u0101notiek ar minim\u0101l\u0101m pras\u012bb\u0101m pret konteineru resursiem. M\u0113s cen\u0161amies pal\u012bdz\u0113t m\u016bsu izstr\u0101d\u0101t\u0101jiem: \u201ePa\u0146emiet Docker Hub konteineru, palaidiet to, un m\u0113s varam pieg\u0101d\u0101t \u017eurn\u0101lus.\u201d\u00a0<\/p>\n<p>Otrais aspekts ir \u017eurn\u0101lu apjoma ierobe\u017eojums. Ja vair\u0101kos konteineros notiek \u017eurn\u0101lu apjoma pieaugums (lietojumprogramma cikl\u0101 izvada stack-trace), palielin\u0101s slodze uz CPU, sakaru kan\u0101liem, \u017eurn\u0101lu apstr\u0101des sist\u0113mu un tas ietekm\u0113 m\u0101ko\u0146a resursu darb\u012bbu kopum\u0101 un citus konteinerus m\u0101ko\u0146\u0101, da\u017ereiz tas noved pie \u201em\u0101ko\u0146a\u201d kritiena.\u00a0<\/p>\n<p>Tre\u0161ais aspekts ir nepiecie\u0161am\u012bba atbalst\u012bt p\u0113c iesp\u0113jas vair\u0101k meto\u017eu metrikas ieg\u016b\u0161anai no kastes. No failu las\u012b\u0161anas un Prometheus-endpoint uzraudz\u012b\u0161anas l\u012bdz specifisko lietojumprogrammu protokolu izmanto\u0161anai.<\/p>\n<p>Un p\u0113d\u0113jais aspekts ir nepiecie\u0161am\u012bba minimiz\u0113t resursu pat\u0113ri\u0146u.<\/p>\n<p>M\u0113s izv\u0113l\u0113j\u0101mies atkl\u0101t\u0101 koda risin\u0101jumu Go valod\u0101 ar nosaukumu Telegraf. Tas ir univers\u0101ls savienot\u0101js, kas atbalsta vair\u0101k nek\u0101 140 veidu ievades kan\u0101lus (input plugins) un 30 veidu izvades kan\u0101lus (output plugins). M\u0113s to esam piel\u0101goju\u0161i un tagad past\u0101st\u012bsim, k\u0101 tas tiek izmantots pie mums Kubernetes piem\u0113ra ietvaros.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/9635d571c852e5f9358458874c58d7b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPie\u0146emsim, ka izstr\u0101d\u0101t\u0101js izvieto slodzi, un Kubernetes sa\u0146em piepras\u012bjumu izveidot podu. \u0160aj\u0101 br\u012bd\u012b katram podam autom\u0101tiski tiek izveidots konteiners ar nosaukumu Collector (m\u0113s izmantojam mut\u0101cijas webhook). Collector ir m\u016bsu a\u0123ents. Uzs\u0101kot darbu, \u0161is konteiners konfigur\u0113 sevi darbam ar Prometheus un \u017eurn\u0101lu v\u0101k\u0161anas sist\u0113mu.<\/p>\n<ul>\n<li>Tam vi\u0146\u0161 izmanto podu anot\u0101cijas, un atkar\u012bb\u0101 no t\u0101s satura izveido, teiksim, Prometheus end-point;\u00a0\n<\/li>\n<li>Balstoties uz podu specifik\u0101ciju un konteineru specifiskajiem iestat\u012bjumiem, tiek nolemts, k\u0101 pieg\u0101d\u0101t \u017eurn\u0101lus.\n<\/li>\n<\/ul>\n<p>\n\u017durn\u0101lus m\u0113s iev\u0101cam, izmantojot Docker API: izstr\u0101d\u0101t\u0101jiem pietiek tos ievietot stdout vai stderr, un t\u0101l\u0101k Collector visu izsist\u012bs. \u017durn\u0101li tiek v\u0101kti chunk'os ar nelielu aizkavi, lai nov\u0113rstu iesp\u0113jamo m\u0101ko\u0146a p\u0101rslodzi.\u00a0<\/p>\n<p>Metrikas tiek v\u0101kts p\u0113c darba slodzes (procesu) instanc\u0113m konteineros. Viss tiek mar\u0137\u0113ts ar tagiem: namespace, pods utt., un p\u0113c tam tiek konvert\u0113ts Prometheus form\u0101t\u0101 \u2013 un pieejams v\u0101k\u0161anai (iz\u0146emot \u017eurn\u0101lus). T\u0101pat \u017eurn\u0101li, metriki un notikumi tiek nos\u016bt\u012bti uz Kafka un t\u0101l\u0101k:<\/p>\n<ul>\n<li>\u017durn\u0101li ir pieejami Graylog (vizu\u0101lai anal\u012bzei);\n<\/li>\n<li>Datu \u017eurn\u0101li, metrikas, notikumi tiek s\u016bt\u012bti uz Clickhouse ilgtermi\u0146a glab\u0101\u0161anai.\n<\/li>\n<\/ul>\n<p>\nTie\u0161i t\u0101pat tas darbojas AWS, tikai m\u0113s aizst\u0101j\u0101m Graylog ar Kafka ar Cloudwatch. S\u016bt\u0101m tur \u017eurn\u0101lus, un viss ir \u013coti \u0113rti: uzreiz skaidrs, kuram klasterim un konteineram tie pieder. Tas pats attiecas ar\u012b uz Google Stackdriver. T\u0101tad m\u016bsu sh\u0113ma darbojas gan uz vietas ar Kafka, gan m\u0101ko\u0146a vid\u0113.\u00a0<\/p>\n<p>Ja mums nav Kubernetes ar podiem, sh\u0113ma k\u013c\u016bst nedaudz sare\u017e\u0123\u012bt\u0101ka, bet darbojas p\u0113c tiem pa\u0161iem principiem.<\/p>\n<p><img decoding=\"async\" alt=\"Produkcijas gatav\u0101s bildes k8s\" src=\"\/wp-content\/uploads\/2020\/05\/dd8efb33c5c74433a2767cb00caeec2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKontejner\u0101 tiek izpild\u012bti t\u0101di pa\u0161i procesi, tie tiek or\u0137estr\u0113ti, izmantojot S6. Visi tie pa\u0161i procesi tiek palaisti iek\u0161\u0113j\u0101 konteiner\u0101.<\/p>\n<h1>Rezult\u0101t\u0101<\/h1>\n<p>\nM\u0113s esam izveidoju\u0161i vienotu risin\u0101jumu att\u0113lu izveidei un palai\u0161anai ra\u017eo\u0161an\u0101, ar metrikas v\u0101k\u0161anas un \u017eurn\u0101lu pieg\u0101des opcij\u0101m:<\/p>\n<ul>\n<li>Izstr\u0101d\u0101j\u0101m standartiz\u0113tu pieeju att\u0113lu veido\u0161anai, uz kuras pamata izstr\u0101d\u0101j\u0101m CI veidnes;\n<\/li>\n<li>Datu v\u0101k\u0161anas a\u0123enti ir m\u016bsu Telegraf papla\u0161in\u0101jumi. M\u0113s tos labi p\u0101rbaud\u012bj\u0101m ra\u017eo\u0161an\u0101;\n<\/li>\n<li>Izmantojam mut\u0101cijas webhook, lai ievad\u012btu konteinerus ar a\u0123entiem podos;\u00a0\n<\/li>\n<li>Integrejamies Kubernetes\/Rancher ekosist\u0113m\u0101;\n<\/li>\n<li>M\u0113s varam izpild\u012bt identiskus konteinerus da\u017e\u0101d\u0101s or\u0137estr\u0113\u0161anas sist\u0113m\u0101s un ieg\u016bt sagaid\u0101mo rezult\u0101tu;\n<\/li>\n<li>M\u0113s esam izveidoju\u0161i piln\u012bb\u0101 dinamisku konteineru vad\u012bbas konfigur\u0101ciju.\u00a0\n<\/li>\n<\/ul>\n<p>\nL\u012bdzautors: <b>Ilja Prud\u0146ikovs<\/b><br \/>\n<br \/>Avots: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/exness\/blog\/488392\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0441\u0431\u043e\u0440\u0443 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u043b\u043e\u0433\u043e\u0432 \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u043b\u0434\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432. \u041c\u044b \u0438\u0437 \u0444\u0438\u043d\u0442\u0435\u0445-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Exness, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0434\u043b\u044f \u043e\u043d\u043b\u0430\u0439\u043d-\u0442\u0440\u0435\u0439\u0434\u0438\u043d\u0433\u0430 \u0438 \u0444\u0438\u043d\u0442\u0435\u0445-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f B2B \u0438 \u04122\u0421. \u0412 \u043d\u0430\u0448\u0435\u043c R&amp;D \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0432 \u043e\u0442\u0434\u0435\u043b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 100 + \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81173","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=\"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes.\" \/>\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\/production-ready-images-for-k8s\" \/>\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\udd47Production-ready images for k8s | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/production-ready-images-for-k8s\" \/>\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=\"2020-05-11T11:42:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-11T11:42:51+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\udd47Produkcijai gatavi att\u0113li k8s | ProHoster","description":"\u0160\u012b ir st\u0101sts par to, k\u0101 m\u0113s izmantojam konteinerus produktu vid\u0113, jo \u012bpa\u0161i Kubernetes ietvaros.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/production-ready-images-for-k8s","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\udd47Production-ready images for k8s | ProHoster","og:description":"\u042d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434 Kubernetes.","og:url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/production-ready-images-for-k8s","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":"2020-05-11T11:42:51+00:00","article:modified_time":"2020-05-11T11:42:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81173","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:03:22","updated":"2022-09-28 06:12:17","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\/81173","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=81173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/81173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/81174"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=81173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=81173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=81173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}