{"id":83787,"date":"2020-06-03T07:42:26","date_gmt":"2020-06-03T05:42:26","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2"},"modified":"2020-06-03T07:42:26","modified_gmt":"2020-06-03T05:42:26","slug":"devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","title":{"rendered":"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kubernetes este un instrument excelent pentru lansarea containerelor Docker \u00eentr-un mediu de produc\u021bie clusterizat. Totu\u0219i, exist\u0103 sarcini pe care Kubernetes nu le poate rezolva. Atunci c\u00e2nd desf\u0103\u0219ur\u0103m frecvent \u00een mediu de lucru, avem nevoie de un proces complet automatizat de Blue\/Green deployment pentru a evita timpii de inactivitate, care necesit\u0103, de asemenea, gestionarea cererilor HTTP externe \u0219i realizarea extragerii SSL. Acest lucru necesit\u0103 integrarea cu un balancer de \u00eenc\u0103rcare, precum ha-proxy. O alt\u0103 sarcin\u0103 este scalarea semi-automat\u0103 a clusterului Kubernetes \u00een medii cloud, cum ar fi reducerea par\u021bial\u0103 a dimensiunii clusterului noaptea.<\/p>\n<p>De\u0219i Kubernetes nu dispune de aceste func\u021bii direct \u201edin cutie\u201d, el ofer\u0103 un API pe care \u00eel putem folosi pentru a rezolva astfel de sarcini. Instrumentele pentru desf\u0103\u0219urarea automatizat\u0103 Blue\/Green \u0219i scalarea clusterului Kubernetes au fost dezvoltate \u00een cadrul proiectului Cloud RTI, care a fost creat pe baza unor solu\u021bii open-source.<\/p>\n<p>\u00cen acest articol, o transcriere a unui videoclip, se discut\u0103 despre cum s\u0103 configur\u0103m Kubernetes \u00eempreun\u0103 cu alte componente open-source pentru a ob\u021bine un mediu de produc\u021bie \u00eel care s\u0103 accepte codul din commit-urile git f\u0103r\u0103 timpi de inactivitate.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/43a4ba56526a91b6f3d1fb16c159cc1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/504666\/\">DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, scalare automat\u0103 \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 1<\/a><\/noindex><\/p>\n<p>A\u0219adar, dup\u0103 ce a\u021bi ob\u021binut accesul la aplica\u021biile dvs. din lumea extern\u0103, pute\u021bi \u00eencepe configurarea complet\u0103 a automatiz\u0103rii, adic\u0103 s\u0103 o aduce\u021bi la stadiul \u00een care pute\u021bi realiza un git commit \u0219i s\u0103 v\u0103 asigura\u021bi c\u0103 acest git commit se finalizeaz\u0103 \u00een produc\u021bie. Este evident c\u0103, \u00een implementarea acestor pa\u0219i, ne dorim s\u0103 evit\u0103m timpii de inactivitate. A\u0219adar, orice automatizare \u00een Kubernetes \u00eencepe cu API-ul. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/aa470c1562e49d98a164e0485196426e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKubernetes nu este un instrument care poate fi folosit productiv \u201edirect din cutie\u201d. Desigur, pute\u021bi face asta, folosi kubectl \u0219i a\u0219a mai departe, dar API-ul r\u0103m\u00e2ne cea mai interesant\u0103 \u0219i util\u0103 parte a acestei platforme. Folosind API-ul ca un set de func\u021bii, ave\u021bi acces practic la tot ce dori\u021bi s\u0103 face\u021bi \u00een Kubernetes. Kubectl \u00een sine utilizeaz\u0103, de asemenea, REST API. <\/p>\n<p>Acesta este un API REST, deci po\u021bi folosi orice limbaj sau instrument pentru a lucra cu el, dar bibliotecile utilizatorului \u00ee\u021bi vor face via\u021ba mult mai u\u0219oar\u0103. Echipa mea a scris 2 astfel de biblioteci: una pentru Java \/ OSGi \u0219i una pentru Go. Cea de-a doua nu este folosit\u0103 prea des, dar oricum ai la dispozi\u021bie aceste lucruri utile. Ele fac parte dintr-un proiect open-source par\u021bial licen\u021biat. Exist\u0103 multe astfel de biblioteci pentru diferite limbi, a\u0219a c\u0103 po\u021bi alege cele mai potrivite. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/808865e4cda6023c6775ec9e581fc46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA\u0219adar, \u00eenainte de a \u00eencepe automatizarea desf\u0103\u0219ur\u0103rii, trebuie s\u0103 te asiguri c\u0103 acest proces nu va suferi de timpi de nefunc\u021bionare. De exemplu, echipa noastr\u0103 desf\u0103\u0219oar\u0103 desf\u0103\u0219ur\u0103ri de produc\u021bie \u00een mijlocul zilei, c\u00e2nd oamenii folosesc la maxim aplica\u021biile, deci este foarte important s\u0103 evit\u0103m \u00eent\u00e2rzierile \u00een acest proces. Pentru a preveni timpii de nefunc\u021bionare, se folosesc 2 metode: desf\u0103\u0219urarea blue\/green sau actualizarea gradual\u0103 rolling update. \u00cen cel din urm\u0103 caz, dac\u0103 ai 5 replici ale aplica\u021biei active, acestea sunt actualizate una c\u00e2te una. Aceast\u0103 metod\u0103 func\u021bioneaz\u0103 excelent, dar nu este potrivit\u0103 dac\u0103, \u00een timpul desf\u0103\u0219ur\u0103rii, ai versiuni diferite ale aplica\u021biei care ruleaz\u0103 simultan. \u00cen acest caz, po\u021bi actualiza interfa\u021ba utilizatorului \u00een timp ce backend-ul func\u021bioneaz\u0103 cu versiunea anterioar\u0103, iar func\u021bionarea aplica\u021biei va fi \u00eentrerupt\u0103. De aceea, din punct de vedere programatic, lucrul \u00een aceste condi\u021bii este destul de complicat. <\/p>\n<p>Aceasta este una dintre motivele pentru care prefer\u0103m s\u0103 folosim desf\u0103\u0219urarea blue\/green pentru automatizarea desf\u0103\u0219ur\u0103rii aplica\u021biilor noastre. \u00cen acest mod, trebuie s\u0103 te asiguri c\u0103, \u00eentr-un anumit moment, este activ\u0103 doar o singur\u0103 versiune a aplica\u021biei. <\/p>\n<p>Mecanismul desf\u0103\u0219ur\u0103rii blue\/green func\u021bioneaz\u0103 astfel. Primim traficul pentru aplica\u021biile noastre prin ha-proxy, care \u00eel direc\u021bioneaz\u0103 c\u0103tre replicile active ale aplica\u021biei de aceea\u0219i versiune. <\/p>\n<p>C\u00e2nd se efectueaz\u0103 un nou deployment, folosim Deployer, c\u0103ruia i se furnizeaz\u0103 noi componente, \u0219i acesta realizeaz\u0103 deplasarea noii versiuni. Deplasarea noii versiuni a aplica\u021biei \u00eenseamn\u0103 c\u0103 un nou set de replici este \u201eridicat\u201d, dup\u0103 care aceste replici ale noii versiuni sunt lansate \u00eentr-un nou pod separat. Totu\u0219i, ha-proxy nu are cuno\u0219tin\u021b\u0103 despre acestea \u0219i momentan nu le direc\u021bioneaz\u0103 nicio \u00eenc\u0103rc\u0103tur\u0103 de lucru.<\/p>\n<p>Prin urmare, mai \u00eent\u00e2i trebuie s\u0103 efectu\u0103m verific\u0103ri de s\u0103n\u0103tate a noilor versiuni pentru a ne asigura c\u0103 replicile sunt preg\u0103tite s\u0103 gestioneze \u00eenc\u0103rc\u0103tura.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/6134f89567ac3627197883b2f4c768d4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nToate componentele de deployment trebuie s\u0103 suporte o form\u0103 de verificare a st\u0103rii. Aceasta poate fi o verificare HTTP simpl\u0103, c\u00e2nd ob\u021bii un cod cu statutul 200, sau o verificare mai profund\u0103, \u00een care verifici conexiunea replicilor cu baza de date \u0219i alte servicii, stabilitatea conexiunilor mediului dinamic, dac\u0103 totul se lanseaz\u0103 \u0219i func\u021bioneaz\u0103 corect. Acest proces poate fi destul de complex. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/fdc537599187b32ab97bc00970283e1a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 ce sistemul se asigur\u0103 c\u0103 toate replicile actualizate sunt func\u021bionale, Deployer va actualiza configura\u021bia \u0219i va transmite confd-ul corect, care va reconfigura ha-proxy. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/099240482096c2ac4aafe7e803409511.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNumai dup\u0103 aceea, traficul va fi direc\u021bionat c\u0103tre podul cu replicile noii versiuni, iar podul vechi va disp\u0103rea. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/f656b3a3adfc27e782e5d9785b8b615e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAcest mecanism nu este o caracteristic\u0103 specific\u0103 Kubernetes. Conceptul de Blue\/green deployment exist\u0103 de mult timp \u0219i mereu a folosit un echilibrator de \u00eenc\u0103rcare. Ini\u021bial, direc\u021bionezi tot traficul c\u0103tre versiunea veche a aplica\u021biei, iar dup\u0103 actualizare, \u00eel transferi complet pe noua versiune. Acest principiu este folosit nu doar \u00een Kubernetes.<\/p>\n<p>Acum v\u0103 voi prezenta un nou component de deployment \u2013 Deployer, care efectueaz\u0103 verific\u0103ri de s\u0103n\u0103tate, reconfiguraz\u0103 proxy-ul \u0219i a\u0219a mai departe. Acesta este un concept care nu se refer\u0103 la lumea extern\u0103 \u0219i exist\u0103 \u00een interiorul Kubernetes. Voi ar\u0103ta cum po\u021bi crea propriul t\u0103u concept Deployer folosind instrumente open-source. <\/p>\n<p>A\u0219adar, primul lucru pe care \u00eel face Deployer este s\u0103 creeze un controler de replicare RC, folosind API-ul Kubernetes. Acest API creeaz\u0103 pod-uri \u0219i servicii pentru desf\u0103\u0219urarea ulterioar\u0103, adic\u0103 creeaz\u0103 un nou cluster complet pentru aplica\u021biile noastre. Odat\u0103 ce RC se asigur\u0103 c\u0103 replicile au pornit, va efectua o verificare a s\u0103n\u0103t\u0103\u021bii lor. Pentru aceasta, \u00een Deployer se folose\u0219te comanda GET \/health. Aceasta activeaz\u0103 componentele corespunz\u0103toare ale verific\u0103rii \u0219i verific\u0103 toate elementele care asigur\u0103 func\u021bionarea cluster-ului. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/f2ef0232e17bc69f0b70ea9eabc2f456.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 ce toate pod-urile au raportat starea lor de \"s\u0103n\u0103tate\", Deployer creeaz\u0103 un nou element de configurare \u2013 un depozit distribuit etcd, care este folosit \u00een interiorul Kubernetes, inclusiv pentru a stoca configura\u021bia load balancer-ului. Noi \u00eenregistr\u0103m datele \u00een etcd, iar un mic instrument confd monitorizeaz\u0103 etcd pentru apari\u021bia de noi date. <\/p>\n<p>Dac\u0103 detecteaz\u0103 vreo modificare a configura\u021biei ini\u021biale, acesta genereaz\u0103 un nou fi\u0219ier de configurare \u0219i \u00eel trimite c\u0103tre ha-proxy. \u00cen acest caz, ha-proxy se re\u00eencarc\u0103 f\u0103r\u0103 a pierde vreo conexiune \u0219i \u00ee\u0219i direc\u021bioneaz\u0103 traficul c\u0103tre noile servicii, care asigur\u0103 func\u021bionarea noii versiuni a aplica\u021biilor noastre. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/bef1536c2b8dee6b0da710fc6c6fda99.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 cum vede\u021bi, \u00een ciuda numeroaselor componente, aici nu este nimic complicat. Trebuie doar s\u0103 acorda\u021bi o aten\u021bie mai mare API-ului \u0219i etcd. Vreau s\u0103 v\u0103 povestesc despre un Deployer open-source, pe care \u00eel folosim noi \u00een\u0219ine \u2013 Amdatu Kubernetes Deployer.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/34124e093d2e16fcbb80fd112c7d223f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste un instrument pentru orchestration of Kubernetes deployments, av\u00e2nd urm\u0103toarele func\u021bii: <\/p>\n<ul>\n<li>desf\u0103\u0219urare Blue\/Green;<\/li>\n<li>configurarea unui load balancer extern;<\/li>\n<li>managementul descriptorilor de desf\u0103\u0219urare;<\/li>\n<li>managementul desf\u0103\u0219ur\u0103rii efective;<\/li>\n<li>verific\u0103ri de s\u0103n\u0103tate \u00een timpul desf\u0103\u0219ur\u0103rii;<\/li>\n<li>inserarea de variabile de mediu \u00een pod-uri.<\/li>\n<\/ul>\n<p>\nAcest Deployer este construit pe baza API-ului Kubernetes \u0219i ofer\u0103 un REST API pentru gestionarea descriptorilor \u0219i desf\u0103\u0219ur\u0103rilor, precum \u0219i un Websocket API pentru streaming de log-uri \u00een timpul desf\u0103\u0219ur\u0103rii.<\/p>\n<p>Acesta plaseaz\u0103 datele de configurare ale load balancer-ului \u00een etcd, astfel \u00eenc\u00e2t s\u0103 nu fie necesar s\u0103 folosi\u021bi ha-proxy cu suport \"din cutie\", ci s\u0103 folosi\u021bi cu u\u0219urin\u021b\u0103 propriul fi\u0219ier de configurare al load balancer-ului. Amdatu Deployer este scris \u00een Go, la fel ca Kubernetes, \u0219i este licen\u021biat Apache.<\/p>\n<p>\u00cenainte de a utiliza aceast\u0103 versiune a deploiatorului, am folosit urm\u0103torul descriptor de implementare, care include parametrii necesari pentru mine. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/14e9ecca6ad772a43afcf95a4950fad8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnul dintre parametrii importan\u021bi ai acestui cod este activarea flag-ului \u201euseHealthCheck\u201d. Trebuie s\u0103 specific\u0103m c\u0103 \u00een timpul desf\u0103\u0219ur\u0103rii trebuie efectuat\u0103 o verificare a func\u021bionalit\u0103\u021bii. Acest parametru poate fi dezactivat atunci c\u00e2nd \u00een desf\u0103\u0219urare sunt utilizate containere de la ter\u021bi, care nu necesit\u0103 verificare. Acest descriptor specific\u0103, de asemenea, num\u0103rul de replici \u0219i URL-ul front-end-ului necesar pentru ha-proxy. La final, este indicat flag-ul specifica\u021biei pod-ului \u201epodspec\u201d, care se adreseaz\u0103 Kubernetes pentru informa\u021bii despre configurarea porturilor, imaginea, etc. Este un descriptor destul de simplu \u00een format JSON. <\/p>\n<p>Un alt instrument care face parte din proiectul open-source Amdatu este Deploymentctl. Acesta are o interfa\u021b\u0103 utilizator UI pentru configurarea desf\u0103\u0219ur\u0103rii, p\u0103streaz\u0103 istoricul desf\u0103\u0219ur\u0103rilor \u0219i con\u021bine webhooks pentru apeluri inverse de la utilizatori \u0219i dezvoltatori ter\u021bi. Nu este necesar s\u0103 utiliza\u021bi UI-ul, deoarece Amdatu Deployer este un REST API, dar aceast\u0103 interfa\u021b\u0103 v\u0103 poate facilita foarte mult desf\u0103\u0219urarea f\u0103r\u0103 a apela la un API. Deploymentctl este scris \u00een OSGi\/Vertx folosind Angular 2. <\/p>\n<p>Acum voi demonstra cele spuse mai sus pe ecran, folosind o \u00eenregistrare pre\u00eenregistrat\u0103, astfel \u00eenc\u00e2t s\u0103 nu fie nevoie s\u0103 a\u0219tepta\u021bi. Vom desf\u0103\u0219ura o aplica\u021bie simpl\u0103 \u00een Go. Nu v\u0103 face\u021bi griji dac\u0103 nu a\u021bi avut de-a face cu Go anterior, aceasta este o aplica\u021bie foarte simpl\u0103, a\u0219a c\u0103 ar trebui s\u0103 fie totul clar. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/ab61ada396143e980d73a0bb8ff95076.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAici cre\u0103m un server HTTP care r\u0103spunde doar la \/health, a\u0219a c\u0103 aceast\u0103 aplica\u021bie verific\u0103 doar s\u0103n\u0103tatea, nimic mai mult. Dac\u0103 verificarea trece, este folosit\u0103 structura JSON ar\u0103tat\u0103 mai jos. Aceasta con\u021bine versiunea aplica\u021biei care va fi desf\u0103\u0219urat\u0103 de deploiator, mesajul pe care \u00eel vede\u021bi \u00een partea de sus a fi\u0219ierului \u0219i un tip de date boolean \u2014 dac\u0103 aplica\u021bia noastr\u0103 este sau nu func\u021bional\u0103.<\/p>\n<p>Cu ultima linie am fost pu\u021bin \u0219iret, deoarece am plasat \u00een partea de sus a fi\u0219ierului o valoare boolean\u0103 fix\u0103, care ulterior m\u0103 va ajuta s\u0103 desf\u0103\u0219or chiar \u0219i o aplica\u021bie \u201enes\u0103n\u0103toas\u0103\u201d. Mai t\u00e2rziu vom discuta despre asta. <\/p>\n<p>A\u0219adar, s\u0103 \u00eencepem. Mai \u00eent\u00e2i verific\u0103m dac\u0103 exist\u0103 vreo instan\u021b\u0103 de poduri rul\u00e2nd cu comanda ~ kubectl get pods \u0219i prin absen\u021ba r\u0103spunsului URL-ului frontend ne asigur\u0103m c\u0103 nu se desf\u0103\u0219oar\u0103 nicio implementare \u00een acest moment. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/4da1ae467993d6e60ec539ae5ff136ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMai departe, pe ecran vede\u021bi interfa\u021ba men\u021bionat\u0103 de mine, Deploymentctl, \u00een care se stabilesc parametrii implement\u0103rii: spa\u021biul de nume, numele aplica\u021biei, versiunea implement\u0103rii, num\u0103rul de replici, URL-ul frontend, numele containerului, imaginea, limitele resurselor, num\u0103rul de port pentru health check etc. Limitele resurselor sunt foarte importante, deoarece permit utilizarea maxim\u0103 a resurselor hardware disponibile. De asemenea, aici pute\u021bi vizualiza jurnalul implement\u0103rii, Deployment log.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/edf6a02b336f1abce61f0a323edeee9d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDac\u0103 repet\u0103m acum comanda ~ kubectl get pods, se poate observa c\u0103 sistemul \"\u00eenghea\u021b\u0103\" timp de 20 de secunde, timp \u00een care are loc reconfigurarea ha-proxy. Dup\u0103 aceasta, podul se lanseaz\u0103, iar replica noastr\u0103 poate fi v\u0103zut\u0103 \u00een jurnalul implement\u0103rii. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/c6c8f6335e00d3a9cfcf4d4792ecf795.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAm t\u0103iat din videoclip a\u0219teptarea de 20 de secunde \u0219i acum vede\u021bi pe ecran c\u0103 prima versiune a aplica\u021biei a fost implementat\u0103. Totul a fost realizat doar prin intermediul UI-ului. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/d21fa9ad71e22b2bb9efdfc7bc9c8771.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAcum s\u0103 \u00eencerc\u0103m a doua versiune. Pentru aceasta, schimb mesajul aplica\u021biei din \"Hello, Kubernetes!\" \u00een \"Hello, Deployer!\", sistemul creeaz\u0103 aceast\u0103 imagine \u0219i o plaseaz\u0103 \u00een registrul Docker, dup\u0103 care ap\u0103s\u0103m din nou butonul \"Deploy\" \u00een fereastra Deploymentctl. La acest lucru, se lanseaz\u0103 automat jurnalul implement\u0103rii exact a\u0219a cum s-a \u00eent\u00e2mplat la implementarea primei versiuni a aplica\u021biei. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/e4ef784649fd18b1580d2562b318ac0f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComanda ~ kubectl get pods arat\u0103 c\u0103 \u00een prezent sunt rulante 2 versiuni ale aplica\u021biei, totu\u0219i frontend-ul arat\u0103 c\u0103 avem \u00eenc\u0103 versiunea 1 activ\u0103. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/1d4a9c91f836007325a2a2c833da8eff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBalancerul de sarcin\u0103 a\u0219teapt\u0103 s\u0103 fie efectuat un health check, dup\u0103 care va redirec\u021biona traficul c\u0103tre noua versiune. Dup\u0103 20 de secunde, trecem la curl \u0219i vedem c\u0103 acum avem implementat\u0103 versiunea 2 a aplica\u021biei, iar prima a fost eliminat\u0103. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/e123618251e9fcb1c14829772634b6e8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAceasta a fost implementarea unei aplica\u021bii \"s\u0103n\u0103toase\" \u2014 healthy. S\u0103 vedem ce se \u00eent\u00e2mpl\u0103 dac\u0103 pentru noua versiune a aplica\u021biei schimb valoarea parametrului Healthy din true \u00een false, adic\u0103 \u00eencerc s\u0103 implementez o aplica\u021bie unhealthy, care nu a trecut testul de s\u0103n\u0103tate. Acest lucru se poate \u00eent\u00e2mpla dac\u0103 \u00een timpul dezvolt\u0103rii s-au f\u0103cut anumite erori de configurare \u00een aplica\u021bie \u0219i aceasta a fost trimis\u0103 \u00een produc\u021bie \u00een aceast\u0103 form\u0103. <\/p>\n<p>Dup\u0103 cum vede\u021bi, desf\u0103\u0219urarea trece prin toate etapele men\u021bionate mai sus, iar ~ kubectl get pods arat\u0103 c\u0103 ambele poduri sunt active. \u00cens\u0103, spre deosebire de desf\u0103\u0219urarea anterioar\u0103, logul arat\u0103 un timeout. Asta \u00eenseamn\u0103 c\u0103, din cauza unei verific\u0103ri health check e\u0219uate, noua versiune a aplica\u021biei nu poate fi desf\u0103\u0219urat\u0103. Drept urmare, observa\u021bi c\u0103 sistemul a revenit la utilizarea versiunii vechi a aplica\u021biei, iar noua versiune a fost pur \u0219i simplu \u0219tears\u0103. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/4542761328603596704f21cef4c9d4a3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBinele este c\u0103, chiar dac\u0103 ave\u021bi un num\u0103r mare de cereri simultane care ajung \u00een aplica\u021bie, utilizatorii nu vor observa \u00eentreruperi \u00een timpul desf\u0103\u0219ur\u0103rii. Dac\u0103 testa\u021bi aceast\u0103 aplica\u021bie cu framework-ul Gatling, care trimite maximul de cereri posibil, nu va fi respins\u0103 niciuna dintre acestea. Acest lucru \u00eenseamn\u0103 c\u0103 utilizatorii no\u0219tri nu vor observa nici o actualizare a versiunilor \u00een timp real. Dac\u0103 aceasta e\u0219ueaz\u0103, activitatea va continua pe vechea versiune; dac\u0103 este reu\u0219it\u0103, utilizatorii vor trece la noua versiune. <\/p>\n<p>Exist\u0103 un singur lucru care poate duce la e\u0219ec \u2013 dac\u0103 verificarea health check a fost efectuat\u0103 cu succes, dar aplica\u021bia a dat eroare imediat ce a fost supus\u0103 unei sarcini de lucru, adic\u0103 colapsul va avea loc doar dup\u0103 finalizarea desf\u0103\u0219ur\u0103rii. \u00cen acest caz, va trebui s\u0103 reveni\u021bi manual la versiunea anterioar\u0103. A\u0219adar, am discutat despre cum s\u0103 folosi\u021bi Kubernetes cu instrumentele open-source destinate acestuia. Procedura de desf\u0103\u0219urare va decurge mult mai simplu dac\u0103 integra\u021bi aceste instrumente \u00een pipeline-urile de creare\/desf\u0103\u0219urare Build\/Deploy. \u00cen acest fel, pentru a porni desf\u0103\u0219urarea, pute\u021bi utiliza at\u00e2t interfa\u021ba grafic\u0103, c\u00e2t \u0219i automatiza complet acest proces prin aplicarea, de exemplu, a commit to master. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/43b638be9d334c6c4f8e9f4fc00ce2f9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nServerul nostru de construire Build Server va crea o imagine Docker, o va \u00eenc\u0103rca pe Docker Hub sau pe orice alt registru pe care \u00eel utiliza\u021bi. Docker Hub suport\u0103 webhook, astfel \u00eenc\u00e2t putem ini\u021bia o desf\u0103\u0219urare la distan\u021b\u0103 prin Deployer a\u0219a cum am ar\u0103tat mai sus. Astfel, desf\u0103\u0219urarea aplica\u021biei \u00een produc\u021bie poate fi complet automatizat\u0103. <\/p>\n<p>S\u0103 trecem la urm\u0103toarea tem\u0103 \u2013 scalarea clusterului Kubernetes. Observ c\u0103 comanda kubectl este o comand\u0103 de scalare. Cu ajutorul acesteia, putem s\u0103 cre\u0219tem cu u\u0219urin\u021b\u0103 num\u0103rul de replici \u00een clusterul existent. Cu toate acestea, \u00een practic\u0103, de obicei dorim s\u0103 cre\u0219tem num\u0103rul nu al podurilor, ci al nodurilor. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/890f436b4bc52c81f5db5b35e64e7e18.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen acest sens, \u00een timpul programului de lucru, este posibil s\u0103 ave\u021bi nevoie de o cre\u0219tere, iar pe timp de noapte, pentru a reduce costurile serviciilor Amazon \u2013 o reducere a num\u0103rului de instan\u021be de aplica\u021bie rulate. Asta nu \u00eenseamn\u0103 c\u0103 va fi suficient s\u0103 scal\u0103m doar num\u0103rul podurilor, pentru c\u0103, chiar \u0219i dac\u0103 unul dintre noduri nu este ocupat, va trebui totu\u0219i s\u0103 pl\u0103ti\u021bi pentru el c\u0103tre Amazon. Adic\u0103, pe l\u00e2ng\u0103 scalarea podurilor, trebuie s\u0103 scal\u0103m \u0219i num\u0103rul ma\u0219inilor utilizate. <\/p>\n<p>Acest lucru poate cauza dificult\u0103\u021bi, deoarece, indiferent dac\u0103 folosim Amazon sau un alt serviciu cloud, Kubernetes nu \u0219tie nimic despre num\u0103rul de ma\u0219ini utilizate. Nu exist\u0103 un instrument \u00een acesta care s\u0103 permit\u0103 scalarea sistemului la nivelul nodurilor. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/2f00b19f1cb665d8e7bd896fa419554c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA\u0219adar, va trebui s\u0103 ne ocup\u0103m at\u00e2t de noduri, c\u00e2t \u0219i de poduri. Putem s\u0103 scal\u0103m cu u\u0219urin\u021b\u0103 lansarea de noi noduri folosind API-ul AWS \u0219i grupul de masini de scalare pentru a configura num\u0103rul de noduri de lucru Kubernetes. De asemenea, putem folosi cloud-init sau un script similar pentru a \u00eenregistra nodurile \u00een clusterul Kubernetes. <\/p>\n<p>Noua ma\u0219in\u0103 porne\u0219te \u00een grupul de scalare, se ini\u021biaz\u0103 ca nod, se \u00eenscrie \u00een registrul master \u0219i \u00eencepe s\u0103 func\u021bioneze. Dup\u0103 aceasta, se poate cre\u0219te num\u0103rul de replici pentru utilizarea pe nodurile formate. Reducerea scal\u0103rii necesit\u0103 un efort mai mare, deoarece trebuie s\u0103 ne asigur\u0103m c\u0103 un astfel de pas nu va duce la distrugerea aplica\u021biilor deja func\u021bionale dup\u0103 deconectarea ma\u0219inilor \u201enecesare\u201d. Pentru a preveni un astfel de scenariu, nodurile trebuie readuse la statusul \u201eunschedulable\u201d. Aceasta \u00eenseamn\u0103 c\u0103 planificatorul implicit va ignora aceste noduri atunci c\u00e2nd planific\u0103 podurile DaemonSet. Planificatorul nu va elimina nimic de pe aceste servere, dar nici nu va lansa recipiente noi acolo. Urm\u0103torul pas este de a face nodul drain, adic\u0103 de a muta podurile active de pe acesta pe o alt\u0103 ma\u0219in\u0103 sau pe alte noduri, care dispun de capacitatea necesar\u0103. Dup\u0103 ce ne-am asigurat c\u0103 pe aceste noduri nu mai exist\u0103 recipiente, acestea pot fi eliminate din Kubernetes. Dup\u0103 aceasta, pentru Kubernetes, acestea pur \u0219i simplu nu vor mai exista. \u00cen continuare, trebuie s\u0103 folosi\u021bi AWS API pentru a dezactiva nodurile sau ma\u0219inile inutile. <br \/>\nPute\u021bi folosi Amdatu Scalerd \u2013 un alt instrument open-source pentru scalare, similar cu AWS API. Acesta ofer\u0103 CLI pentru ad\u0103ugarea sau eliminarea nodurilor din cluster. O caracteristic\u0103 interesant\u0103 este capacitatea de a configura planificatorul prin urm\u0103torul fi\u0219ier JSON. <\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/f70c7c722cacb4792c316e9f80a7500a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCodul prezentat reduce la jum\u0103tate capacitatea cluster-ului \u00een perioada de noapte. Acesta configureaz\u0103 at\u00e2t num\u0103rul de replici existente, c\u00e2t \u0219i capacitatea dorit\u0103 a cluster-ului Amazon. Utilizarea acestui planificator va reduce automat num\u0103rul de noduri noaptea \u0219i le va cre\u0219te diminea\u021ba, permi\u021b\u00e2nd economisirea costurilor utiliz\u0103rii nodurilor unui astfel de serviciu cloud, cum ar fi Amazon. Aceast\u0103 func\u021bie nu este integrat\u0103 \u00een Kubernetes, dar utilizarea Scalerd v\u0103 va permite s\u0103 scala\u021bi aceast\u0103 platform\u0103 \u00een orice mod dori\u021bi. <\/p>\n<p>Vreau s\u0103 v\u0103 atrag aten\u021bia asupra faptului c\u0103 mul\u021bi oameni \u00eemi spun: \u201eToate acestea sunt bune, dar ce se \u00eent\u00e2mpl\u0103 cu baza mea de date, care de obicei este \u00eentr-o stare static\u0103?\u201d Cum putem rula ceva similar \u00eentr-un mediu dinamic precum Kubernetes? Din punctul meu de vedere, nu ar trebui s\u0103 face\u021bi asta, nu ar trebui s\u0103 \u00eencerca\u021bi s\u0103 organiza\u021bi func\u021bionarea stoc\u0103rii datelor \u00een Kubernetes. Tehnic, acest lucru este posibil, \u0219i exist\u0103 ghiduri pe internet despre acest subiect, \u00eens\u0103 v\u0103 va complica serios via\u021ba. <\/p>\n<p>Da, \u00een Kubernetes exist\u0103 conceptul de stocare persistent\u0103, iar tu po\u021bi \u00eencerca s\u0103 rulezi baze de date precum Mongo sau MySQL, dar este o sarcin\u0103 destul de laborioas\u0103. Acest lucru se datoreaz\u0103 faptului c\u0103 bazele de date nu suport\u0103 complet interac\u021biunea cu un mediu dinamic. Cele mai multe baze de date necesit\u0103 o configurare semnificativ\u0103, inclusiv configurarea manual\u0103 a clusterului, nu le plac auto-scalarea \u0219i alte lucruri de genul acesta. <br \/>\nPrin urmare, nu ar trebui s\u0103-\u021bi complici via\u021ba \u00eencerc\u00e2nd s\u0103 rulezi o baz\u0103 de date \u00een Kubernetes. Organizeaz\u0103-le func\u021bionarea \u00eentr-un mod tradi\u021bional, folosind servicii familiare \u0219i ofer\u0103 pur \u0219i simplu Kubernetes-ului posibilitatea de a le folosi.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/129e8d403f42b7aa6fb022b386955e9e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen \u00eencheiere, vreau s\u0103 v\u0103 prezint platforma Cloud RTI bazat\u0103 pe Kubernetes, la care lucreaz\u0103 echipa mea. Aceasta asigur\u0103 un management centralizat al log-urilor, monitorizarea aplica\u021biilor \u0219i a clusterelor \u0219i dispune de multe alte func\u021bii utile pe care le ve\u021bi g\u0103si utile. Folose\u0219te diverse instrumente open-source, precum Grafana pentru afi\u0219area monitoriz\u0103rii.<\/p>\n<p><img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/a0e79033dbc0a2683e3567934c9ba014.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2\" src=\"\/wp-content\/uploads\/2020\/06\/2b1b7ba139053fc492c7ad25e96f362f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA fost ridicat\u0103 \u00eentrebarea de ce s\u0103 folosim un echilibror de \u00eenc\u0103rcare ha-proxy cu Kubernetes. O \u00eentrebare bun\u0103, deoarece \u00een prezent exist\u0103 2 niveluri de echilibrare a \u00eenc\u0103rc\u0103rii. Serviciile Kubernetes se afl\u0103 \u00een continuare pe adrese IP virtuale. Nu le po\u021bi utiliza pentru porturile ma\u0219inilor gazd\u0103 externe, deoarece dac\u0103 Amazon \u00ee\u0219i suprasolicit\u0103 gazda cloud, adresa se va schimba. De aceea plas\u0103m ha-proxy \u00eenaintea serviciilor \u2014 pentru a crea o structur\u0103 mai static\u0103 pentru interac\u021biunea continu\u0103 a traficului cu Kubernetes. <\/p>\n<p>\u00cenc\u0103 o \u00eentrebare bun\u0103 \u2013 cum putem gestiona modificarea schemei bazei de date \u00een timpul unui deployment blue\/green? Problema este c\u0103, indiferent de utilizarea Kubernetes, modificarea schemei bazei de date este o sarcin\u0103 complex\u0103. Trebuie s\u0103 asigura\u021bi compatibilitatea \u00eentre vechea \u0219i noua schem\u0103, dup\u0103 care pute\u021bi actualiza baza de date \u0219i apoi aplica\u021biile. Pute\u021bi efectua o '\u00eenlocuire la cald' a bazei de date \u0219i apoi s\u0103 actualiza\u021bi aplica\u021biile. Cunosc oameni care au \u00eenc\u0103rcat un cluster de baze de date complet nou cu o schem\u0103 nou\u0103; aceasta este o op\u021biune dac\u0103 ave\u021bi o baz\u0103 de date f\u0103r\u0103 schem\u0103, cum ar fi Mongo, dar oricum, nu este o sarcin\u0103 simpl\u0103. Dac\u0103 nu mai sunt \u00eentreb\u0103ri, v\u0103 mul\u021bumesc pentru aten\u021bie!<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"-Ci4vd4rh4M\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/-Ci4vd4rh4M\/hqdefault.jpg\" alt=\"Reda\u021bi video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Pu\u021bin publicitate \ud83d\ude42<\/h3>\n<p>\nMul\u021bumim c\u0103 r\u0103m\u00e2ne\u021bi cu noi. V\u0103 plac articolele noastre? Dori\u021bi s\u0103 vede\u021bi mai multe materiale interesante? Sus\u021bine\u021bi-ne, efectu\u00e2nd o comand\u0103 sau recomand\u00e2ndu-ne prietenilor, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS cloud pentru dezvoltatori de la 4,99 $<\/a><\/noindex>, <b>un echivalent unic pentru serverele entry-level, care a fost creat de noi pentru voi:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Toat\u0103 adev\u0103rul despre VPS (KVM) E5-2697 v3 (6 nuclee) 10GB DDR4 480GB SSD 1Gbps de la 19 $ sau cum s\u0103 \u00eemp\u0103r\u021bi\u021bi corect un server?<\/a><\/noindex> (sunt disponibile op\u021biuni cu RAID1 \u0219i RAID10, p\u00e2n\u0103 la 24 nuclee \u0219i p\u00e2n\u0103 la 40GB DDR4).<\/p>\n<p><b>Dell R730xd la jum\u0103tate de pre\u021b \u00een centrul de date Equinix Tier IV din Amsterdam?<\/b> Numai la noi <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB de la 199 $<\/a><\/noindex> \u00een Olanda! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 de la 99 $!<\/b><\/b> Citi\u021bi despre <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Cum s\u0103 construi\u021bi o infrastructur\u0103 de clas\u0103 enterprise folosind servere Dell R730xd E5-2650 v4 la pre\u021buri foarte mici de 9000 \u20ac?<\/a><\/noindex><br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/504672\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u041f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0441\u0440\u0435\u0434\u0435 \u043c\u044b \u043d\u0443\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c Blue\/Green deployment, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435\u0432 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443 SSL. \u042d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83788,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83787","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.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.\" \/>\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\/ro\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\udd47DEVOXX UK. Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Blue\/Green deployment, \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2\" \/>\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-06-03T05:42:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-03T05:42:26+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\udd47DEVOXX UK. Kubernetes \u00een produc\u021bie: Blue\/Green deployment, auto-scalare \u0219i automatizarea desf\u0103\u0219ur\u0103rii. Partea 2 | ProHoster","description":"Kubernetes este un instrument excelent pentru rularea containerelor Docker \u00eentr-un mediu de produc\u021bie clusterizat. Totu\u0219i, exist\u0103 sarcini pe care Kubernetes nu le poate rezolva.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\udd47DEVOXX UK. Kubernetes \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Blue\/Green deployment, \u0430\u0432\u0442\u043e\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster","og:description":"Kubernetes \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Docker \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 Kubernetes \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/devoxx-uk-kubernetes-v-prodakshene-blue-green-deployment-avtomasshtabirovanie-i-avtomatizacziya-razvertyvaniya-chast-2","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-06-03T05:42:26+00:00","article:modified_time":"2020-06-03T05:42:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83787","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 15:11:01","updated":"2022-09-28 11:45:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/83787","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=83787"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/83787\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/83788"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=83787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=83787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=83787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}