{"id":96965,"date":"2020-10-15T14:42:53","date_gmt":"2020-10-15T12:42:53","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019"},"modified":"2020-10-15T14:42:53","modified_gmt":"2020-10-15T12:42:53","slug":"operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","title":{"rendered":"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/56e002c7408c4708e39ece867f84171e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prezentarea este dedicat\u0103 \u00eentreb\u0103rilor practice legate de dezvoltarea operatorului \u00een Kubernetes, proiectarea arhitecturii acestuia \u0219i principiile de func\u021bionare.<\/p>\n<p><\/p>\n<p>\u00cen prima parte a prezent\u0103rii vom analiza:<\/p>\n<p><\/p>\n<ul>\n<li>ce este un operator \u00een Kubernetes \u0219i de ce este necesar;<\/li>\n<li>cum simplific\u0103 operatorul gestionarea sistemelor complexe;<\/li>\n<li>ce poate face un operator \u0219i ce nu poate face.<\/li>\n<\/ul>\n<p><\/p>\n<p>Apoi, vom trece la discutarea structurii interne a operatorului. Vom examina arhitectura \u0219i func\u021bionarea operatorului pas cu pas. Vom analiza \u00een detaliu:<\/p>\n<p><\/p>\n<ul>\n<li>interac\u021biunea dintre operator \u0219i Kubernetes;<\/li>\n<li>ce func\u021bii \u00ee\u0219i asum\u0103 operatorul \u0219i ce deleg\u0103 \u00een Kubernetes.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vom examina gestionarea shard-urilor \u0219i replicilor Baz\u0103 de Date \u00een Kubernetes.<br \/>\nApoi, vom discuta despre \u00eentreb\u0103rile legate de stocarea datelor:<\/p>\n<p><\/p>\n<ul>\n<li>cum s\u0103 lucr\u0103m cu Persistent Storage din perspectiva operatorului;<\/li>\n<li>capcanele utiliz\u0103rii Local Storage.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00cen partea final\u0103 a prezent\u0103rii, vom analiza exemple practice de utilizare <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">clickhouse-operator<\/a><\/noindex> cu Amazon sau Google Cloud Service. Prezentarea se bazeaz\u0103 pe exemple de dezvoltare \u0219i experien\u021be de exploatare a operatorului pentru ClickHouse.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Video:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"z2aARjKDg4w\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/z2aARjKDg4w\/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<p>Numele meu este Vladislav Klimenko. Ast\u0103zi a\u0219 dori s\u0103 v\u0103 vorbesc despre experien\u021ba noastr\u0103 \u00een dezvoltarea \u0219i exploatarea operatorului, care este un operator specializat pentru gestionarea cluster-urilor de baze de date. Pe exemplul <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">ClickHouse-operator<\/a><\/noindex> pentru gestionarea cluster-ului ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cc297a3edb3b2a5e30d0dc2725de4011.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De ce avem posibilitatea s\u0103 vorbim despre operator \u0219i ClickHouse?<\/p>\n<p><\/p>\n<ul>\n<li>Ne ocup\u0103m cu suportul \u0219i dezvoltarea ClickHouse. <\/li>\n<li>\u00cen prezent, ne str\u0103duim s\u0103 contribuim treptat la dezvoltarea ClickHouse. Suntem pe locul doi dup\u0103 Yandex \u00een ceea ce prive\u0219te volumul de modific\u0103ri efectuate \u00een ClickHouse. <\/li>\n<li>\u00cencerc\u0103m s\u0103 realiz\u0103m proiecte suplimentare pentru ecosistemul ClickHouse. <\/li>\n<\/ul>\n<p><\/p>\n<p>Despre unul dintre aceste proiecte a\u0219 dori s\u0103 v\u0103 vorbesc. Este vorba despre ClickHouse-operator pentru Kubernetes. <\/p>\n<p><\/p>\n<p>\u00cen prezentarea mea, a\u0219 dori s\u0103 abordez dou\u0103 subiecte: <\/p>\n<p><\/p>\n<ul>\n<li>Primul subiect \u2013 cum func\u021bioneaz\u0103 operatorul nostru de gestionare a bazelor de date ClickHouse \u00een Kubernetes. <\/li>\n<li>Al doilea subiect \u2013 cum func\u021bioneaz\u0103 orice operator, adic\u0103 cum interac\u021bioneaz\u0103 cu Kubernetes. <\/li>\n<\/ul>\n<p><\/p>\n<p>Aceste dou\u0103 \u00eentreb\u0103ri se vor intersecta pe parcursul \u00eentregii mele prezent\u0103ri. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4cc9790e18e70ae1ccde2cf39ef4ef00.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cui i-ar putea fi interesant s\u0103 asculte ceea ce \u00eencerc s\u0103 explic?<\/p>\n<p><\/p>\n<ul>\n<li>Va fi cel mai interesant pentru cei care exploateaz\u0103 operatori. <\/li>\n<li>Sau pentru cei care doresc s\u0103 creeze propriul lor, pentru a \u00een\u021belege cum func\u021bioneaz\u0103 din interior, cum interac\u021bioneaz\u0103 operatorul cu Kubernetes \u0219i ce capcane pot ap\u0103rea. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/07545f7a0171b610697c519d4aa9cd43.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pentru a \u00een\u021belege mai bine ceea ce vom discuta ast\u0103zi, ar fi bine s\u0103 \u0219tim cum func\u021bioneaz\u0103 Kubernetes \u0219i s\u0103 avem o preg\u0103tire de baz\u0103 \u00een tehnologiile cloud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/eff56cc3e83fde3d3e64d73d41b07417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce este ClickHouse? Este o baz\u0103 de date columnar\u0103 specializat\u0103 \u00een procesarea analitic\u0103 online a interog\u0103rilor. \u0218i este complet open source. <\/p>\n<p><\/p>\n<p>\u0218i trebuie s\u0103 \u0219tim doar dou\u0103 lucruri. Trebuie s\u0103 \u0219tim c\u0103 este o baz\u0103 de date, prin urmare, ceea ce voi explica va fi aplicabil practic oric\u0103rei baze de date. \u0218i c\u0103 SGBD-ul ClickHouse se scalabilizeaz\u0103 foarte bine, oferind practic scalabilitate liniar\u0103. Din acest motiv, starea clusterului este o stare natural\u0103 pentru ClickHouse. \u0218i cel mai interesant este s\u0103 discut\u0103m despre cum se administreaz\u0103 clusterul ClickHouse \u00een Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5eb1ff5026c492117bf2467b10de7053.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De ce este necesar acolo? De ce nu putem continua s\u0103-l exploat\u0103m singuri? R\u0103spunsurile sunt par\u021bial tehnice, par\u021bial organiza\u021bionale. <\/p>\n<p><\/p>\n<ul>\n<li>\u00cen practic\u0103, ne \u00eent\u00e2lnim tot mai des cu situa\u021bia \u00een care, \u00een companii mari, practic toate componentele sunt deja \u00een Kubernetes. Singurele r\u0103mase sunt bazele de date. <\/li>\n<li>\u0218i se pune tot mai des \u00eentrebarea: \u201eSe poate integra acest lucru?\u201d De aceea, companiile mari \u00eencearc\u0103 s\u0103 realizeze o maxim\u0103 uniformizare a managementului, pentru a putea gestiona rapid stocurile de date. <\/li>\n<li>\u0218i acest lucru ajut\u0103 \u00een special atunci c\u00e2nd este necesar\u0103 maxim\u0103 repetabilitate \u00eentr-un alt loc, adic\u0103 o portabilitate maxim\u0103.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/99312e74bd7ed4031128c7ec872f6a68.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C\u00e2t de simplu sau complicat este acest lucru? Desigur c\u0103 se poate face manual. Dar nu este at\u00e2t de simplu, deoarece se adaug\u0103 complexitatea gestion\u0103rii Kubernetes, dar \u0219i specificitatea ClickHouse. \u0218i rezultatul este o agregare. <\/p>\n<p><\/p>\n<p>\u0218i toate acestea \u00eempreun\u0103 creeaz\u0103 un set destul de mare de tehnologii, al c\u0103ror management devine destul de complicat, deoarece Kubernetes aduce propriile \u00eentreb\u0103ri zilnice de exploatare iar ClickHouse aduce \u00eentreb\u0103rile proprii pentru exploatarea zilnic\u0103. \u00cen special, dac\u0103 avem mai multe instan\u021be ClickHouse \u0219i trebuie s\u0103 facem constant ceva cu ele. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ca10b805b2744d1a5283f96b0ac1cc11.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>ClickHouse, \u00een cazul unei configura\u021bii dinamice, are un num\u0103r destul de mare de \u00eentreb\u0103ri care genereaz\u0103 o sarcin\u0103 constant\u0103 pe DevOps:<\/p>\n<p><\/p>\n<ul>\n<li>C\u00e2nd dorim s\u0103 schimb\u0103m ceva \u00een ClickHouse, de exemplu, s\u0103 ad\u0103ug\u0103m o replic\u0103 sau un shard, trebuie s\u0103 gestion\u0103m configura\u021bia. <\/li>\n<li>Apoi, trebuie s\u0103 schimb\u0103m schema de date, deoarece ClickHouse are un mod specific de shardare. Trebuie s\u0103 desf\u0103\u0219ur\u0103m schema de date \u0219i s\u0103 desf\u0103\u0219ur\u0103m configura\u021biile. <\/li>\n<li>Trebuie s\u0103 configur\u0103m monitorizarea. <\/li>\n<li>Colectarea jurnalelor pentru noile sharde, pentru noile replici. <\/li>\n<li>Trebuie s\u0103 ne ocup\u0103m de recuperare.<\/li>\n<li>\u0218i de repornire. <\/li>\n<\/ul>\n<p><\/p>\n<p>Acestea sunt lucr\u0103ri de rutin\u0103 pe care ne-ar pl\u0103cea s\u0103 le simplific\u0103m \u00een exploatare.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2461e861ca1d2f2344ead9decf85a97e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kubernetes se descurc\u0103 bine \u00een exploatare, dar la lucruri sistemice de baz\u0103. <\/p>\n<p><\/p>\n<p>Kubernetes simplific\u0103 bine \u0219i automatizeaz\u0103 astfel de lucruri, cum ar fi:<\/p>\n<p><\/p>\n<ul>\n<li>Recuperarea.<\/li>\n<li>Repornirea. <\/li>\n<li>Gestionarea sistemului de stocare.<\/li>\n<\/ul>\n<p><\/p>\n<p>Este un lucru bun, este o direc\u021bie corect\u0103, dar nu are o imagine complet\u0103 despre cum s\u0103 exploateze un cluster de baze de date. <\/p>\n<p><\/p>\n<p>Ne dorim mai mult, dorim ca \u00eentreaga noastr\u0103 baz\u0103 de date s\u0103 func\u021bioneze \u00een Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6564e9f29d5d518925c8593bca978345.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne dorim s\u0103 avem ceva de genul unei mari butoane magice ro\u0219ii, pe care s\u0103 o apesi \u0219i s\u0103 se desf\u0103\u0219oare \u0219i s\u0103 se men\u021bin\u0103 pe parcursul \u00eentregului ciclu de via\u021b\u0103 un cluster cu sarcini zilnice care trebuie rezolvate. Clusterul ClickHouse \u00een Kubernetes.<\/p>\n<p><\/p>\n<p>\u0218i am \u00eencercat s\u0103 realiz\u0103m o solu\u021bie care s\u0103 ajute la simplificarea muncii. Acesta este ClickHouse-operator pentru Kubernetes de la Altinity.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ff80c6fc59069ec900d545096ad978d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un operator este un program, a c\u0103rui sarcin\u0103 principal\u0103 este de a gestiona alte programe, adic\u0103 este un manager. <\/p>\n<p><\/p>\n<p>\u0218i con\u021bine \u0219abloane de comportament. Poate fi numit cuno\u0219tin\u021be codificate despre domeniul de expertiz\u0103. <\/p>\n<p><\/p>\n<p>Sarcina sa principal\u0103 este s\u0103 faciliteze via\u021ba DevOps \u0219i s\u0103 reduc\u0103 micro-managementul, astfel \u00eenc\u00e2t el (DevOps) s\u0103 g\u00e2ndeasc\u0103 \u00een termeni de nivel \u00eenalt, adic\u0103 s\u0103 nu se ocupe de micro-management, s\u0103 nu configureze toate detaliile manual. <\/p>\n<p><\/p>\n<p>\u0218i exact operatorul este un robot asistent care se ocup\u0103 de micro-sarcini \u0219i ajut\u0103 DevOps.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0824a1fa710e8c4f45406aa7f596b977.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De ce este necesar un operator? Se dovede\u0219te a fi foarte eficient \u00een dou\u0103 aspecte:<\/p>\n<p><\/p>\n<ul>\n<li>C\u00e2nd specialistul care se ocup\u0103 de ClickHouse nu are suficient\u0103 experien\u021b\u0103, dar trebuie s\u0103 exploateze ClickHouse, operatorul faciliteaz\u0103 exploatarea \u0219i permite gestionarea unui cluster ClickHouse cu o configura\u021bie destul de complex\u0103, f\u0103r\u0103 a intra prea mult \u00een detalii despre cum func\u021bioneaz\u0103 toate acestea \u00een interior. Pur \u0219i simplu \u00eei dai sarcini de nivel \u00eenalt \u0219i func\u021bioneaz\u0103. <\/li>\n<li>\u0218i a doua sarcin\u0103 \u00een care se manifest\u0103 cel mai bine este atunci c\u00e2nd trebuie automatizate un num\u0103r mare de sarcini standard. \u00cendep\u0103rteaz\u0103 micro-sarcinile de la administratorii de sistem. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f1cb11156d57f560d0b6c82700ac6ff8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Acest lucru este necesar cel mai mult fie pentru cei care abia \u00ee\u0219i \u00eencep drumul, fie pentru cei care trebuie s\u0103 se ocupe mult de automatizare. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/128e7d9ff1ce0c535f98be66aedb1060.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Care este diferen\u021ba dintre abordarea bazat\u0103 pe operatori \u0219i alte sisteme? Exist\u0103 Helm. De asemenea, ajut\u0103 la instalarea ClickHouse, se pot crea grafice helm care vor instala chiar \u0219i un \u00eentreg cluster ClickHouse. Care este, a\u0219adar, diferen\u021ba \u00eentre operator \u0219i, de exemplu, Helm?<\/p>\n<p><\/p>\n<p>Diferen\u021ba fundamental\u0103 principal\u0103 este c\u0103 Helm este un manager de pachete, \u00een timp ce operatorul merge mai departe. Acesta \u00eenso\u021be\u0219te \u00eentregul ciclu de via\u021b\u0103. Nu este vorba doar de instalare, ci de sarcini zilnice care includ scalarea, fragmentarea, adic\u0103 tot ce trebuie efectuat \u00een timpul ciclului de via\u021b\u0103 (dac\u0103 este necesar, chiar \u0219i eliminarea) \u2013 toate acestea sunt gestionate de operator. Acesta \u00eencearc\u0103 s\u0103 automatizeze \u0219i s\u0103 \u00eentre\u021bin\u0103 \u00eentregul ciclu de via\u021b\u0103 al software-ului. \u00cen aceasta const\u0103 diferen\u021ba sa fundamental\u0103 fa\u021b\u0103 de alte solu\u021bii disponibile. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e26b57c8caf8437f683d7afbfa127ebd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aceasta a fost partea introductiv\u0103, s\u0103 mergem mai departe. <\/p>\n<p><\/p>\n<p>Cum construim operatorul nostru? \u00cencerc\u0103m s\u0103 abord\u0103m problema pentru a gestiona clusterul ClickHouse ca pe o resurs\u0103 unic\u0103. <\/p>\n<p><\/p>\n<p>Iat\u0103, \u00een partea st\u00e2ng\u0103 a imaginii, avem datele de intrare. Acesta este YAML cu specifica\u021bia clusterului, care este transmis \u00een mod clasic prin kubectl \u00een Kubernetes. Aici, operatorul nostru preia, face magia sa. \u0218i la ie\u0219ire ob\u021binem un astfel de diagram\u0103. Aceasta este implementarea ClickHouse \u00een Kubernetes.<\/p>\n<p><\/p>\n<p>\u0218i apoi vom examina treptat cum func\u021bioneaz\u0103 operatorul, ce sarcini standard pot fi rezolvate. Vom analiza doar sarcini standard, deoarece avem timp limitat. \u0218i nu va fi discutat despre toate problemele pe care le poate rezolva operatorul. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b40401931b58988058419d4495dbb1bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 ne baz\u0103m pe experien\u021b\u0103. Proiectul nostru este complet open source, a\u0219a c\u0103 pute\u021bi vedea pe GitHub cum func\u021bioneaz\u0103. \u0218i putem pleca de la premisa c\u0103, dac\u0103 dori\u021bi doar s\u0103 \u00eencepe\u021bi, cu Ghidul Rapid de \u00cenceput se poate \u00eencepe.<\/p>\n<p><\/p>\n<p>Dac\u0103 dori\u021bi s\u0103 \u00een\u021belege\u021bi detaliat, ne str\u0103duim s\u0103 men\u021binem documenta\u021bia \u00eentr-o form\u0103 c\u00e2t mai acceptabil\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9414d7c3aa94b6ad999e150f0ac25a97.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 \u00eencepem cu o sarcin\u0103 practic\u0103. Prima sarcin\u0103, cu ce to\u021bi vrem s\u0103 \u00eencepem, este s\u0103 lans\u0103m primul exemplu \u00een orice mod. Cum putem s\u0103 pornim ClickHouse utiliz\u00e2nd operatorul, chiar f\u0103r\u0103 a cunoa\u0219te prea bine cum func\u021bioneaz\u0103? Redact\u0103m un manifest, deoarece toat\u0103 interac\u021biunea cu k8s se face prin manifeste.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3e97cd235827460693ed95fb3598d31d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iat\u0103 un manifest destul de complex. Ceea ce este eviden\u021biat cu ro\u0219u este ceea ce trebuie s\u0103 accentu\u0103m. Cerem operatorului s\u0103 creeze un cluster numit demo.<\/p>\n<p><\/p>\n<p>P\u00e2n\u0103 acum, acestea sunt exemple de baz\u0103. Storage-ul nu este \u00eenc\u0103 descris, dar ne vom \u00eentoarce la storage pu\u021bin mai t\u00e2rziu. Deocamdat\u0103, vom observa \u00een dinamic\u0103 dezvoltarea cluster-ului.<\/p>\n<p><\/p>\n<p>Am creat acest manifest. \u00cel oferim operatorului nostru. El a lucrat, a f\u0103cut magie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/502e64fbe6ed7d04b2aecb7d51abc7f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne uit\u0103m \u00een consol\u0103. Trei componente ne atrag aten\u021bia \u2013 este vorba de Pod, dou\u0103 servicii \u0219i StatefulSet.<\/p>\n<p><\/p>\n<p>Operatorul a procesat cererea, iar noi putem vedea ce anume a creat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/67faf120e21e5113680ccff9c71b00f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>El creeaz\u0103 aproximativ o schem\u0103 ca aceasta. Avem StatefulSet, Pod, ConfigMap pentru fiecare replic\u0103 \u0219i ConfigMap pentru \u00eentregul cluster. Serviciile sunt esen\u021biale ca puncte de acces \u00een cluster. <\/p>\n<p><\/p>\n<p>Serviciile sunt un Load Balancer Service central \u0219i, de asemenea, putem avea c\u00e2te unul pentru fiecare replic\u0103, pentru fiecare shard. <\/p>\n<p><\/p>\n<p>A\u0219a arat\u0103 un cluster de baz\u0103. Este format dintr-o singur\u0103 nod. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f235ada45ee58b517c0e041f795ae122.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 mergem mai departe, vom complica lucrurile. Trebuie s\u0103 shard-\u0103m cluster-ul.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/992836a00434c64fb4616c1c4cc4df97.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sarcinile noastre cresc, \u00eencepe dinamica. Vrem s\u0103 ad\u0103ug\u0103m un shard. Urm\u0103rim dezvoltarea. Modific\u0103m specifica\u021bia noastr\u0103. Men\u021bion\u0103m c\u0103 vrem dou\u0103 shards. <\/p>\n<p><\/p>\n<p>Este acela\u0219i fi\u0219ier, care se dezvolt\u0103 dinamic pe m\u0103sur\u0103 ce sistemul cre\u0219te. Storage-ul nu este inclus, va fi discutat mai departe, este un subiect separat.<\/p>\n<p><\/p>\n<p>Oferim operatorului YAML \u0219i vedem ce rezultat ob\u021binem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8ddb5845cae160098470208f51b5da7c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Operatorul a analizat \u0219i a creat urm\u0103toarele entit\u0103\u021bi. Avem deja dou\u0103 Pod-uri, trei servicii \u0219i, dintr-o dat\u0103, dou\u0103 StatefulSets. De ce dou\u0103 StatefulSets?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/26eb734ff1a195de2ceaab842b472ee4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen schem\u0103 era \u00een felul urm\u0103tor \u2013 acesta este starea ini\u021bial\u0103, c\u00e2nd aveam un singur pod.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/657838b0d378121fdd66ad3ff8168600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A devenit a\u0219a. Deocamdat\u0103, totul este simplu, s-a duplicat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f039a7046f1c56fbdad6b5a26a519b10.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i de ce a devenit StatefulSet-ul dou\u0103? Aici trebuie s\u0103 ne deta\u0219\u0103m \u0219i s\u0103 discut\u0103m despre cum se gestioneaz\u0103 Pod-urile \u00een Kubernetes.<\/p>\n<p><\/p>\n<p>Exist\u0103 un obiect numit StatefulSet, care permite crearea unui grup de Pod-uri dintr-un \u0219ablon. Factorul cheie aici este Template. \u0218i este posibil s\u0103 rul\u0103m mai multe Pod-uri dintr-un singur \u0219ablon \u00eentr-un StatefulSet. Cuv\u00e2ntul cheie aici este \u201edintr-un singur \u0219ablon, multe Pod-uri.\u201d<\/p>\n<p><\/p>\n<p>A existat o tenta\u021bie mare de a crea \u00eentregul cluster, \u00eempachet\u00e2ndu-l \u00eentr-un singur StatefulSet. Aceasta va func\u021biona, nu exist\u0103 nicio problem\u0103 \u00een acest sens. Dar este o nuan\u021b\u0103. Dac\u0103 dorim s\u0103 form\u0103m un cluster heterogen, adic\u0103 din mai multe versiuni ClickHouse, aici apar \u00eentreb\u0103rile. Da, StatefulSet poate efectua un rolling update, da, se poate aplica o nou\u0103 versiune, explic\u00e2nd c\u0103 trebuie \u00eencercate nu mai mult de at\u00e2t noduri simultan.<\/p>\n<p><\/p>\n<p>Dar dac\u0103 extrapol\u0103m sarcina \u0219i spunem c\u0103 vrem s\u0103 facem un cluster complet heterogen \u0219i nu dorim s\u0103 schimb\u0103m de la o versiune veche la una nou\u0103 prin rolling update, ci doar dorim s\u0103 cre\u0103m un cluster heterogen at\u00e2t \u00een ceea ce prive\u0219te diferitele versiuni ClickHouse, c\u00e2t \u0219i \u00een ceea ce prive\u0219te diferite tipuri de stocare. Vrem, de exemplu, s\u0103 facem anumite replici pe discuri separate, pe discuri lente, \u00een general, s\u0103 construim complet un cluster heterogen. \u0218i din cauza c\u0103 StatefulSet creeaz\u0103 o solu\u021bie standardizat\u0103 dintr-un singur \u0219ablon, nu exist\u0103 posibilitatea de a face acest lucru. <\/p>\n<p><\/p>\n<p>Dup\u0103 o oarecare reflec\u021bie, s-a decis c\u0103 proced\u0103m \u00een acest fel. Fiecare replic\u0103 va fi \u00een propriul s\u0103u StatefulSet. Exist\u0103 unele dezavantaje ale acestei solu\u021bii, dar \u00een praxis aceasta se \u00eencadreaz\u0103 complet \u00een operator. \u0218i exist\u0103 o mul\u021bime de avantaje. Putem construi complet un cluster a\u0219a cum dorim, de exemplu, absolut heterogen. De aceea, \u00een clusterul \u00een care avem dou\u0103 sharde cu o replic\u0103, vor fi 2 StatefulSet-uri \u0219i 2 Pod-uri exact pentru c\u0103 am ales aceast\u0103 abordare din motivele men\u021bionate mai sus pentru a putea construi un cluster heterogen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b7ae92a545f9bb6cc5f0136df87207f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 revenim la sarcinile practice. \u00cen clusterul nostru trebuie s\u0103 configur\u0103m utilizatorii, adic\u0103 trebuie s\u0103 facem o anumit\u0103 configurare ClickHouse \u00een Kubernetes. Operatorul ofer\u0103 toate posibilit\u0103\u021bile pentru acest lucru. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6a65aa78293c0b40230cf24efc58e55a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Putem scrie direct \u00een YAML ce dorim. Toate op\u021biunile de configurare sunt mapate direct din acest YAML \u00een configura\u021biile ClickHouse, care apoi sunt distribuite \u00een \u00eentregul cluster.<\/p>\n<p><\/p>\n<p>Se poate scrie \u0219i a\u0219a. Acesta este doar un exemplu. Parola poate fi criptat\u0103. Toate op\u021biunile de configurare ClickHouse sunt complet acceptate. Aici este doar un exemplu. <\/p>\n<p><\/p>\n<p>Configurarea la nivel de cluster se r\u0103sp\u00e2nde\u0219te ca un ConfigMap. \u00cen practic\u0103, actualizarea ConfigMap-ului nu se \u00eent\u00e2mpl\u0103 instantaneu, a\u0219adar, dac\u0103 avem un cluster mare, procesul de propagare a configura\u021biei dureaz\u0103 ceva timp. Dar totul este foarte convenabil \u00een exploatare.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2e42d19d7a558e3b8d4bbb51fe5bd08b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cengreun\u0103m sarcina. Clusterul se dezvolt\u0103. Vrem s\u0103 replic\u0103m datele. Adic\u0103, avem deja dou\u0103 \u0219arde, fiecare cu c\u00e2te o replic\u0103, utilizatorii sunt configura\u021bi. Cre\u0219tem \u0219i dorim s\u0103 ne ocup\u0103m de replicare.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4c97e5e6ca9cb66d3a94fb8cfe610186.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce ne trebuie pentru replicare? <\/p>\n<p><\/p>\n<p>Avem nevoie de ZooKeeper. \u00cen ClickHouse, replicarea este construit\u0103 folosind ZooKeeper. ZooKeeper este necesar pentru ca diferitele replici ClickHouse s\u0103 aib\u0103 consens cu privire la ce blocuri de date exist\u0103 pe care ClickHouse. <\/p>\n<p><\/p>\n<p>Orice ZooKeeper poate fi folosit. Dac\u0103 exist\u0103 un ZooKeeper extern al \u00eentreprinderii, acesta poate fi utilizat. Dac\u0103 nu, putem instala din depozitul nostru. Exist\u0103 un instalator care faciliteaz\u0103 tot acest proces. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6cc40951a19b982abf578836edf569d3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i schema de interac\u021biune a \u00eentregului sistem arat\u0103 astfel. Avem Kubernetes ca platform\u0103. Pe el ruleaz\u0103 operatorul ClickHouse. ZooKeeper l-am reprezentat aici. \u0218i operatorul interac\u021bioneaz\u0103 at\u00e2t cu ClickHouse, c\u00e2t \u0219i cu ZooKeeper. Adic\u0103 se va realiza interac\u021biunea. <\/p>\n<p><\/p>\n<p>\u0218i tot acest lucru este necesar pentru ca ClickHouse s\u0103 poat\u0103 replica cu succes datele \u00een k8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4fc37aee850acd20517fa3d7562f0165.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Haide\u021bi acum s\u0103 ne uit\u0103m la sarcina \u00eens\u0103\u0219i, la cum va ar\u0103ta manifestul pentru replicare.<\/p>\n<p><\/p>\n<p>Ad\u0103ug\u0103m dou\u0103 sec\u021biuni la manifestul nostru. Prima \u2013 este de unde s\u0103 lu\u0103m ZooKeeper, care poate fi fie \u00een interiorul Kubernetes, fie extern. Aceasta este pur \u0219i simplu o descriere. \u0218i cerem replicile. Adic\u0103, vrem dou\u0103 replici. \u00cen total, ar trebui s\u0103 avem 4 pod-uri. \u00ce\u0219i amintim de storage, el va reveni pu\u021bin mai t\u00e2rziu. Storage \u2013 este o melodie separat\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/afb8c974d0587a4ad87d6ba36bbe5e3b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A fost a\u0219a.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/909ffd258dbce718ddf529a1a753de6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Devine a\u0219a. Se adaug\u0103 replicile. A patra nu \u00eenc\u0103pea, dar credem c\u0103 pot fi multe. \u0218i pe lateral se adaug\u0103 ZooKeeper. Schemele devin mai complexe. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c33b37fc7fc72f51276e5e98b9ec2134.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i a venit timpul s\u0103 ad\u0103ug\u0103m urm\u0103toarea sarcin\u0103. Vom ad\u0103uga stocare persistent\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f28d14901a713eca413a52ec6ea21ac5.jpeg\" style=\"display:block;margin: 0 auto;\" \/>\u00cen cazul stoc\u0103rii persistente, avem diferite op\u021biuni de implementare.<\/p>\n<p><\/p>\n<p>\u00cen cazul \u00een care ne implement\u0103m la un furnizor de cloud, de exemplu, folosind Amazon, Google, exist\u0103 o mare tenta\u021bie de a folosi stocarea cloud. Este foarte convenabil, este bine. <\/p>\n<p><\/p>\n<p>\u0218i exist\u0103 a doua op\u021biune. Aceasta este pentru stocarea local\u0103, c\u00e2nd avem discuri locale pe fiecare nod. Aceast\u0103 op\u021biune este mult mai complex\u0103 \u00een implementare, dar \u00een acela\u0219i timp este mai performant\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/483ee5c08b62e987620bf54fd32a44b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 vedem ce avem \u00een ceea ce prive\u0219te stocarea cloud.<\/p>\n<p><\/p>\n<p>Exist\u0103 avantaje. Este foarte simplu de configurat. Pur \u0219i simplu cerem furnizorului de cloud s\u0103 ne ofere stocare de o anumit\u0103 capacitate, de un anumit tip. Tipurile sunt detaliate de furnizori. <\/p>\n<p><\/p>\n<p>Exist\u0103 un dezavantaj. Pentru unii, acesta nu este un dezavantaj critic. Desigur, vor exista unele suprapuneri legate de performan\u021b\u0103. Este foarte convenabil \u00een utilizare, sigur, dar exist\u0103 anumite sc\u0103deri poten\u021biale de performan\u021b\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8e82430b64477f91640078ff4eacb47e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i \u021bin\u00e2nd cont c\u0103 ClickHouse se concentreaz\u0103 \u00een mod special pe performan\u021b\u0103, se poate spune c\u0103 extrage tot ce este posibil, de aceea foarte mul\u021bi clien\u021bi \u00eencearc\u0103 s\u0103 ob\u021bin\u0103 maximum de performan\u021b\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8638fe37b848a98ce8326218d368baa3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pentru a ob\u021bine maximum, avem nevoie de stocare local\u0103.<\/p>\n<p><\/p>\n<p>Kubernetes ofer\u0103 trei abstrac\u021bii pentru utilizarea stoc\u0103rii locale \u00een Kubernetes. Acestea sunt: <\/p>\n<p><\/p>\n<ul>\n<li>EmptyDir<\/li>\n<li>HostPath.<\/li>\n<li>Local<\/li>\n<\/ul>\n<p><\/p>\n<p>S\u0103 vedem \u00een ce se diferen\u021biaz\u0103 \u0219i \u00een ce se aseam\u0103n\u0103. <\/p>\n<p><\/p>\n<p>\u00cen primul r\u00e2nd, \u00een toate cele trei abord\u0103ri avem stocare \u2013 acestea sunt discurile locale care se afl\u0103 pe aceea\u0219i nod\u0103 fizic\u0103 k8s. Dar exist\u0103 unele diferen\u021be.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79afb620a0c9a1552b47240b405fedc9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 \u00eencepem cu cel mai simplu, adic\u0103 cu emptyDir. Ce \u00eenseamn\u0103 acest lucru \u00een practic\u0103? Cerem sistemului de containerizare (cel mai adesea \u2013 Docker) s\u0103 ne ofere acces la un folder de pe discul local.<\/p>\n<p><\/p>\n<p>\u00cen practic\u0103, Docker creeaz\u0103 undeva, pe c\u0103ile sale proprii, un folder temporar, numit cu un hash lung. \u0218i ofer\u0103 un interfa\u021b\u0103 de acces la acesta. <\/p>\n<p><\/p>\n<p>Cum va func\u021biona aceasta \u00een ceea ce prive\u0219te performan\u021ba? Va func\u021biona cu viteza discului local, adic\u0103 este acces complet la propriul sistem de stocare. <\/p>\n<p><\/p>\n<p>Dar acest lucru are un dezavantaj. Persistent \u00een aceast\u0103 situa\u021bie este destul de suspect. La prima mi\u0219care a Docker-ului cu containerele, Persistent se pierde. Dac\u0103 Kubernetes dore\u0219te dintr-un anumit motiv s\u0103 mute acest Pod pe un alt disc, datele se vor pierde. <\/p>\n<p><\/p>\n<p>Aceast\u0103 abordare este bun\u0103 pentru teste, deoarece viteza este deja decent\u0103, dar pentru ceva serios, aceast\u0103 variant\u0103 nu se potrive\u0219te. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0b60f80fc9ea0e2c1820021bcd9e1382.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prin urmare, exist\u0103 a doua abordare. Aceasta este hostPath. Dac\u0103 ne uit\u0103m la diapozitivul anterior \u0219i la acesta, putem observa o singur\u0103 diferen\u021b\u0103. Folderul a ie\u0219it din Docker direct pe nodul Kubernetes. Aici e pu\u021bin mai simplu. Specific\u0103m direct calea pe sistemul de fi\u0219iere local, unde am dori s\u0103 ne stoc\u0103m datele. <\/p>\n<p><\/p>\n<p>Avantajele acestei metode exist\u0103. Acesta este un adev\u0103rat Persistent, \u00een plus, clasic. Datele noastre vor fi scrise pe disc la o anumit\u0103 adres\u0103. <\/p>\n<p><\/p>\n<p>Exist\u0103 \u0219i dezavantaje. Acesta este complexitatea gestion\u0103rii. Kubernetes-ul nostru poate dori s\u0103 mute un Pod pe un alt nod fizic. Aici intervine DevOps. El trebuie s\u0103 explice corect \u00eentregului sistem c\u0103 aceste pod-uri pot fi mutate doar pe acele noduri pe care ai ceva montat pe acele c\u0103i, \u0219i nu mai mult de un nod pe dat\u0103. Acest lucru este destul de complicat. <\/p>\n<p><\/p>\n<p>Special pentru aceste scopuri, la noi, \u00een operator, am creat \u0219abloane pentru a ascunde toat\u0103 aceast\u0103 complexitate. \u0218i s-ar putea pur \u0219i simplu s\u0103 spunem: \u201eVreau s\u0103 am un instance ClickHouse pe fiecare nod fizic \u0219i pe un anumit drum.\u201d <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f64c19bccc8b187d6af112eda896b25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dar aceast\u0103 necesitate nu este doar a noastr\u0103, de aceea domnii din Kubernetes \u00een\u021beleg \u0219i ele c\u0103 oamenii doresc acces la discurile fizice, a\u0219a c\u0103 ofer\u0103 un al treilea nivel.<\/p>\n<p><\/p>\n<p>Se nume\u0219te local. Practic, nu exist\u0103 nicio diferen\u021b\u0103 fa\u021b\u0103 de diapozitivul anterior. Doar c\u0103 \u00eenainte trebuia s\u0103 facem manual ceea ce nu permitea mutarea acestor pod-uri de la un nod la altul, deoarece acestea trebuiau s\u0103 fie ata\u0219ate pe o anumit\u0103 cale la un disc fizic local, iar acum toate aceste cuno\u0219tin\u021be sunt \u00eencapsulate \u00een Kubernetes. \u0218i devine mult mai simplu de configurat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/140c43be34dd7015c0bf4cfd0a0bb384.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 ne \u00eentoarcem la sarcina noastr\u0103 practic\u0103. S\u0103 ne \u00eentoarcem la \u0219ablonul YAML. Aici ne-a ap\u0103rut un adev\u0103rat storage. Ne-am \u00eentors la acest lucru. Definim un \u0219ablon clasic de VolumeClaim ca \u00een k8s. \u0218i descriem ce storage dorim.<\/p>\n<p><\/p>\n<p>Dup\u0103 aceasta, k8s va solicita storage. Ne va aloca \u00een StatefulSet. Iar \u00een cele din urm\u0103, acesta va fi la dispozi\u021bia ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/960e666486ed09cebd83235d43f83970.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A avut o schem\u0103 de acest fel. Storage-ul nostru Persistent a fost ro\u0219u, ceea ce sugera c\u0103 ar trebui s\u0103-l cre\u0103m. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a989df489e3a9fef6a4fbf7b93c489a6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i devine verde. Acum schema cluster-ului ClickHouse pe k8s este complet finalizat\u0103. Avem sharde, replici, ZooKeeper, exist\u0103 un Persistent adev\u0103rat, care este realizat \u00eentr-un mod sau altul. Schema este deja complet func\u021bional\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c409ee5da6309a67904394d968ed4906.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Continu\u0103m s\u0103 tr\u0103im mai departe. Cluster-ul nostru se dezvolt\u0103. \u0218i Alexey se str\u0103duie\u0219te \u0219i lanseaz\u0103 o nou\u0103 versiune a ClickHouse.<\/p>\n<p><\/p>\n<p>Se ridic\u0103 o sarcin\u0103 practic\u0103 \u2013 s\u0103 test\u0103m noua versiune a ClickHouse pe cluster-ul nostru. \u0218i, desigur, nu vrem s\u0103 o aplic\u0103m \u00een \u00eentregime, vrem s\u0103 punem o nou\u0103 versiune undeva \u00eentr-un col\u021b \u00eendep\u0103rtat, poate chiar dou\u0103 versiuni noi, pentru c\u0103 acestea apar destul de des. <\/p>\n<p><\/p>\n<p>Ce putem spune despre asta?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48ed52d393d977d0cfaa9320bd02ed1e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aici avem exact aceast\u0103 oportunitate. Sunt \u0219abloanele de pod-uri. Putem detalia, operatorul nostru permite complet construirea unui cluster heterogen. Adic\u0103, configur\u00e2nd, \u00eencep\u00e2nd de la toate replicile ca un \u00eentreg, p\u00e2n\u0103 la fiecare replic\u0103 personalizat\u0103 pentru a alege ce versiune de ClickHouse dorim, ce versiune de stocare dorim. Putem configura complet un cluster cu aceast\u0103 configura\u021bie, a\u0219a cum avem nevoie. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4949ecd8119cb4ec0f4bad9bf27fa74e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vom p\u0103trunde pu\u021bin mai profund. P\u00e2n\u0103 acum am vorbit despre cum func\u021bioneaz\u0103 ClickHouse-operator \u00een raport cu specificitatea ClickHouse.<\/p>\n<p><\/p>\n<p>Acum a\u0219 dori s\u0103 spun c\u00e2teva cuvinte despre cum func\u021bioneaz\u0103 de fapt orice operator, precum \u0219i despre cum interac\u021bioneaz\u0103 cu K8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ca9c2a23c54b2a81ac0a8bba88d5e65.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 analiz\u0103m interac\u021biunea cu K8s la \u00eenceput. Ce se \u00eent\u00e2mpl\u0103 c\u00e2nd facem kubectl apply? Obiectele noastre apar \u00een etcd prin API. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b9eaedeb0f34d10398ba0187f09fef9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De exemplu, obiectele de baz\u0103 Kubernetes: pod, StatefulSet, service \u0219i a\u0219a mai departe. <\/p>\n<p><\/p>\n<p>\u00cen acest moment, nimic fizic nu se \u00eent\u00e2mpl\u0103 \u00eenc\u0103. Aceste obiecte trebuie materializate \u00een cluster. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3c49dc1b0067347d5fc415ef9b87642d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pentru aceasta, apare un controller. Controller-ul este un component special K8s, care \u0219tie s\u0103 materializeze aceste descrieri. \u0218tie cum \u0219i ce trebuie f\u0103cut fizic. \u0218tie cum s\u0103 lanseze containere, ce trebuie configurat pentru ca serverul s\u0103 func\u021bioneze. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d951eb0f7bacf519566b0ef6cf9bc100.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i el materializeaz\u0103 obiectele noastre \u00een K8s.<\/p>\n<p><\/p>\n<p>Dar vrem s\u0103 oper\u0103m nu doar cu pod-uri, StatefulSet-uri, vrem s\u0103 cre\u0103m ClickHouseInstallation, adic\u0103 un obiect de tip ClickHouse, pentru a opera cu acesta ca un \u00eentreg. Deocamdat\u0103, nu exist\u0103 aceast\u0103 posibilitate. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1594921ac5dd9384ce81ceae92f5cda9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dar K8s are urm\u0103toarea caracteristic\u0103 pl\u0103cut\u0103. Vrem s\u0103 avem un fel de entitate complex\u0103 acolo, care s\u0103 fie alc\u0103tuit\u0103 din pod-uri \u0219i StatefulSet, form\u00e2nd clusterul nostru. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/04f86706f506fa91e365d45537dd9def.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i ce trebuie f\u0103cut pentru aceasta? \u00cen primul r\u00e2nd, intr\u0103 \u00een scen\u0103 Custom Resource Definition. Ce este aceasta? Este o descriere pentru K8s, c\u0103 vei avea un alt tip de date, c\u0103 vrem s\u0103 ad\u0103ug\u0103m un resurs\u0103 personalizat\u0103 la pod, StatefulSet, care va fi complex\u0103 \u00een interior. Este o descriere a structurii datelor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f02ae12ef3ab5db974234b14e38792ac.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De asemenea, o trimitem acolo prin kubectl apply. Kubernetes a preluat-o cu bucurie. <\/p>\n<p><\/p>\n<p>\u0218i acum avem \u00een stocare, la obiectul din etcd, posibilitatea de a \u00eenregistra o resurs\u0103 personalizat\u0103 numit\u0103 ClickHouseInstallation.<\/p>\n<p><\/p>\n<p>\u00cens\u0103, p\u00e2n\u0103 acum, nu se va \u00eent\u00e2mpla nimic. Adic\u0103, dac\u0103 acum cre\u0103m un fi\u0219ier YAML, pe care l-am discutat, cu descrierea shard-urilor, replicatelor \u0219i spunem \u201ekubectl apply\u201d, Kubernetes \u00eel va accepta, \u00eel va pune \u00een etcd \u0219i va spune: \u201eExcelent, dar nu \u0219tiu ce s\u0103 fac cu el. Nu \u0219tiu cum s\u0103 \u00eentre\u021bin ClickHouseInstallation.\u201d <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7c2f9f3f81b83c987a3bd72a881d0d91.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prin urmare, avem nevoie de cineva care s\u0103 ajute Kubernetes s\u0103 \u00eentre\u021bin\u0103 un nou tip de date. \u00cen st\u00e2nga avem un controler Kubernetes standard care lucreaz\u0103 cu tipuri de date standard. Iar \u00een dreapta ar trebui s\u0103 apar\u0103 un controler personalizat, care \u0219tie s\u0103 lucreze cu tipuri de date personalizate. <\/p>\n<p><\/p>\n<p>\u0218i, pe scurt, acesta se nume\u0219te operator. L-am scos aici din Kubernetes, deoarece poate fi executat \u0219i \u00een afara K8s. Cel mai adesea, bine\u00een\u021beles, to\u021bi operatorii ruleaz\u0103 \u00een Kubernetes, dar nimic nu \u00eei \u00eempiedic\u0103 s\u0103 func\u021bioneze din exterior, a\u0219a c\u0103 l-am scos special afar\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7aa3a1b67d0def5ba752dff56baeebbf.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i, la r\u00e2ndul s\u0103u, controlerul personalizat, adic\u0103 operatorul, interac\u021bioneaz\u0103 cu Kubernetes prin API. Acesta deja \u0219tie cum s\u0103 interac\u021bioneze cu API-ul \u0219i \u0219tie cum s\u0103 materializeze o schem\u0103 complex\u0103 din resursa personalizat\u0103 pe care dorim s\u0103 o realiz\u0103m. Aceasta este exact ceea ce face operatorul. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a5f773ddc3663f24d5379955da9c3037.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cum func\u021bioneaz\u0103 operatorul? Haide\u021bi s\u0103 ne uit\u0103m \u00een partea dreapt\u0103 pentru a descoperi cum face acest lucru. Vom \u00eenv\u0103\u021ba cum operatorul materializeaz\u0103 totul \u0219i cum continu\u0103 interac\u021biunea cu K8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/08a8d8dbcb35117a0eb3320589c6ff8d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Operatorul este un program. Este orientat pe evenimente. Operatorul, cu ajutorul API-ului Kubernetes, se aboneaz\u0103 la evenimente. \u00cen API-ul Kubernetes exist\u0103 puncte de intrare la care se poate abona pentru evenimente. \u0218i dac\u0103 ceva se schimb\u0103 \u00een K8s, Kubernetes trimite evenimente tuturor celor care doresc, adic\u0103 cine s-a abonat la acest punct API va primi notific\u0103ri.<\/p>\n<p><\/p>\n<p>Operatorul se aboneaz\u0103 la evenimente \u0219i trebuie s\u0103 fac\u0103 o reac\u021bie. Sarcina sa este s\u0103 reac\u021bioneze la evenimentele care apar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f0664a4151e6e7f6f8575a3e54372e9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Evenimentele sunt generate de anumite actualiz\u0103ri. Vine fi\u0219ierul nostru YAML cu descrierea ClickHouseInstallation. Acesta, prin kubectl apply, a fost trimis \u00een etcd. Acolo s-a activat un eveniment, iar acest eveniment a ajuns la ClickHouse-operator. Operatorul a primit aceast\u0103 descriere \u0219i trebuie s\u0103 fac\u0103 ceva. Dac\u0103 s-a primit o actualizare pentru obiectul ClickHouseInstallation, trebuie s\u0103 actualiz\u0103m clusterul. Sarcina operatorului este s\u0103 actualizeze clusterul. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0952bdd391a72aa15bf66af4ce69f4af.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce face el? \u00cen primul r\u00e2nd, trebuie s\u0103 elabor\u0103m un plan de ac\u021biune pentru ceea ce vom face cu aceast\u0103 actualizare. Actualiz\u0103rile pot fi foarte mici, adic\u0103 mici \u00een execu\u021bia YAML, dar pot aduce modific\u0103ri foarte mari \u00een cluster. De aceea, operatorul creeaz\u0103 un plan \u0219i apoi se \u021bine de el.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79caaa43b6fd9f3e2eb1afe44ecb2df9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>El \u00eencepe, conform acestui plan, s\u0103 construiasc\u0103 aceast\u0103 structur\u0103 \u00een interior pentru a materializa podurile, serviciile, adic\u0103 pentru a face ceea ce este sarcina sa principal\u0103. Este ca \u0219i cum ai construi un cluster ClickHouse \u00een Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e91576a26d6b758a68ae0b35cbe01897.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Acum s\u0103 discut\u0103m despre un aspect interesant. Aceasta este \u00eemp\u0103r\u021birea responsabilit\u0103\u021bilor \u00eentre Kubernetes \u0219i operator, adic\u0103 ce face Kubernetes, ce face operatorul \u0219i cum interac\u021bioneaz\u0103 \u00eentre ei. <\/p>\n<p><\/p>\n<p>Kubernetes se ocup\u0103 de lucruri de sistem, adic\u0103 de un set de obiecte de baz\u0103 care pot fi interpretate ca av\u00e2nd un domeniu de sistem. Kubernetes \u0219tie cum s\u0103 ruleze poduri, cum s\u0103 reporneasc\u0103 containere, cum s\u0103 monteze volume, cum s\u0103 lucreze cu ConfigMap, adic\u0103 tot ce poate fi numit sistem. <\/p>\n<p><\/p>\n<p>Operatorii opereaz\u0103 \u00een domenii specifice. Fiecare operator este creat pentru domeniul s\u0103u specific. Noi am realizat unul pentru ClickHouse.<\/p>\n<p><\/p>\n<p>\u0218i operatorul interac\u021bioneaz\u0103 exact \u00een termenii domeniului, cum ar fi ad\u0103ugarea unei replici, crearea unui schem\u0103, configurarea monitoriz\u0103rii. Astfel se realizeaz\u0103 aceast\u0103 \u00eemp\u0103r\u021bire.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9dc07d9c29d5dfd538343aadb751e4c0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Haide\u021bi s\u0103 analiz\u0103m un exemplu practic, cum are loc aceast\u0103 \u00eemp\u0103r\u021bire a responsabilit\u0103\u021bilor atunci c\u00e2nd execut\u0103m ac\u021biunea de a ad\u0103uga o replic\u0103. <\/p>\n<p><\/p>\n<p>La operator vine o solicitare \u2013 ad\u0103ugarea unei replici. Ce face operatorul? Operatorul va calcula c\u0103 trebuie s\u0103 creeze un nou StatefulSet, \u00een care trebuie s\u0103 descrie anumite \u0219abloane \u0219i cerin\u021be de volum. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7a31f2f76a3bdda87e4bccf0e04fe4a8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>El preg\u0103te\u0219te totul \u0219i transmite mai departe \u00een K8s. Spune c\u0103 are nevoie de ConfigMap, StatefulSet, Volume. Kubernetes \u00ee\u0219i \u00eendepline\u0219te sarcinile. El materializeaz\u0103 unit\u0103\u021bile de baz\u0103 cu care opereaz\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2be6892234cc12b056962265c13dba07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i apoi intervine din nou ClickHouse-operator. Acesta are deja un pod fizic, pe care se poate lucra. Iar ClickHouse-operator lucreaz\u0103 din nou \u00een termenii domeniului. Adic\u0103, \u00een cazul specific al ClickHouse, pentru a activa o replic\u0103 \u00een cluster, trebuie, \u00een primul r\u00e2nd, s\u0103 configureze schema de date care exist\u0103 \u00een acest cluster. Iar, \u00een al doilea r\u00e2nd, aceast\u0103 replic\u0103 trebuie s\u0103 fie inclus\u0103 \u00een monitorizare, pentru a fi bine urm\u0103rit\u0103. Aceste set\u0103ri le face operatorul. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/790616342b98b347fa67e0100754c8b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i doar dup\u0103 aceea intervine ClickHouse, adic\u0103 o entitate de nivel superior. Aceasta este deja o baz\u0103 de date. Are propria instan\u021b\u0103, o replic\u0103 configurat\u0103, care este preg\u0103tit\u0103 s\u0103 intre \u00een cluster.<\/p>\n<p><\/p>\n<p>A\u0219adar, lan\u021bul de execu\u021bie \u0219i separarea responsabilit\u0103\u021bilor la ad\u0103ugarea unei replici este destul de lung.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ec79cfa2b45fadbe25f4d9fe8d2ec5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Continu\u0103m cu sarcinile noastre practice. Dac\u0103 clusterul exist\u0103 deja, se poate efectua migrarea configura\u021biei. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a52aee0d4350b8da00cdb4b525df80ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Am realizat astfel \u00eenc\u00e2t \u00een XML-ul existent, pe care ClickHouse \u00eel \u00een\u021belege, s\u0103 putem introduce date direct.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/91abb1d3b0a14f2118361403a74e14c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Se poate face o ajustare fin\u0103 a ClickHouse. Implementarea zonat\u0103 este exact ceea ce am explicat c\u00e2nd am vorbit despre hostPath, stocare local\u0103. Este modul corect de a face o implementare zonat\u0103.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/fde502f30223e04a918f4fd598c3dd9f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Urm\u0103toarea sarcin\u0103 practic\u0103 este monitorizarea.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4e685fba7883075105c0164a778c51e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dac\u0103 clusterul nostru se schimb\u0103, trebuie s\u0103 configur\u0103m periodic monitorizarea. <\/p>\n<p><\/p>\n<p>S\u0103 examin\u0103m schema. S\u0103 zicem c\u0103 s\u0103ge\u021bile verzi le-am discutat deja. Acum s\u0103 analiz\u0103m s\u0103ge\u021bile ro\u0219ii. Acestea arat\u0103 cum dorim s\u0103 monitoriz\u0103m clusterul nostru. Cum metricile din clusterul ClickHouse ajung \u00een Prometheus, iar apoi \u00een Grafana.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1210c1423f99d48a20e06e855bf48a72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Care este dificultatea asociat\u0103 cu monitorizarea? De ce este considerat\u0103 o realizare? Dificultatea const\u0103 \u00een dinamic\u0103. C\u00e2nd avem un cluster static, putem configura o dat\u0103 monitorizarea \u0219i apoi s\u0103 nu mai avem griji.<\/p>\n<p><\/p>\n<p>Dar dac\u0103 avem multe clustere sau se schimb\u0103 constant ceva, procesul devine dinamic. A\u0219adar, a reconfigura constant monitorizarea consum\u0103 resurse \u0219i timp, adic\u0103 devine pur \u0219i simplu o povar\u0103. Trebuie s\u0103 automatiz\u0103m acest lucru. Dificultatea rezid\u0103 \u00een dinamica procesului. Iar operatorul automatizeaz\u0103 foarte bine acest lucru. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48a7264f1228671e0c483c8211a71eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cum s-a dezvoltat clusterul nostru? La \u00eenceput a fost a\u0219a.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8a8c7b6cd5562deb315368e1e8e1c976.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Apoi a fost a\u0219a.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1a3e915fbadf3aa5f3b33d337f36e76e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen final, a ajuns s\u0103 fie astfel. <\/p>\n<p><\/p>\n<p>Iar monitorizarea se face automat de c\u0103tre operator. Exist\u0103 un punct unic de acces. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e079e65bf8deff43a81d8ffde938a709.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0218i noi doar ne uit\u0103m la tabloul de bord Grafana, observ\u00e2nd cum via\u021ba din interiorul clusterului nostru se desf\u0103\u0219oar\u0103. <\/p>\n<p><\/p>\n<p>Apropo, tabloul de bord Grafana este de asemenea distribuit cu operatorul nostru direct \u00een surs\u0103. Poate fi conectat \u0219i utilizat. Aceast\u0103 captur\u0103 de ecran mi-a fost oferit\u0103 de echipa noastr\u0103 DevOps.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ad1c2899dd845d0ba4185bdf758468c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cencotro ne dorim s\u0103 mergem mai departe? Este:<\/p>\n<p><\/p>\n<ul>\n<li>S\u0103 dezvolt\u0103m automatizarea test\u0103rii. Obiectivul principal este testarea automat\u0103 a noilor versiuni. <\/li>\n<li>De asemenea, dorim foarte mult s\u0103 automatiz\u0103m integrarea cu ZooKeeper. \u00cen plan este integrarea cu ZooKeeper-operator. Adic\u0103, pentru ZooKeeper a fost scris un operator \u0219i este logic ca cele dou\u0103 opera\u021bii s\u0103 \u00eenceap\u0103 s\u0103 se integreze pentru a construi o solu\u021bie mai convenabil\u0103. <\/li>\n<li>Dorim s\u0103 facem verific\u0103ri de s\u0103n\u0103tate mai complexe. <\/li>\n<li>Am eviden\u021biat \u00een verde ceea ce ne apropie de mo\u0219tenirea Templates \u2013 GATA, adic\u0103, cu urm\u0103toarea versiune a operatorului vom avea deja mo\u0219tenirea \u0219abloanelor. Acesta este un instrument puternic care permite construirea de configura\u021bii complexe din fragmente. <\/li>\n<li>\u0218i dorim automatizarea sarcinilor complexe. Principal\u0103 dintre acestea este Re-sharding. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f232c0aab389be5069e5c7886e265c01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u0103 facem un bilan\u021b intermediar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/62f7814994af0441ba5a82de4e9780d7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce ob\u021binem la sf\u00e2r\u0219it? \u0218i merit\u0103 s\u0103 ne ocup\u0103m de asta sau nu? Trebuie s\u0103 \u00eencerc\u0103m s\u0103 aducem baza de date \u00een Kubernetes \u0219i s\u0103 aplic\u0103m operatorul \u00een general \u0219i operatorul Alitnity \u00een special.<\/p>\n<p><\/p>\n<p>La sf\u00e2r\u0219it ob\u021binem:<\/p>\n<p><\/p>\n<ul>\n<li>O substan\u021bial\u0103 simplificare \u0219i automatizare a configur\u0103rii, desf\u0103\u0219ur\u0103rii, precum \u0219i \u00eentre\u021binerii. <\/li>\n<li>Monitorizare \u00eencorporat\u0103 imediat. <\/li>\n<li>\u0218i \u0219abloane codificate gata de utilizare pentru situa\u021bii complexe. Acum, ac\u021biune de tipul ad\u0103ug\u0103rii unei replici nu trebuie efectuat\u0103 manual. Asta face operatorul. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/aebccd7a2dc55f14645f79f89f7b7458.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A r\u0103mas doar o ultim\u0103 \u00eentrebare. Avem deja baza de date \u00een Kubernetes, virtualizare. Ce este cu performan\u021ba unei astfel de solu\u021bii, mai ales av\u00e2nd \u00een vedere c\u0103 ClickHouse este optimizat pentru performan\u021b\u0103?<\/p>\n<p><\/p>\n<p>R\u0103spunsul \u2013 totul este \u00een regul\u0103! Nu voi detalia asta, este un subiect pentru o alt\u0103 prezentare. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ffc230941f0ae24926186db4d8d68ade.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dar exist\u0103 un proiect numit TSBS. Care este principalul s\u0103u obiectiv? Este un test de performan\u021b\u0103 al bazelor de date. O \u00eencercare de a compara c\u0103ldura cu c\u0103ldura, moale cu moale. <\/p>\n<p><\/p>\n<p>Cum func\u021bioneaz\u0103? Este generat un singur set de date. Apoi, acest set de date este rulat pe acela\u0219i set de teste pe diferite baze de date. \u0218i fiecare baz\u0103 de date rezolv\u0103 o problem\u0103 a\u0219a cum \u0219tie. Apoi, rezultatele pot fi comparate. <\/p>\n<p><\/p>\n<p>Deja suport\u0103 o mul\u021bime mare de baze de date. Am eviden\u021biat trei principale. Acestea sunt:<\/p>\n<p><\/p>\n<ul>\n<li>TimescaleDB.<\/li>\n<li>InfluxDB.<\/li>\n<li>ClickHouse.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5b4733534a4e6e36fb7788127adc6e86.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De asemenea, a fost efectuat\u0103 o compara\u021bie cu o alt\u0103 solu\u021bie similar\u0103. Compara\u021bia cu RedShift. Comparatia a fost realizat\u0103 pe Amazon. ClickHouse, de asemenea, dep\u0103\u0219e\u0219te pe to\u021bi \u00een aceast\u0103 privin\u021b\u0103. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/44cc8dedc07a02fe1ed5aad3e17a579c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce concluzii se pot trasa din ceea ce am spus?<\/p>\n<p><\/p>\n<ul>\n<li>Baza de date \u00een Kubernetes este posibil\u0103. Probabil, orice baz\u0103 de date ar putea fi utilizat\u0103, dar \u00een general, se pare c\u0103 este posibil. ClickHouse \u00een Kubernetes este cu siguran\u021b\u0103 posibil cu ajutorul operatorului nostru. <\/li>\n<li>Operatorul ajut\u0103 la automatizarea proceselor \u0219i realmente simplific\u0103 via\u021ba.<\/li>\n<li>Performan\u021ba este normal\u0103.<\/li>\n<li>\u0218i, ni se pare c\u0103 aceasta poate \u0219i trebuie folosit\u0103. <\/li>\n<\/ul>\n<p><\/p>\n<p>Open source \u2013 al\u0103tura\u021bi-v\u0103!<\/p>\n<p><\/p>\n<p>A\u0219a cum am spus, operatorul este un produs complet open source, a\u0219a c\u0103 ar fi foarte bine dac\u0103 un num\u0103r maxim de oameni l-ar folosi. Al\u0103tura\u021bi-v\u0103! V\u0103 a\u0219tept\u0103m pe to\u021bi!<\/p>\n<p><\/p>\n<p>Mul\u021bumesc tuturor!<\/p>\n<p><\/p>\n<p>\u00centreb\u0103ri<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator \u00een Kubernetes pentru gestionarea clusterelor de baze de date. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4afe8b10c4f103c2a9a295511e4eb69a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>Mul\u021bumesc pentru prezentare! M\u0103 numesc Anton. Sunt din compania SEMrush. M\u0103 intereseaz\u0103 ce se \u00eent\u00e2mpl\u0103 cu logarea. Se aude despre monitorizare, dar nimic despre logare, dac\u0103 vorbim despre \u00eentregul cluster. De exemplu, noi avem un cluster pe hardware. \u0218i folosim logare centralizat\u0103, adun\u00e2nd datele \u00een mod standard \u00een totalitate. \u0218i apoi extragem datele care ne intereseaz\u0103.<\/em> <\/p>\n<p><\/p>\n<p>\u00centrebare bun\u0103, adic\u0103 logarea este pe lista de sarcini. Operatorul nostru \u00een prezent nu automatizeaz\u0103 acest proces. \u00cenc\u0103 se dezvolt\u0103, proiectul este \u00eenc\u0103 destul de t\u00e2n\u0103r. \u00cen\u021belegem necesitatea log\u0103rii. Este, de asemenea, o tem\u0103 foarte important\u0103. \u0218i probabil c\u0103 nu este mai pu\u021bin important\u0103 dec\u00e2t monitorizarea. Dar primul pe lista de implementare a fost monitorizarea. Logarea va fi. Evident, ne str\u0103duim s\u0103 automatiz\u0103m toate aspectele legate de func\u021bionarea cluster-ului. Prin urmare, r\u0103spunsul este \u2013 \u00een prezent, operatorul, din p\u0103cate, nu \u0219tie s\u0103 fac\u0103 asta, dar este \u00een planuri, vom face asta. Dac\u0103 ave\u021bi dorin\u021ba de a v\u0103 al\u0103tura, v\u0103 rog, trimite\u021bi un pull request.<\/p>\n<p><\/p>\n<p><em>Bun\u0103! Mul\u021bumesc pentru prezentare! Am o \u00eentrebare standard, legat\u0103 de Volume Persistente. C\u00e2nd cre\u0103m o configura\u021bie cu ajutorul acestui operator, cum determin\u0103 operatorul pe ce nod este montat un anumit disc sau folder? Trebuie s\u0103-i explic\u0103m dinainte c\u0103, v\u0103 rog, a\u0219eaz\u0103 ClickHouse-ul nostru exact pe acele noduri pe care exist\u0103 un disc?<\/em><\/p>\n<p><\/p>\n<p>Din c\u00e2te \u00een\u021beleg, aceast\u0103 \u00eentrebare este o continuare a stoc\u0103rii locale, \u00een special partea sa referitoare la hostPath. Este ca \u0219i cum ai explica \u00eentregului sistem ceea ce trebuie s\u0103 faci pentru ca pod-ul s\u0103 fie lansat exact pe un anumit nod, pe care avem un disc fizic conectat, care este montat pe un anumit parcurs. Este o \u00eentreag\u0103 sec\u021biune, pe care am acoperit-o foarte superficial, deoarece r\u0103spunsul este destul de mare. <\/p>\n<p><\/p>\n<p>\u00cen esen\u021b\u0103, asta arat\u0103 a\u0219a. Este evident c\u0103 trebuie s\u0103 realiz\u0103m provisioning pentru aceste volume. Momentan, \u00een stocarea local\u0103 nu exist\u0103 provisioning dinamic, a\u0219a c\u0103 DevOps trebuie s\u0103 taie manual discurile, aceste volume. De asemenea, trebuie s\u0103 explic\u0103m Kubernetes provisioning-ului c\u0103 vor exista volume persistente de un anumit tip, situate pe anumite noduri. Apoi, va trebui s\u0103 explic\u0103m Kubernetes c\u0103 podurile care necesit\u0103 un anumit tip de stocare local\u0103 trebuie programate doar pe acele noduri specifice, conform etichetelor. \u00cen acest scop, operatorul are posibilitatea de a atribui anumite etichete \u0219i o instan\u021b\u0103 per gazd\u0103. Astfel, podurile vor fi rutate de Kubernetes pentru a fi lansate doar pe nodurile care \u00eendeplinesc cerin\u021bele etichetelor, vorbind pe \u00een\u021belesul tuturor. Administratorii atribuie etichete, fac provisioning pentru discuri manual. \u0218i atunci se poate scala.<\/p>\n<p><\/p>\n<p>Iar cea de-a treia variant\u0103 local\u0103 ajut\u0103 s\u0103 u\u0219ur\u0103m pu\u021bin aceast\u0103 problem\u0103. A\u0219a cum am subliniat anterior, este o munc\u0103 minu\u021bioas\u0103 de configurare, care la final ajut\u0103 s\u0103 ob\u021binem performan\u021ba optim\u0103.<\/p>\n<p><\/p>\n<p><em>Am o a doua \u00eentrebare legat\u0103 de acest subiect. Kubernetes a fost g\u00e2ndit astfel \u00eenc\u00e2t s\u0103 nu ne pese dac\u0103 pierdem un nod sau nu. Ce ar trebui s\u0103 facem \u00een cazul \u00een care pierdem nodul care g\u0103zduie\u0219te un shard?<\/em><\/p>\n<p><\/p>\n<p>Da, Kubernetes a fost ini\u021bial pozi\u021bionat astfel \u00eenc\u00e2t rela\u021bia noastr\u0103 cu podurile s\u0103 fie asem\u0103n\u0103toare cu cea dintre cresc\u0103torii de animale, dar aici fiecare disc devine ceva similar cu un animal de companie. Exist\u0103 aceast\u0103 problem\u0103 c\u0103 nu \u00eei putem aruncate pur \u0219i simplu. Dezvoltarea Kubernetes merge \u00een direc\u021bia \u00een care nu se poate aborda complet aceast\u0103 filozofie, consider\u00e2ndu-le resurse complet eliminabile.<\/p>\n<p><\/p>\n<p>Acum o \u00eentrebare practic\u0103. Ce s\u0103 facem dac\u0103 a\u021bi pierdut un nod pe care era un disc? Aici problema se rezolv\u0103 la un nivel mai \u00eenalt. \u00cen cazul ClickHouse, avem replici care func\u021bioneaz\u0103 la un nivel superior, adic\u0103 la nivelul ClickHouse.<\/p>\n<p><\/p>\n<p>Care este dispozi\u021bia, p\u00e2n\u0103 la urm\u0103? DevOps este responsabil pentru a se asigura c\u0103 datele nu se pierd. Trebuie s\u0103 configureze corect replicarea \u0219i s\u0103 se asigure c\u0103 replicarea se desf\u0103\u0219oar\u0103. \u00cen replic\u0103, la nivelul ClickHouse, datele trebuie s\u0103 fie duplicate. Aceasta nu este o sarcin\u0103 atribuit\u0103 operatorului. \u0218i nu este o sarcin\u0103 pe care o rezolv\u0103 Kubernetes. Aceasta se rezolv\u0103 la nivelul ClickHouse.<\/p>\n<p><\/p>\n<p>Ce s\u0103 faci dac\u0103 ai o nod\u0103 hardware care a c\u0103zut? A\u0219adar, va trebui s\u0103 instalezi una secundar\u0103, corect, s\u0103 configurezi discul pe aceasta, s\u0103 aplici etichete. Dup\u0103 aceea, aceasta va \u00eendeplini cerin\u021bele, astfel \u00eenc\u00e2t Kubernetes s\u0103 poat\u0103 lansa un instantaneu al pod-ului. Kubernetes \u00eel va lansa. Totu\u0219i, nu ai suficient num\u0103r de pod-uri conform cerin\u021belor stabilite. Aceasta va trece prin ciclul pe care l-am ar\u0103tat. \u0218i la cel mai \u00eenalt nivel, ClickHouse va \u00een\u021belege c\u0103 a intrat o replic\u0103, este \u00eenc\u0103 goal\u0103 \u0219i trebuie s\u0103 \u00eencepem s\u0103 transfer\u0103m date c\u0103tre aceasta. Adic\u0103, acest proces este \u00eenc\u0103 prost automatizat. <\/p>\n<p><\/p>\n<p><em>Mul\u021bumesc pentru prezentare! C\u00e2nd se \u00eent\u00e2mpl\u0103 tot felul de nepl\u0103ceri, operatorul pic\u0103 \u0219i se reporne\u0219te, iar \u00een acel moment sosesc evenimente, cum le gestionezi?<\/em><\/p>\n<p><\/p>\n<p>Ce se va \u00eent\u00e2mpla dac\u0103 operatorul a picat \u0219i s-a repornit, nu-i a\u0219a? <\/p>\n<p><\/p>\n<p><em>Da. \u0218i \u00een acel moment au sosit evenimente.<\/em> <\/p>\n<p><\/p>\n<p>Sarcina, ce s\u0103 faci \u00een acest caz, se \u00eemparte par\u021bial \u00eentre operator \u0219i Kubernetes. Kubernetes are capacitatea de a reintegra evenimentele care s-au \u00eent\u00e2mplat. El le reintegreaz\u0103. Sarcina operatorului este de a se asigura c\u0103, atunci c\u00e2nd s-a realizat reintregratea jurnalului de evenimente, aceste evenimente sunt idempotente. \u0218i ca reapari\u021bia aceluia\u0219i eveniment s\u0103 nu ne distrug\u0103 sistemul. \u0218i operatorul nostru se descurc\u0103 cu aceast\u0103 sarcin\u0103. <\/p>\n<p><\/p>\n<p><em>Bun\u0103 ziua! Mul\u021bumesc pentru prezentare! Dmitri Zavyalov, compania<\/em> <em>Smedova. Se preconizeaz\u0103 ad\u0103ugarea \u00een operator a posibilit\u0103\u021bii de configurare cu haproxy? Ne-ar interesa un alt echilibrator pe l\u00e2ng\u0103 cel standard, care s\u0103 fie inteligent \u0219i s\u0103 \u00een\u021beleag\u0103 c\u0103 exist\u0103 de fapt ClickHouse.<\/em> <\/p>\n<p><\/p>\n<p>Vorbe\u0219ti despre Ingress?<\/p>\n<p><\/p>\n<p><em>Da, \u00eenlocuie\u0219te Ingress cu haproxy. \u00cen haproxy po\u021bi s\u0103 specifici topologia cluster-ului, unde sunt replicile.<\/em><\/p>\n<p><\/p>\n<p>Deocamdat\u0103 nu ne-am g\u00e2ndit la asta. Dac\u0103 \u00ee\u021bi este necesar \u0219i po\u021bi explica de ce este nevoie, atunci poate fi implementat, mai ales dac\u0103 vrei s\u0103 participi. Cu pl\u0103cere vom analiza op\u021biunea. R\u0103spunsul scurt \u2013 nu, \u00een acest moment nu avem aceast\u0103 func\u021bionalitate. Mul\u021bumesc pentru sugestie, ne vom uita la asta. \u0218i dac\u0103 ne explici use case-ul \u0219i de ce este necesar \u00een practic\u0103, de exemplu, s\u0103 creezi issues pe GitHub, va fi minunat.<\/p>\n<p><\/p>\n<p><em>Deja exist\u0103.<\/em><\/p>\n<p><\/p>\n<p>Bine. Suntem deschi\u0219i la orice sugestii. \u0218i haproxy se adaug\u0103 pe lista de to-do. Lista de to-do cre\u0219te, nu scade deocamdat\u0103. Dar este bine, asta \u00eenseamn\u0103 c\u0103 produsul este c\u0103utat.<\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/523378\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u043e\u043a\u043b\u0430\u0434 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 Kubernetes, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0435\u0433\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Kubernetes \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d; \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438; \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442, \u0430 \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0414\u0430\u043b\u0435\u0435, \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":96966,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-96965","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=\"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\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019\" \/>\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\udd47\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Kubernetes \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 \u0411\u0414. \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u041a\u043b\u0438\u043c\u0435\u043d\u043a\u043e (Altinity, 2019) | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019\" \/>\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-10-15T12:42:53+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-15T12:42:53+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\udd47Operator \u00een Kubernetes pentru gestionarea clustelor de baze de date. Vladislav Klimenko (Altinity, 2019) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","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\udd47\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Kubernetes \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 \u0411\u0414. \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u041a\u043b\u0438\u043c\u0435\u043d\u043a\u043e (Altinity, 2019) | ProHoster","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","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-10-15T12:42:53+00:00","article:modified_time":"2020-10-15T12:42:53+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"96965","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 10:29:25","updated":"2022-09-30 17:40:21","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\/96965","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=96965"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/96965\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/96966"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=96965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=96965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=96965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}