{"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\/hr\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","title":{"rendered":"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/56e002c7408c4708e39ece867f84171e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Izvje\u0161taj se fokusira na prakti\u010dna pitanja razvoja operatora u Kubernetesu, projektiranja njegove arhitekture i osnovnih principa funkcioniranja.<\/p>\n<p><\/p>\n<p>U prvom dijelu izlaganja razmotrit \u0107emo:<\/p>\n<p><\/p>\n<ul>\n<li>\u0161to je operator u Kubernetesu i za\u0161to nam je potreban;<\/li>\n<li>kako operator olak\u0161ava upravljanje slo\u017eenim sustavima;<\/li>\n<li>\u0161ta operator mo\u017ee, a \u0161ta operator ne mo\u017ee.<\/li>\n<\/ul>\n<p><\/p>\n<p>Nakon toga prelazimo na diskusiju o unutarnjoj strukturi operatora. Razmotrit \u0107emo arhitekturu i funkcioniranje operatora korak po korak. Detaljno \u0107emo obraditi:<\/p>\n<p><\/p>\n<ul>\n<li>interakciju izme\u0111u operatora i Kubernetesa;<\/li>\n<li>koje funkcije operator preuzima na sebe, a \u0161ta delegira u Kubernetes.<\/li>\n<\/ul>\n<p><\/p>\n<p>Razmotrit \u0107emo upravljanje shardovima i replikama baze podataka u Kubernetesu.<br \/>\nNakon toga, raspravljat \u0107emo o pitanjima pohrane podataka:<\/p>\n<p><\/p>\n<ul>\n<li>kako raditi s Persistent Storage s gledi\u0161ta operatora;<\/li>\n<li>zamke kori\u0161tenja Local Storage.<\/li>\n<\/ul>\n<p><\/p>\n<p>U zavr\u0161nom dijelu izlaganja razmotrit \u0107emo prakti\u010dne primjere primjene <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">clickhouse-operatora<\/a><\/noindex> s Amazon ili Google Cloud servisom. Izvje\u0161taj se temelji na primjeru razvoja i iskustva kori\u0161tenja operatora za 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=\"Pogledajte 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>Zovem se Vladislav Klimenko. Danas bih \u017eelio govoriti o na\u0161em iskustvu razvoja i kori\u0161tenja operatora, a to je specijalizirani operator za upravljanje klasterima baza podataka. Na primjeru <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">ClickHouse-operatora<\/a><\/noindex> za upravljanje klasterom ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cc297a3edb3b2a5e30d0dc2725de4011.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za\u0161to imamo mogu\u0107nost govoriti o operatoru i ClickHouseu?<\/p>\n<p><\/p>\n<ul>\n<li>Bavimo se podr\u0161kom i razvojem ClickHousea. <\/li>\n<li>Trenutno poku\u0161avamo polako doprinijeti razvoju ClickHousea. I drugi smo po obimu napravljenih promjena u ClickHouseu, odmah nakon Yandexa. <\/li>\n<li>Poku\u0161avamo raditi dodatne projekte za ekosustav ClickHouse. <\/li>\n<\/ul>\n<p><\/p>\n<p>O jednom od takvih projekata \u017eelio bih govoriti. To je ClickHouse-operator za Kubernetes. <\/p>\n<p><\/p>\n<p>U svom izlaganju \u017eelio bih se dotaknuti dvije teme: <\/p>\n<p><\/p>\n<ul>\n<li>Prva tema \u2013 kako na\u0161 operator za upravljanje bazama podataka ClickHouse u Kubernetesu radi. <\/li>\n<li>Druga tema \u2013 kako radi bilo koji operator, tj. kako on komunicira s Kubernetesom. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ova dva pitanja \u0107e se preklapati tokom cijelog mog izlaganja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4cc9790e18e70ae1ccde2cf39ef4ef00.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kome \u0107e biti zanimljivo poslu\u0161ati ono \u0161to poku\u0161avam predstaviti?<\/p>\n<p><\/p>\n<ul>\n<li>Najzanimljivije \u0107e biti onima koji koriste operatore. <\/li>\n<li>Ili onima koji \u017eele napraviti svoj, kako bi razumjeli kako to funkcionira iznutra, kako operator komunicira s Kubernetesom i koje zamke se mogu pojaviti. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/07545f7a0171b610697c519d4aa9cd43.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kako bismo najbolje razumjeli ono o \u010demu \u0107emo danas razgovarati, bilo bi dobro poznavati kako radi Kubernetes i imati osnovno znanje o oblaku. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/eff56cc3e83fde3d3e64d73d41b07417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to je ClickHouse? To je kolumnasta baza podataka specijalizirana za online obradu analiti\u010dkih upita. I potpuno je open source. <\/p>\n<p><\/p>\n<p>I va\u017eno je znati samo dvije stvari. Treba znati da je to baza podataka, tako da \u0107e sve \u0161to budem pri\u010dao biti primjenjivo na gotovo bilo koju bazu podataka. I da se SGBD ClickHouse vrlo dobro skalira, gotovo linearno pru\u017ea skalabilnost. Stanje klastera je stoga za ClickHouse prirodno stanje. Najvi\u0161e nas zanima raspraviti kako odr\u017eavati ClickHouse klaster u Kubernetesu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5eb1ff5026c492117bf2467b10de7053.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za\u0161to je potreban tamo? Za\u0161to ne mo\u017eemo nastaviti raditi sami? Odgovori su djelomi\u010dno tehni\u010dki, a djelomi\u010dno organizacijski. <\/p>\n<p><\/p>\n<ul>\n<li>U praksi se sve vi\u0161e susre\u0107emo sa situacijom gdje su u velikim tvrtkama gotovo svi komponenti ve\u0107 u Kubernetesu. Baze podataka ostaju izvan. <\/li>\n<li>I sve se \u010de\u0161\u0107e postavlja pitanje: \u201eMo\u017ee li se to smjestiti unutra?\u201c. Zato velike tvrtke nastoje posti\u0107i maksimalnu unifikaciju upravljanja kako bi brzo mogle upravljati svojim skladi\u0161tima podataka. <\/li>\n<li>I to posebno poma\u017ee ako je potrebna maksimalna mogu\u0107nost ponovnog postavljanja na novom mjestu, tj. maksimalna prenosivost.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/99312e74bd7ed4031128c7ec872f6a68.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Koliko je to jednostavno ili te\u0161ko? Naravno, to se mo\u017ee raditi ru\u010dno. Ali nije tako jednostavno, jer se zbraja slo\u017eenost upravljanja samim Kubernetesom, dok se istovremeno pridodaje specifi\u010dnost ClickHousea. Tako dolazi do agregacije. <\/p>\n<p><\/p>\n<p>Sve zajedno daje dovoljno velik skup tehnologija kojima se upravlja, \u0161to postaje ve\u0107 dovoljno slo\u017eeno, jer Kubernetes donosi svoja svakodnevna pitanja za rad, a ClickHouse donosi svoja pitanja za svakodnevni rad. Osobito, ako imamo vi\u0161e ClickHousea i stalno trebamo ne\u0161to raditi s njima. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. 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 uz dinami\u010dku konfiguraciju ima dovoljno velik broj pitanja koja stvaraju stalni optere\u0107enje na DevOps:<\/p>\n<p><\/p>\n<ul>\n<li>Kada \u017eelimo promijeniti ne\u0161to u ClickHouseu, na primjer, dodati replikaciju, shard, moramo upravljati konfiguracijom. <\/li>\n<li>Zatim promijeniti shemu podataka, jer ClickHouse ima specifi\u010dan na\u010din shardiranja. Tamo je potrebno rasporediti shemu podataka i rasporediti konfiguracije. <\/li>\n<li>Trebate postaviti monitoring. <\/li>\n<li>Prikupljanje logova za nove shardove, za nove replike. <\/li>\n<li>Pobrinuti se za oporavak.<\/li>\n<li>I ponovno pokretanje. <\/li>\n<\/ul>\n<p><\/p>\n<p>To su rutinski poslovi koje bi bilo lijepo olak\u0161ati u eksploataciji.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2461e861ca1d2f2344ead9decf85a97e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sam Kubernetes dobro poma\u017ee u eksploataciji, ali u osnovnim sistemskim stvarima. <\/p>\n<p><\/p>\n<p>Kubernetes dobro olak\u0161ava i automatizira takve stvari kao \u0161to su:<\/p>\n<p><\/p>\n<ul>\n<li>Oporavak.<\/li>\n<li>Ponovno pokretanje. <\/li>\n<li>Upravljanje sustavom pohrane.<\/li>\n<\/ul>\n<p><\/p>\n<p>To je dobro, to je ispravna smjernica, ali on u potpunosti nema predstavu o tome kako eksploatirati klaster baze podataka. <\/p>\n<p><\/p>\n<p>\u017deli se vi\u0161e, \u017eeli se da nam cijela baza podataka radi u Kubernetesu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6564e9f29d5d518925c8593bca978345.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u017deli se dobiti ne\u0161to poput velikog \u010darobnog crvenog dugmeta koje pritisne\u0161 i pokrene se i odr\u017eava tijekom cijelog \u017eivotnog ciklusa klaster s dnevnim zadacima koje je potrebno rje\u0161avati. Klaster ClickHouse u Kubernetesu.<\/p>\n<p><\/p>\n<p>I trudili smo se napraviti takvo rje\u0161enje koje bi olak\u0161alo rad. To je ClickHouse-operator za Kubernetes od tvrtke Altinity.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ff80c6fc59069ec900d545096ad978d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Operator je program, \u010dija je glavna zada\u0107a upravljati drugim programima, tj. to je menad\u017eer. <\/p>\n<p><\/p>\n<p>I sadr\u017ei obrasce pona\u0161anja. To se mo\u017ee nazvati kodificiranim znanjima o predmetnom podru\u010dju. <\/p>\n<p><\/p>\n<p>I njegova glavna zada\u0107a je olak\u0161ati \u017eivot DevOps-u i smanjiti mikroupravljanje, kako bi on (DevOps) razmi\u0161ljao u pojmovima visokog nivoa, tj. da se ne bavi mikroupravljanjem niti manualnom konfiguracijom svih detalja. <\/p>\n<p><\/p>\n<p>I upravo je operator robot asistent koji se bori protiv mikrozadataka i poma\u017ee DevOps-u.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0824a1fa710e8c4f45406aa7f596b977.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za\u0161to je potreban operator? Posebno dobro se pokazuje u dva pitanja:<\/p>\n<p><\/p>\n<ul>\n<li>Kada stru\u010dnjaku koji se bavi ClickHouse-om nedostaje iskustva, ali ve\u0107 treba eksploatirati ClickHouse, operator olak\u0161ava eksploataciju i omogu\u0107ava eksploataciju klastera ClickHouse sa dovoljno slo\u017eenom konfiguracijom, pritom ne upu\u0161taju\u0107i se previ\u0161e u detalje o tome kako to sve radi iznutra. Samo mu se daju visoko nivojski zadaci, i to funkcionira. <\/li>\n<li>I druga zada\u0107a u kojoj se najbolje pokazuje je automatizacija velikog broja standardnih zadataka. Uklanja mikrozadatke sa sustavnih administratora. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f1cb11156d57f560d0b6c82700ac6ff8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To je najpotrebnije ili onima koji tek zapo\u010dinju svoj put, ili onima koji se puno bave automatizacijom. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/128e7d9ff1ce0c535f98be66aedb1060.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Koja je razlika izme\u0111u pristupa temeljenog na operatorima i drugih sustava? Ima i Helm. Tako\u0111er poma\u017ee u postavljanju ClickHouse-a, mo\u017ee se nacrtati helm charts koji \u010dak postavljaju cijeli klaster ClickHouse-a. Koja je onda razlika izme\u0111u operatora i Helm-a?<\/p>\n<p><\/p>\n<p>Osnovna temeljna razlika je u tome \u0161to je Helm upravljanje paketima, dok operator ide dalje. To je pra\u0107enje cijelog \u017eivotnog ciklusa. To nije samo instalacija, ve\u0107 svakodnevni zadaci koji uklju\u010duju skaliranje, shardiranje, tj. sve \u0161to je potrebno izvr\u0161iti tijekom \u017eivotnog ciklusa (ako je potrebno, i uklanjanje) \u2013 to sve rje\u0161ava operator. Poku\u0161ava automatizirati i odr\u017eavati cijeli \u017eivotni ciklus softvera. U tome le\u017ei njegova temeljna razlika od drugih predstavljenih rje\u0161enja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e26b57c8caf8437f683d7afbfa127ebd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To je bila uvodna dio, idemo dalje. <\/p>\n<p><\/p>\n<p>Kako gradimo svoj operator? Poku\u0161avamo pristupiti pitanju upravljanja klasterom ClickHouse kao jednim izvorom. <\/p>\n<p><\/p>\n<p>Evo, s lijeve strane slike imamo ulazne podatke. To je YAML s specifikacijom klastera, koji se na klasi\u010dan na\u010din prenosi u Kubernetes putem kubectl-a. Tamo na\u0161 operator preuzima, izvodi svoju magiju. I na izlazu dobivamo ovakvu shemu. To je implementacija ClickHouse-a u Kubernetesu.<\/p>\n<p><\/p>\n<p>I dalje \u0107emo polako gledati kako operator zapravo radi, koje tipi\u010dne zadatke mo\u017eemo rje\u0161avati. Razmotrit \u0107emo samo tipi\u010dne zadatke, jer imamo ograni\u010deno vrijeme. I ne\u0107e biti rije\u010di o svemu \u0161to operator mo\u017ee rije\u0161iti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b40401931b58988058419d4495dbb1bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oslonimo se na praksu. Na\u0161 projekt je potpuno open source, stoga mo\u017eete pogledati na GitHubu kako to funkcionira. I mo\u017ee se krenuti od ideje, ako \u017eelite samo pokrenuti, s Quick Start Guide mo\u017eete po\u010deti.<\/p>\n<p><\/p>\n<p>Ako \u017eelite detaljno istra\u017eiti, trudimo se odr\u017eavati dokumentaciju u vi\u0161e-manje pristojnom stanju. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9414d7c3aa94b6ad999e150f0ac25a97.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zapo\u010dnimo sa prakti\u010dnim zadatkom. Prvi zadatak s kojim \u017eelimo po\u010deti jest pokrenuti prvi primjer na bilo koji na\u010din. Kako pokrenuti ClickHouse putem operatora, \u010dak i ne znaju\u0107i mnogo o tome kako radi? Pi\u0161emo manifest, budu\u0107i da je sva komunikacija s k8s komunikacija putem manifestata.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3e97cd235827460693ed95fb3598d31d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Evo jednog slo\u017eenog manifesta. Ono \u0161to je ozna\u010deno crvenom bojom je ono na \u010demu trebamo naglasiti. Od operatora tra\u017eimo da stvori klaster imenom demo.<\/p>\n<p><\/p>\n<p>Za sada su to osnovni primjeri. Pohrana (Storage) jo\u0161 nije opisana, ali \u0107emo se na pohranu vratiti malo kasnije. Za sada \u0107emo pratiti razvoj klastera.<\/p>\n<p><\/p>\n<p>Stvorili smo ovaj manifest. Donosimo ga na\u0161em operatoru. On je radio i napravio magiju.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/502e64fbe6ed7d04b2aecb7d51abc7f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gledamo u konzolu. Interesantna su tri komponente \u2013 to su Pod, dva servisa (Service-a), StatefulSet.<\/p>\n<p><\/p>\n<p>Operator je odradio i mo\u017eemo vidjeti \u0161to je to\u010dno stvorio. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/67faf120e21e5113680ccff9c71b00f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Stvara otprilike ovakav raspored. Imamo StatefulSet, Pod, ConfigMap za svaku replikaciju, ConfigMap za cijeli klaster. Obavezno su potrebni servisi kao ulazne to\u010dke u klaster. <\/p>\n<p><\/p>\n<p>Servisi \u2013 to su centralni Load Balancer Service i jo\u0161 jedan za svaku replikaciju, za svaki shard. <\/p>\n<p><\/p>\n<p>Na\u0161 osnovni klaster izgleda otprilike ovako. Sastoji se od jedne jedine \u010dvor (node). <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f235ada45ee58b517c0e041f795ae122.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Idemo dalje, zakomplicirajmo stvari. Trebamo shardirati klaster.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/992836a00434c64fb4616c1c4cc4df97.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na\u0161i zadaci rastu, po\u010dinje dinamika. \u017delimo dodati shard. Pratimo razvoj. Mijenjamo na\u0161u specifikaciju. Navodimo da \u017eelimo dva sharda. <\/p>\n<p><\/p>\n<p>To je isti onaj fajl koji se dinami\u010dki razvija s rastom sustava. Pohrana ne postoji, pohrana \u0107e biti razmatrana kasnije, to je posebna tema.<\/p>\n<p><\/p>\n<p>Dajemo YAML operatoru i gledamo \u0161to se doga\u0111a. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8ddb5845cae160098470208f51b5da7c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Operator je razmislio i stvorio sljede\u0107e entitete. Ve\u0107 imamo dva Poda, tri Servisa i, iznenada, 2 StatefulSet-a. Za\u0161to 2 StatefulSet-a?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/26eb734ff1a195de2ceaab842b472ee4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na dijagramu je bilo ovako \u2013 ovo je na\u0161e prvotno stanje, kada je postojao jedan pod.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/657838b0d378121fdd66ad3ff8168600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Postalo je ovako. Za sada je sve jednostavno, duplicirano je. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f039a7046f1c56fbdad6b5a26a519b10.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I za\u0161to je StatefulSet postao dva? Ovdje se trebamo odmaknuti i raspraviti o tome kako se u Kubernetes-u upravlja Pod-ovima.<\/p>\n<p><\/p>\n<p>Postoji objekt pod nazivom StatefulSet, koji omogu\u0107uje kreiranje skupa Pod-ova iz predlo\u0161ka. Klju\u010dni faktor ovdje je Template. U jednom StatefulSet-u mo\u017eete pokrenuti vi\u0161e Pod-ova iz jednog predlo\u0161ka. Klju\u010dna fraza ovdje je 'vi\u0161e Pod-ova iz jednog predlo\u0161ka'.<\/p>\n<p><\/p>\n<p>Postojala je velika isku\u0161enja da se cijeli klaster pakira u jedan StatefulSet. To bi funkcioniralo, tu nema nikakvih problema. No postoji jedan uvjet. Ako \u017eelimo sastaviti heterogeni klaster, tj. od vi\u0161e verzija ClickHouse-a, tada se javljaju pitanja. Da, StatefulSet mo\u017ee izvr\u0161iti rolling update, da se mo\u017ee primijeniti nova verzija, obja\u0161njavaju\u0107i da ne bi trebalo imati vi\u0161e od toliko nodova odjednom.<\/p>\n<p><\/p>\n<p>Ali ako ekstrapoliramo zadatak i ka\u017eemo da \u017eelimo stvoriti potpuno heterogeni klaster i ne \u017eelimo zamijeniti staru verziju s novom pomo\u0107u rolling update-a, ve\u0107 jednostavno \u017eelimo stvoriti heterogeni klaster u smislu razli\u010ditih verzija ClickHouse-a, tako i u smislu razli\u010ditog storage-a. \u017delimo, na primjer, neke replike napraviti na posebnim diskovima, sporim, op\u0107enito, potpuno izgraditi heterogeni klaster. I zbog toga \u0161to StatefulSet stvara standardizirano rje\u0161enje iz jednog predlo\u0161ka, nema mogu\u0107nosti to ostvariti. <\/p>\n<p><\/p>\n<p>Nakon nekog razmi\u0161ljanja donesena je odluka da \u0107emo to napraviti ovako. Svaka replika ima svoj StatefulSet. Ima nekih nedostataka u ovom rje\u0161enju, ali u praksi sve to potpuno inkapsulira operator. I ima mnogo prednosti. Mo\u017eemo izgraditi potpuno takav klaster kakav \u017eelimo, na primjer, apsolutno heterogen. Stoga, u klasteru gdje imamo dva shard-a sa jednom replikom, imat \u0107emo 2 StatefulSet-a i 2 Pod-a upravo zbog toga \u0161to smo izabrali takav pristup iz navedenih razloga za mogu\u0107nost izgradnje heterogenog klastera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b7ae92a545f9bb6cc5f0136df87207f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vratimo se prakti\u010dnim zadacima. U na\u0161em klasteru potrebno je postaviti korisnike, tj. potrebno je izvr\u0161iti neku konfiguraciju ClickHouse-a u Kubernetes-u. Operator za to pru\u017ea sve mogu\u0107nosti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6a65aa78293c0b40230cf24efc58e55a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mo\u017eemo direktno u YAML-u pisati ono \u0161to \u017eelimo. Sve konfiguracijske opcije mapiraju se iz ovog YAML-a u ClickHouse konfiguracije, koje se potom raspore\u0111uju po cijelom klasteru.<\/p>\n<p><\/p>\n<p>Mo\u017ee se pisati i ovako. Ovo je samo primjer. Lozinka se mo\u017ee napraviti \u0161ifriranom. Podr\u017eavaju se apsolutno sve konfiguracijske opcije ClickHouse-a. Ovdje je samo primjer. <\/p>\n<p><\/p>\n<p>Konfiguracija se po klasteru \u0161iri kao ConfigMap. U praksi, a\u017euriranje ConfigMap-a ne doga\u0111a se odmah, stoga, ako je klaster velik, proces preno\u0161enja konfiguracije traje ne\u0161to vremena. Ali sve to je vrlo prikladno za eksploataciju.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2e42d19d7a558e3b8d4bbb51fe5bd08b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Komplikujemo zadatak. Klaster se razvija. \u017delimo replicirati podatke. Drugim re\u010dima, ve\u0107 imamo dva \u0161arda, po jednu repliku, korisnici su pode\u0161eni. Raste i \u017eelimo se baviti replikacijom.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4c97e5e6ca9cb66d3a94fb8cfe610186.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160ta nam je potrebno za replikaciju? <\/p>\n<p><\/p>\n<p>Potreban nam je ZooKeeper. U ClickHouse replikacija je izgra\u0111ena uz pomo\u0107 ZooKeeper-a. ZooKeeper je potreban kako bi razli\u010dite replike ClickHouse-a imale konsenzus o tome koji blokovi podataka postoje na kojem ClickHouse-u. <\/p>\n<p><\/p>\n<p>Mo\u017ee se koristiti bilo koji ZooKeeper. Ako preduze\u0107e ima eksterni ZooKeeper, mo\u017ee se koristiti. Ako ne, mo\u017ee se instalirati iz na\u0161eg repozitorija. Postoji instalater koji sve ovo olak\u0161ava. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6cc40951a19b982abf578836edf569d3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I shema interakcije celog sistema izgleda ovako. Imamo Kubernetes kao platformu. Na njemu se izvr\u0161ava ClickHouse operator. ZooKeeper sam prikazao ovde. I operator komunicira sa ClickHouse-om i sa ZooKeeper-om. Drugim re\u010dima, dolazi do interakcije. <\/p>\n<p><\/p>\n<p>Sve ovo je potrebno kako bi ClickHouse uspe\u0161no replikovao podatke u k8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4fc37aee850acd20517fa3d7562f0165.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hajde da pogledamo samo zadatak, kako \u0107e izgledati manifest za replikaciju.<\/p>\n<p><\/p>\n<p>U na\u0161 manifest dodajemo dve sekcije. Prva - gde uzimamo ZooKeeper, koji mo\u017ee biti unutar Kubernetes-a ili eksterni. Ovo je jednostavno opisivanje. I naru\u010dujemo replikacije. Drugim re\u010dima, \u017eelimo dve replike. Dakle, na izlazu treba da imamo 4 pod-a. Za skladi\u0161te se se\u0107amo, vrati\u0107e se malo kasnije. Skladi\u0161te - to je posebna pri\u010da. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/afb8c974d0587a4ad87d6ba36bbe5e3b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bilo je ovako.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/909ffd258dbce718ddf529a1a753de6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sada izgleda ovako. Dodaju se replike. 4. nije stajala, verujemo da ih mo\u017ee biti mnogo. I sa strane se dodaje ZooKeeper. Schemi se komplikuju. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c33b37fc7fc72f51276e5e98b9ec2134.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I vreme je da dodamo slede\u0107i zadatak. Po\u010de\u0107emo da dodajemo Persistent Storage. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f28d14901a713eca413a52ec6ea21ac5.jpeg\" style=\"display:block;margin: 0 auto;\" \/>\u0160to se ti\u010de Persistent Storage, imamo razli\u010dite opcije realizacije.<\/p>\n<p><\/p>\n<p>U slu\u010daju da se izvr\u0161avamo u cloud provajderu, na primer, koriste\u0107i Amazon, Google, postoji velika primamljivost da se iskoristi cloud storage. To je veoma zgodno, to je dobro. <\/p>\n<p><\/p>\n<p>I postoji druga opcija. To je za lokalno skladi\u0161te, kada imamo lokalne diskove na svakoj nodi. Ova opcija je mnogo slo\u017eenija za realizaciju, ali je pritom i produktivnija. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/483ee5c08b62e987620bf54fd32a44b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hajde da vidimo \u0161ta imamo u vezi sa cloud storage-om.<\/p>\n<p><\/p>\n<p>Postoje prednosti. Veoma je lako konfigurirati. Samo naru\u010dimo od cloud provajdera, daj nam, molim te, skladi\u0161te odre\u0111ene kapaciteta, odre\u0111ene klase. Klase su opisane od strane provajdera. <\/p>\n<p><\/p>\n<p>I postoji nedostatak. Za nekoga je to neprimjetan nedostatak. Naravno, bit \u0107e nekih problema s performansama. Ovo je vrlo prakti\u010dno za rad, pouzdano je, ali postoje odre\u0111eni potencijalni padovi u performansama.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8e82430b64477f91640078ff4eacb47e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kako je ClickHouse usredoto\u010den na performanse, mo\u017ee se \u010dak re\u0107i da izvla\u010di maksimum iz svega \u0161to mo\u017ee, stoga mnogi klijenti nastoje izvu\u0107i najvi\u0161e performansi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8638fe37b848a98ce8326218d368baa3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A kako bismo izvukli maksimum, potrebna nam je lokalna pohrana.<\/p>\n<p><\/p>\n<p>Kubernetes pru\u017ea tri apstrakcije za kori\u0161tenje lokalne pohrane. To su: <\/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>Razmotrit \u0107emo kako se razlikuju i po \u010demu su sli\u010dni. <\/p>\n<p><\/p>\n<p>Prvo, u sva tri pristupa, pohrana su lokalni diskovi koji se nalaze na istoj fizi\u010dkoj k8s nodi. No, postoji nekoliko razlika.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79afb620a0c9a1552b47240b405fedc9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zapo\u010det \u0107emo s najjednostavnijim, tj. s emptyDir. \u0160to to prakti\u010dki zna\u010di? To je da tra\u017eimo od na\u0161e specifikacije da nam sustav kontejnerizacije (naj\u010de\u0161\u0107e je to Docker) omogu\u0107i pristup mapi na lokalnom disku.<\/p>\n<p><\/p>\n<p>U praksi, Docker negdje u svojim vlastitim putanjama stvara privremenu mapu, naziva je dugim he\u0161em. I omogu\u0107uje pristup toj mapi. <\/p>\n<p><\/p>\n<p>Kako \u0107e to funkcionirati po pitanju performansi? Funkcionirat \u0107e brzinom lokalnog diska, tj. to je potpuno pristup vlastitom disku. <\/p>\n<p><\/p>\n<p>No, ova pojava ima svoj nedostatak. Persistent pohrana u ovome je prili\u010dno sumnjiva. Pri prvom pomaku Dockera s kontejnerima, Persistent se gubi. Ako Kubernetes iz nekog razloga \u017eeli premjestiti ovu Pod na drugi disk, podaci \u0107e se izgubiti. <\/p>\n<p><\/p>\n<p>Ovaj pristup je dobar za testiranje, jer pokazuje normalnu brzinu, ali za ne\u0161to ozbiljnije ovaj izbor nije prikladan. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0b60f80fc9ea0e2c1820021bcd9e1382.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Stoga postoji drugi pristup. To je hostPath. Ako pogledate prethodni slajd i ovaj, mo\u017eete vidjeti samo jednu razliku. Na\u0161a mapa je iza\u0161la iz Dockera direktno na Kubernetes nodu. Tu je malo jednostavnije. Direktno navodimo put po lokalnom datote\u010dnom sustavu gdje bismo \u017eeljeli pohraniti svoje podatke. <\/p>\n<p><\/p>\n<p>Ovaj na\u010din ima svoje prednosti. To je ve\u0107 prava Persistent pohrana, i to klasi\u010dna. Na disku \u0107e biti zapisana podaci na nekoj adresi. <\/p>\n<p><\/p>\n<p>Postoje i nedostaci. To je slo\u017eenost upravljanja. Na\u0161 Kubernetes mo\u017ee po\u017eeljeti premjestiti Pod na drugi fizi\u010dki \u010dvor. I tada dolazi do izra\u017eaja DevOps. On mora pravilno objasniti cijelom sustavu da se ti podovi mogu premje\u0161tati samo na one \u010dvorove na kojima imate ne\u0161to montirano putem tih putanja i ne vi\u0161e od jednog \u010dvora odjednom. To je prili\u010dno slo\u017eeno. <\/p>\n<p><\/p>\n<p>Specijalno za te svrhe, mi smo u na\u0161em operateru napravili predlo\u0161ke kako bismo svu tu slo\u017eenost sakrili. I moglo bi se jednostavno re\u0107i: \u201e\u017delim da imam jedan instance ClickHouse-a na svakoj fizi\u010dkoj \u010dvoru i po takvom putu\u201c. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f64c19bccc8b187d6af112eda896b25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ali ta potreba nije potrebna samo nama, stoga gospoda iz samog Kubernetesa tako\u0111er razumiju da ljudima treba pristup fizi\u010dkim diskovima, pa oni pru\u017eaju tre\u0107u razinu.<\/p>\n<p><\/p>\n<p>Ona se zove local. Razlike od prethodnog slajda prakti\u010dki nema. Samo \u0161to je ranije trebalo ru\u010dno provoditi pravila da se ti podovi ne smiju premje\u0161tati s \u010dvora na \u010dvor, jer moraju biti vezani na takav put za lokalni fizi\u010dki disk, a sad se sve te informacije inkapsuliraju u Kubernetesa. I postaje mnogo jednostavnije konfigurirati.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/140c43be34dd7015c0bf4cfd0a0bb384.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vratimo se na\u0161oj prakti\u010dnoj zadatku. Vratimo se YAML predlo\u0161ku. Tu imamo pravi storage. Vratili smo se tome. Postavljamo klasi\u010dni VolumeClaim predlo\u017eak kao u k8s. I opisujemo koji storage \u017eelimo.<\/p>\n<p><\/p>\n<p>Nakon toga k8s \u0107e zatra\u017eiti storage. Dodelit \u0107e nam ga u StatefulSet-u. I na kraju \u0107e to biti na raspolaganju ClickHouse-u.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/960e666486ed09cebd83235d43f83970.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Imali smo ovakvu shemu. Na\u0161 Persistent Storage bio je crven, \u0161to nam je kao nagovijestilo da bismo ga trebali napraviti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a989df489e3a9fef6a4fbf7b93c489a6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I postaje zeleni. Sada je shema klastera ClickHouse na k8s potpuno finalizirana. Imamo shardove, replike, ZooKeeper, imamo pravi Persistent, koji je realiziran na ovaj ili onaj na\u010din. Shema je ve\u0107 potpuno funkcionalna. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c409ee5da6309a67904394d968ed4906.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nastavljamo \u017eivjeti dalje. Na\u0161 klaster se razvija. I Aleksey se trudi i objavljuje novu verziju ClickHouse-a.<\/p>\n<p><\/p>\n<p>Pojavljuje se prakti\u010dni zadatak \u2013 testirati novu verziju ClickHouse-a na na\u0161em klasteru. Pri tome, naravno, ne \u017eelimo je primijeniti na cijeli klaster, \u017eelimo negdje u udaljeni kutak staviti novu verziju, ili mo\u017eda ne samo jednu novu verziju, ve\u0107 odmah dvije, jer one \u010desto izlaze. <\/p>\n<p><\/p>\n<p>\u0160to mo\u017eemo re\u0107i o tome?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48ed52d393d977d0cfaa9320bd02ed1e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ovdje imamo upravo tu priliku. To su predlo\u0161ci podova. Mo\u017eemo ih definirati, na\u0161 operator potpuno omogu\u0107uje izgradnju heterogenog klastera. To jest, mo\u017eemo konfigurirati, po\u010dev\u0161i od svih replikacija kao skupa, do svake pojedina\u010dne replike, koju verziju ClickHouse-a \u017eelimo, koju verziju storage-a \u017eelimo. Potpuno mo\u017eemo konfigurirati klaster prema na\u0161im potrebama. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4949ecd8119cb4ec0f4bad9bf27fa74e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Malo \u0107emo se dublje uputiti. Do sada smo govorili o tome kako ClickHouse-operator funkcionira u vezi sa specifi\u010dnostima ClickHouse-a.<\/p>\n<p><\/p>\n<p>Sada bih \u017eelio re\u0107i nekoliko rije\u010di o tome kako funkcionira bilo koji operator, kao i o tome kako se on povezuje s K8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ca9c2a23c54b2a81ac0a8bba88d5e65.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Razmotrit \u0107emo interakciju s K8s na po\u010detku. \u0160to se doga\u0111a kada napravimo kubectl apply? Na\u0161i objekti se pojavljuju u etcd putem API-ja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b9eaedeb0f34d10398ba0187f09fef9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na primjer, osnovni objekti Kubernetes-a: pod, StatefulSet, servis i tako dalje. <\/p>\n<p><\/p>\n<p>Pri tome, fizi\u010dki se jo\u0161 ni\u0161ta ne doga\u0111a. Ove objekte trebamo materializirati u klasteru. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3c49dc1b0067347d5fc415ef9b87642d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za to dolazi kontroler. Kontroler je specijalna komponenta k8s koja zna materializirati ove opise. On zna kako i \u0161to treba u\u010diniti fizi\u010dki. Zna kako pokrenuti kontejnere i \u0161to treba konfigurirati da bi server radio. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d951eb0f7bacf519566b0ef6cf9bc100.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I on materializira na\u0161e objekte u K8s.<\/p>\n<p><\/p>\n<p>Ali \u017eelimo upravljati ne samo pod-ovima i StatefulSet-ima, \u017eelimo stvoriti ClickHouseInstallation, tj. objekt tipa ClickHouse, kako bismo njime upravljali kao jedinstvenom cjelinom. Za sada ta mogu\u0107nost ne postoji. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1594921ac5dd9384ce81ceae92f5cda9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ali K8s ima jo\u0161 jednu lijepu stvar. \u017delimo da imamo negdje takvu slo\u017eenu jedinstvenu tvorevinu, koja \u0107e biti sastavljena od pod-ova i StatefulSet-a na\u0161eg klastera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/04f86706f506fa91e365d45537dd9def.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to je potrebno u\u010diniti za to? Prvo, na scenu stupa Custom Resource Definition. \u0160to je to? To je opis za K8s koji definira da \u0107e imati jo\u0161 jedan tip podataka, da \u017eelimo dodati prilago\u0111eni resurs pod, StatefulSet-u, koji \u0107e biti slo\u017een iznutra. To je opis strukture podataka. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f02ae12ef3ab5db974234b14e38792ac.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tako\u0111er ga \u0161aljemo preko kubectl apply. Kubernetes ga s rado\u0161\u0107u prihva\u0107a. <\/p>\n<p><\/p>\n<p>I sada u na\u0161em skladi\u0161tu, kod objekta u etcd, nabavljamo mogu\u0107nost da zapi\u0161emo prilago\u0111eni resurs pod nazivom ClickHouseInstallation.<\/p>\n<p><\/p>\n<p>Ali za sada se ni\u0161ta dalje ne\u0107e dogoditi. Odnosno, ako sada stvorimo YAML datoteku koju smo razmatrali s opisom shardova, replika i ka\u017eemo 'kubectl apply', Kubernetes \u0107e je prihvatiti, pohraniti u etcd i re\u0107i: 'Odli\u010dno, ali ne znam \u0161to u\u010diniti s tim. Kako odr\u017eavati ClickHouseInstallation, nemam pojma.' <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7c2f9f3f81b83c987a3bd72a881d0d91.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prema tome, potrebna nam je osoba koja \u0107e pomo\u0107i Kubernetesu u odr\u017eavanju novog tipa podataka. S lijeve strane imamo ugra\u0111eni kontroler Kubernetesa koji radi s ugra\u0111enim tipovima podataka. A s desne strane trebao bi se pojaviti prilago\u0111eni kontroler koji mo\u017ee raditi s prilago\u0111enim tipovima podataka. <\/p>\n<p><\/p>\n<p>I druga\u010dije se naziva operator. Ovdje sam ga namjerno istaknuo izvan K8s, jer se mo\u017ee izvoditi i izvan K8s. Naj\u010de\u0161\u0107e, naravno, svi operatori se izvode unutar Kubernetesa, ali ni\u0161ta ne sprje\u010dava da stoji izvana, pa je ovdje posebno istaknut izvana. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7aa3a1b67d0def5ba752dff56baeebbf.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I ve\u0107 u svoju ruku prilago\u0111eni kontroler, odnosno operator, komunicira s Kubernetesom putem API-ja. On ve\u0107 zna kako komunicirati s API-jem. I on ve\u0107 zna kako iz prilago\u0111enog resursa materijalizirati slo\u017eeni obrazac koji \u017eelimo stvoriti. Time se bavi operator. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a5f773ddc3663f24d5379955da9c3037.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kako radi operator? Pogledajmo desnu stranu kako bismo saznali kako to radi. Saznat \u0107emo kako operator sve to materijalizira i kako dalje dolazi do interakcije s K8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/08a8d8dbcb35117a0eb3320589c6ff8d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Operator je program. On je orijentiran na doga\u0111aje. Operator se uz pomo\u0107 Kubernetes API-ja pretpla\u0107uje na doga\u0111aje. U Kubernetes API-ju postoje ulazne to\u010dke na koje se mo\u017ee pretplatiti na doga\u0111aje. I ako do\u0111e do promjene u K8s, Kubernetes \u0161alje doga\u0111aje svima koji su zainteresirani, tj. tko se pretplatio na tu to\u010dku API-ja, taj \u0107e primiti obavijesti.<\/p>\n<p><\/p>\n<p>Operator se pretpla\u0107uje na doga\u0111aje i treba u\u010diniti neku reakciju. Njegov zadatak je reagirati na nastale doga\u0111aje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f0664a4151e6e7f6f8575a3e54372e9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Doga\u0111aji se generiraju odre\u0111enim a\u017euriranjima. Na\u0161a YAML datoteka s opisom ClickHouseInstallation dolazi. Ona je putem kubectl apply oti\u0161la u etcd. Tamo se dogodio event, u kona\u010dnici je taj event do\u0161ao do ClickHouse-operatjera. Operator je primio ovaj opis. I on mora ne\u0161to u\u010diniti. Ako je stiglo a\u017euriranje objekta ClickHouseInstallation, treba a\u017eurirati klaster. I zadatak operatora je a\u017eurirati klaster. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0952bdd391a72aa15bf66af4ce69f4af.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to on radi? Prvo, potrebno je sastaviti plan akcije, \u0161to \u0107emo raditi s ovom nadogradnjom. Nadogradnje mogu biti vrlo male, tj. male u YAML izvedbi, ali mogu izazvati velike promjene u klasteru. Stoga, operator stvara plan i zatim ga slijedi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79caaa43b6fd9f3e2eb1afe44ecb2df9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>On po\u010dinje prema tom planu stvarati ovu strukturu unutar, kako bi materializirao podove, servise, tj. obavljao ono \u0161to mu je osnovni zadatak. To je kao izgradnja ClickHouse klastera u Kubernetesu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e91576a26d6b758a68ae0b35cbe01897.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sada se dotaknimo jedne zanimljive stvari. To je podjela odgovornosti izme\u0111u Kubernetesa i operatora, tj. \u0161to radi Kubernetes, \u0161to radi operator i kako me\u0111usobno djeluju. <\/p>\n<p><\/p>\n<p>Kubernetes je odgovoran za sistemske stvari, tj. za osnovni skup objekata koji se mo\u017ee interpretirati kao sustavske stvari. Kubernetes zna kako pokrenuti podove, kako ponovno pokrenuti kontejnere, kako montirati volumene, kako raditi s ConfigMap, tj. sve \u0161to se mo\u017ee nazvati sustavom. <\/p>\n<p><\/p>\n<p>Operatori djeluju u smislu predmetnih podru\u010dja. Svaki operator se razvija za svoje predmetno podru\u010dje. Mi smo razvili za ClickHouse.<\/p>\n<p><\/p>\n<p>Operator djeluje upravo u terminima predmetnog podru\u010dja, poput dodavanja replike, izrade sheme, postavljanja monitoringa. To rezultira tom podjelom.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9dc07d9c29d5dfd538343aadb751e4c0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pogledajmo prakti\u010dan primjer kako se ta podjela odgovornosti odvija kada izvr\u0161avamo radnju dodavanja replike. <\/p>\n<p><\/p>\n<p>Operator dobija zadatak \u2013 dodati repliku. \u0160to operator radi? Operator \u0107e izra\u010dunati da je potrebno stvoriti novi StatefulSet, u kojem treba opisati odre\u0111ene predlo\u0161ke, potra\u017eivanje volumena. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7a31f2f76a3bdda87e4bccf0e04fe4a8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sve to priprema i dalje proslje\u0111uje u K8s. Ka\u017ee da mu trebaju ConfigMap, StatefulSet, Volumen. Kubernetes to obra\u0111uje. Materijalizira osnovne jedinice s kojima upravlja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2be6892234cc12b056962265c13dba07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I dalje uvo\u0111enjem ponovo dolazi ClickHouse-operator. Ve\u0107 ima fizi\u010dki pod na kojem mo\u017ee raditi. I ClickHouse-operator ponovo radi u terminima predmetnog podru\u010dja. Tj. konkretno ClickHouse da uklju\u010di repliku u klaster, prvo je potrebno postaviti shemu podataka koja u tom klasteru postoji. A, drugo, tu repliku treba uklju\u010diti u monitoring, kako bi bila dobro pra\u0107ena. To ve\u0107 operator postavlja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/790616342b98b347fa67e0100754c8b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I samo nakon toga u posao ulazi sam ClickHouse, tj. jo\u0161 jedan vi\u0161i nivo entiteta. To je ve\u0107 baza podataka. Ima svoj instance, jo\u0161 jednu repliku konfiguriranu, koja je spremna da u\u0111e u klaster.<\/p>\n<p><\/p>\n<p>Dakle, lanac izvr\u0161avanja i razdvajanja odgovornosti prilikom dodavanja replike je dovoljno dug.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ec79cfa2b45fadbe25f4d9fe8d2ec5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nastavljamo na\u0161e prakti\u010dne zadatke. Ako klaster ve\u0107 postoji, mo\u017ee se izvr\u0161iti migracija konfiguracije. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a52aee0d4350b8da00cdb4b525df80ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>U\u010dinili smo tako da se u postoje\u0107i xml, koji ClickHouse razume, mo\u017ee pro\u0107i kroz.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/91abb1d3b0a14f2118361403a74e14c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mo\u017ee se izvr\u0161iti fino pode\u0161avanje ClickHousea. Ba\u0161 zoned deployment - to je ono o \u010demu sam pri\u010dao prilikom obja\u0161njavanja hostPath, lokalne pohrane. Ovo je kako pravilno uraditi zoned deployment.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/fde502f30223e04a918f4fd598c3dd9f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sljede\u0107i prakti\u010dni zadatak \u2013 monitoring.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4e685fba7883075105c0164a778c51e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ako se na\u0161 klaster menja, povremeno je potrebno pode\u0161avati monitoring. <\/p>\n<p><\/p>\n<p>Pogledajmo shemu. Zelene strelice ovde smo ve\u0107 razmotrili. Sada da razmotrimo crvene strelice. To je na\u010din na koji \u017eelimo da pratimo na\u0161 klaster. Kako metrike iz klastera ClickHouse ulaze u Prometheus, a zatim u Grafana.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1210c1423f99d48a20e06e855bf48a72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A koja je slo\u017eenost s monitoringom? Za\u0161to se to isti\u010de kao neki postignu\u0107e? Slo\u017eenost le\u017ei u dinamici. Kada imamo jedan klaster i on je stati\u010dan, mo\u017ee se jednom podesiti monitoring i onda vi\u0161e ne brinuti.<\/p>\n<p><\/p>\n<p>Ali ako imamo mnogo klastera ili se stalno ne\u0161to menja, proces je dinami\u010dan. Stalno se baviti ponovnim pode\u0161avanjem monitoringa je tro\u0161enje resursa i vremena, tj. \u010dak i jednostavna lenjost. To treba automatizovati. Slo\u017eenost le\u017ei upravo u dinamici procesa. I operater to veoma dobro automatizuje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48a7264f1228671e0c483c8211a71eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kako se na\u0161 klaster razvijao? Na po\u010detku je bio ovakav.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8a8c7b6cd5562deb315368e1e8e1c976.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zatim je bio ovakav.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1a3e915fbadf3aa5f3b33d337f36e76e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na kraju je postao ovakav. <\/p>\n<p><\/p>\n<p>A monitoring se automatski obavlja od strane operatera. Jedina ta\u010dka pristupa. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e079e65bf8deff43a81d8ffde938a709.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I mi samo na izlazu gledamo u Grafana dashboard, kako unutra \u017eivi \u017eivot na\u0161eg klastera. <\/p>\n<p><\/p>\n<p>Usput, Grafana dashboard se tako\u0111e distribuira s na\u0161im operaterom direktno u izvorima. Mo\u017ee se povezati i koristiti. Ovu sliku su mi dali na\u0161i DevOps.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ad1c2899dd845d0ba4185bdf758468c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuda bismo \u017eeleli i\u0107i dalje? To je:<\/p>\n<p><\/p>\n<ul>\n<li>Razvijati automatizaciju testiranja. Glavni zadatak je automatizovano testiranje novih verzija. <\/li>\n<li>Tako\u0111er \u017eelimo automatizirati integraciju s ZooKeeper-om. Planiramo se integrirati s ZooKeeper-operatorom. To jest, za ZooKeeper napisan je operator i logi\u010dno je da se dva operatora integriraju za izgradnju prakti\u010dnijeg rje\u0161enja. <\/li>\n<li>\u017delimo napraviti slo\u017eenije provjere odr\u017eivosti. <\/li>\n<li>Zelenom sam ozna\u010dio ono \u0161to nam dolazi \u2013 naslje\u0111ivanje predlo\u017eaka \u2013 GOTOVO, to jest, s sljede\u0107im izdanjem operatora ve\u0107 \u0107emo imati naslje\u0111ivanje predlo\u017eaka. To je mo\u0107an alat koji omogu\u0107uje gradnju slo\u017eenih konfiguracija od dijelova. <\/li>\n<li>\u017delimo automatizaciju slo\u017eenih zadataka. Glavni od njih je Re-sharding. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f232c0aab389be5069e5c7886e265c01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hajde da napravimo me\u0111ufinalne rezultate. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/62f7814994af0441ba5a82de4e9780d7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0160to dobijamo na izlazu? I vrijedi li se time baviti ili ne? Treba li uop\u0107e poku\u0161ati uvu\u0107i bazu podataka u Kubernetes i primijeniti operator u cjelini, a posebno Alitnity-operator?<\/p>\n<p><\/p>\n<p>Na izlazu dobijamo:<\/p>\n<p><\/p>\n<ul>\n<li>Zna\u010dajno pojednostavljenje i automatizaciju konfiguriranja, implementacije, ali i odr\u017eavanja. <\/li>\n<li>Odmah ugra\u0111eno pra\u0107enje. <\/li>\n<li>I gotovi za kori\u0161tenje kodificirani predlo\u0161ci za slo\u017eene situacije. Ve\u0107 akcija poput dodavanja replikacije ne treba raditi ru\u010dno. To radi operator. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/aebccd7a2dc55f14645f79f89f7b7458.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ostalo je samo posljednje pitanje. Ve\u0107 imamo bazu podataka u Kubernetesu, virtualizaciju. \u0160to je s performansama tog rje\u0161enja, posebno s obzirom na to da je ClickHouse optimiziran za performanse?<\/p>\n<p><\/p>\n<p>Odgovor \u2013 sve je u redu! Ne\u0107u detaljno opisivati, to je tema zasebnog izlaganja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ffc230941f0ae24926186db4d8d68ade.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ali postoji projekt pod nazivom TSBS. Koji je njegov glavni zadatak? To je testiranje baza podataka na performanse. To je poku\u0161aj usporedbe toplog s toplim, mekog s mekim. <\/p>\n<p><\/p>\n<p>Kako to radi? Generira se jedan set podataka. Zatim se taj set podataka na istom skupu testova prolazi kroz razli\u010dite baze podataka. I svaka baza podataka rje\u0161ava jedan zadatak onako kako ga zna. A potom se mogu uspore\u0111ivati rezultati. <\/p>\n<p><\/p>\n<p>Ve\u0107 podr\u017eava veliki broj baza podataka. Istaknuo sam tri glavne. To su:<\/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 u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5b4733534a4e6e36fb7788127adc6e86.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tako\u0111er je provedena usporedba s jo\u0161 jednim sli\u010dnim rje\u0161enjem. Usporedba s RedShift-om. Usporedba je provedena na Amazonu. ClickHouse tako\u0111er dobro nadma\u0161uje sve u ovom pogledu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/44cc8dedc07a02fe1ed5aad3e17a579c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Koje se zaklju\u010dke mogu izvu\u0107i iz onoga \u0161to sam ispri\u010dao?<\/p>\n<p><\/p>\n<ul>\n<li>DB u Kubernetes je mogu\u0107. Vjerojatno je mogu\u0107e sve, ali u cjelini izgleda da je to mogu\u0107e. ClickHouse u Kubernetesu definitivno mo\u017ee putem na\u0161eg operatora. <\/li>\n<li>Operator poma\u017ee automatizirati procese i stvarno olak\u0161ava \u017eivot.<\/li>\n<li>Performanse su zadovoljavaju\u0107e.<\/li>\n<li>I, \u010dini nam se da se to mo\u017ee i treba koristiti. <\/li>\n<\/ul>\n<p><\/p>\n<p>Open source \u2013 pridru\u017eite se!<\/p>\n<p><\/p>\n<p>Kao \u0161to sam ve\u0107 spomenuo, operator je potpuno open source proizvod, stoga bi bilo jako dobro da \u0161to vi\u0161e ljudi to koristi. Pridru\u017eite se! \u010cekamo vas sve!<\/p>\n<p><\/p>\n<p>Hvala svima!<\/p>\n<p><\/p>\n<p>Pitanja<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operator u Kubernetesu za upravljanje bazama podataka. 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>Hvala na prezentaciji! Ja sam Anton. Dolazim iz tvrtke SEMrush. Zanima me \u0161to s logiranjem. O monitoringu se \u010duje, ali o logiranju ni\u0161ta, ako govorimo o klasteru u cjelini. Kod nas je, na primjer, podignut klaster na hardveru. I koristimo centralizirano logiranje, standardnim metodama prikupljamo u zajedni\u010dku bazu. A zatim odatle izvla\u010dimo zanimljive podatke.<\/em> <\/p>\n<p><\/p>\n<p>Dobar \u0432\u043e\u043f\u0440\u043e\u0441, tj. logiranje je na listi zadataka. Na\u0161 operator za sada to ne automatizira. Jo\u0161 se razvija, projekt je jo\u0161 dovoljno mlad. Razumijemo potrebu za logiranjem. To je tako\u0111er vrlo va\u017eno pitanje. I vjerovatno nije manje va\u017eno od monitoringa. No, prvi na listi za implementaciju bio je monitoring. Logiranje \u0107e biti. Naravno, nastojimo automatizirati sve aspekte rada klastera. Stoga odgovor - u trenutnom trenutku operator, na\u017ealost, to ne zna, ali to je u planovima i napravit \u0107emo to. Ako postoji \u017eelja pridru\u017eiti se, slobodno napravite pull request.<\/p>\n<p><\/p>\n<p><em>Dobar dan! Hvala na prezentaciji! Imam standardno pitanje vezano za Persistent Volumes. Kada kreiramo konfiguraciju ovim operatorom, kako operator definira na kojoj nodi imamo montirani neki disk ili folder? Moramo mu unaprijed objasniti da, molim vas, postavite na\u0161 ClickHouse upravo na tim nodama na kojima postoji disk?<\/em><\/p>\n<p><\/p>\n<p>Koliko razumijem, ovo pitanje je nastavak local storage, osobito dijela o hostPath. To je kao objasniti cijelom sustavu da treba da pod bude pokrenut na odre\u0111enoj nodi na kojoj imamo fizi\u010dki priklju\u010den disk koji je montiran na odre\u0111enu putanju. To je cijela sekcija koju sam dodirnuo vrlo povr\u0161no, jer je odgovor prili\u010dno op\u0161iran. <\/p>\n<p><\/p>\n<p>Ukratko, to izgleda ovako. Naravno, moramo obaviti provisioning ovih volumena. Trenutno u lokalnom skladi\u0161tu nema dinami\u010dkog provisioninga, pa DevOps timovi moraju sami podijeliti diskove, te volumene. Tako\u0111er, moraju objasniti Kubernetes provisioningu da \u0107e imati Persistent volumene odre\u0111enog razreda, koji se nalaze na odre\u0111enim \u010dvorovima. Zatim treba objasniti Kubernetesu da se podovi koji zahtijevaju takav razred lokalnog skladi\u0161ta trebaju raspore\u0111ivati samo na takve \u010dvorove prema etiketama. Za te namjene u operatoru postoji mogu\u0107nost dodjeljivanja neke etikete i one per host instance. Tako \u0107e podovi biti usmjereni od strane Kubernetesa za pokretanje samo na \u010dvorovima koji zadovoljavaju te zahtjeve, jednostavnim jezikom govore\u0107i. Administratori dodjeljuju etikete, ru\u010dno rade provisioning diskova. I tada se to mo\u017ee skalirati.<\/p>\n<p><\/p>\n<p>Tre\u0107a opcija lokalnog skladi\u0161ta poma\u017ee da se to malo olak\u0161a. Kao \u0161to sam ve\u0107 naglasio, to je mukotrpan zadatak postavljanja, koji na kraju poma\u017ee da se ostvari maksimalna izvedba.<\/p>\n<p><\/p>\n<p><em>Imam drugo pitanje vezano uz ovo. Kubernetes je zami\u0161ljen tako da nije va\u017eno ho\u0107emo li izgubiti \u010dvor ili ne. \u0160to trebamo u\u010diniti u tom slu\u010daju, ako izgubimo \u010dvor na kojem se nalazi shard?<\/em><\/p>\n<p><\/p>\n<p>Da, Kubernetes je izvorno pozicioniran tako da je na\u0161 odnos prema na\u0161im podovima poput stoke, a svaki disk ovdje postaje ne\u0161to poput ku\u0107nog ljubimca. Postoji problem u tome \u0161to ih ne mo\u017eemo jednostavno odbaciti. Razvoj Kubernetesa ide u smjeru da se prema tome ne mo\u017ee potpuno filozofski odnositi kao prema resursima koji se potpuno odbacuju.<\/p>\n<p><\/p>\n<p>Sada prakti\u010dno pitanje. \u0160to u\u010diniti ako izgubi\u0161 \u010dvor na kojem se nalazio disk? Tada se problem rje\u0161ava na vi\u0161oj razini. U slu\u010daju ClickHousea imamo replike koje rade na vi\u0161oj razini, odnosno na razini ClickHousea.<\/p>\n<p><\/p>\n<p>Koja je situacija? Za sprje\u010davanje gubitka podataka odgovoran je DevOps. Mora pravilno postaviti replikaciju i paziti da se replikacija provodi. Na razini ClickHousea podaci u replici trebaju biti duplicirani. To nije zadatak koji rje\u0161ava operator. I nije to zadatak koji rje\u0161ava sam Kubernetes. To je na razini ClickHousea.<\/p>\n<p><\/p>\n<p>\u0160to u\u010diniti ako vam je oti\u0161ao hardverski \u010dvor? Morat \u0107ete postaviti drugi \u010dvor, ispravno provizoriti disk i dodati oznake. Nakon toga, mo\u0107i \u0107e zadovoljiti zahtjeve da Kubernetes mo\u017ee pokrenuti instancu pod-a na njemu. Kubernetes \u0107e to pokrenuti. Broj pod-ova vam ne odgovara o\u010dekivanom. Pro\u0107i \u0107e kroz ciklus koji sam pokazao. Na najvi\u0161oj razini ClickHouse \u0107e razumjeti da nam je do\u0161la replika, koja je jo\u0161 prazna i na nju treba po\u010deti prebacivati podatke. Taj proces jo\u0161 nije potpuno automatiziran. <\/p>\n<p><\/p>\n<p><em>Hvala na izlaganju! Kada se doga\u0111aju razne nevolje, operator se sru\u0161i i ponovno pokrene, a u tom trenutku dolaze doga\u0111aji, kako to obra\u0111ujete?<\/em><\/p>\n<p><\/p>\n<p>\u0160to \u0107e se dogoditi ako se operator sru\u0161i i ponovno pokrene? <\/p>\n<p><\/p>\n<p><em>Da. I u tom trenutku zaprimljeni su doga\u0111aji.<\/em> <\/p>\n<p><\/p>\n<p>Zadatak \u0161to u\u010diniti u tom slu\u010daju dijelom se dijeli izme\u0111u operatera i Kubernetesa. Kubernetes ima mogu\u0107nost ponovnog reprodukcije doga\u0111aja koji su se dogodili. On to ponovo reproducira. A zadatak operatera je osigurati da kada se izvr\u0161i ponovna reprodukcija dnevnika doga\u0111aja, ti doga\u0111aji budu idempotentni. Da ponovno dolazak istog doga\u0111aja ne uni\u0161ti na\u0161 sustav. I na\u0161 operator se nosi s tim zadatkom. <\/p>\n<p><\/p>\n<p><em>Pozdrav! Hvala na izlaganju! Dmitrij Zavaljov, tvrtka<\/em> <em>Smedova. Planira li se dodati mogu\u0107nost postavljanja s haproxy u operator? Interesira me neki drugi balansator osim standardnog, koji bi bio pametan i razumio da je stvarno ClickHouse.<\/em> <\/p>\n<p><\/p>\n<p>Govori\u0161 o Ingressu?<\/p>\n<p><\/p>\n<p><em>Da, zamijeniti Ingress s haproxy. U haproxy mo\u017eete nazna\u010diti topologiju klastera u kojem su njegovi replikati.<\/em><\/p>\n<p><\/p>\n<p>Za sada o tome nismo razmi\u0161ljali. Ako vam je to potrebno i mo\u017eete objasniti za\u0161to je to potrebno, moglo bi se implementirati, posebno ako \u017eelite sudjelovati. Rado \u0107emo razmotriti tu mogu\u0107nost. Kratak odgovor \u2013 ne, trenutno nemamo tu funkcionalnost. Hvala na prijedlogu, pogledat \u0107emo to. A ako nam dodatno objasnite use case i za\u0161to je to potrebno u praksi, na primjer, ako kreirate issue na GitHubu, bilo bi odli\u010dno.<\/p>\n<p><\/p>\n<p><em>Ve\u0107 postoji.<\/em><\/p>\n<p><\/p>\n<p>Dobro. Otvoreni smo za sve prijedloge. I haproxy se stavlja na listu obaveza. Lista obaveza raste, a ne smanjuje se, barem za sada. To je dobro, zna\u010di da je proizvod tra\u017een.<\/p>\n<p>Izvor: <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.4 - 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\/hr\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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 u Kubernetesu za upravljanje Baza Podataka klasterima. Vladislav Klimenko (Altinity, 2019) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hr\/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":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/96965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=96965"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/96965\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/96966"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=96965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=96965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=96965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}