{"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\/cs\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","title":{"rendered":"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/56e002c7408c4708e39ece867f84171e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prezentace se zam\u011b\u0159uje na praktick\u00e9 ot\u00e1zky v\u00fdvoje oper\u00e1tora v Kubernetes, n\u00e1vrhu jeho architektury a hlavn\u00ed principy jeho fungov\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p>V prvn\u00ed \u010d\u00e1sti prezentace si probereme:<\/p>\n<p><\/p>\n<ul>\n<li>co je oper\u00e1tor v Kubernetes a k \u010demu slou\u017e\u00ed;<\/li>\n<li>jak p\u0159esn\u011b oper\u00e1tor zjednodu\u0161uje spr\u00e1vu slo\u017eit\u00fdch syst\u00e9m\u016f;<\/li>\n<li>co oper\u00e1tor m\u016f\u017ee a co nem\u016f\u017ee.<\/li>\n<\/ul>\n<p><\/p>\n<p>D\u00e1le p\u0159ejdeme k diskusi o vnit\u0159n\u00ed struktu\u0159e oper\u00e1tora. Prostudujeme architekturu a fungov\u00e1n\u00ed oper\u00e1tora krok za krokem. Podrobn\u011b se zam\u011b\u0159\u00edme na:<\/p>\n<p><\/p>\n<ul>\n<li>interakci mezi oper\u00e1torem a Kubernetes;<\/li>\n<li>jak\u00e9 funkce oper\u00e1tor p\u0159eb\u00edr\u00e1 a co deleguje na Kubernetes.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pod\u00edv\u00e1me se na spr\u00e1vu shard\u016f a replik datab\u00e1z\u00ed v Kubernetes.<br \/>\nDal\u0161\u00ed bod, kter\u00fd prodiskutujeme, se t\u00fdk\u00e1 ukl\u00e1d\u00e1n\u00ed dat:<\/p>\n<p><\/p>\n<ul>\n<li>jak pracovat s Persistent Storage z pohledu oper\u00e1tora;<\/li>\n<li>\u00faskal\u00ed pou\u017e\u00edv\u00e1n\u00ed Local Storage.<\/li>\n<\/ul>\n<p><\/p>\n<p>V z\u00e1v\u011bre\u010dn\u00e9 \u010d\u00e1sti prezentace se zam\u011b\u0159\u00edme na praktick\u00e9 p\u0159\u00edklady aplikace <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">clickhouse-operator<\/a><\/noindex> s Amazon nebo Google Cloud Service. Prezentace je postavena na p\u0159\u00edkladu v\u00fdvoje a zku\u0161enost\u00ed s provozem oper\u00e1tora pro 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=\"P\u0159ehr\u00e1t 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>Jmenuji se Vladislav Klimenko. Dnes bych cht\u011bl hovo\u0159it o na\u0161\u00ed zku\u0161enosti s v\u00fdvojem a provozem oper\u00e1tora, p\u0159i\u010dem\u017e se jedn\u00e1 o specializovan\u00e9ho oper\u00e1tora pro spr\u00e1vu cluster\u016f datab\u00e1z\u00ed. Na p\u0159\u00edkladu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">ClickHouse-operator<\/a><\/noindex> pro spr\u00e1vu clusteru ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cc297a3edb3b2a5e30d0dc2725de4011.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pro\u010d m\u00e1me mo\u017enost hovo\u0159it o oper\u00e1torovi a ClickHouse?<\/p>\n<p><\/p>\n<ul>\n<li>Zab\u00fdv\u00e1me se podporou a v\u00fdvojem ClickHouse. <\/li>\n<li>V sou\u010dasn\u00e9 dob\u011b se sna\u017e\u00edme postupn\u011b p\u0159isp\u00edvat na\u0161\u00ed m\u011brou k v\u00fdvoji ClickHouse. A jsme druz\u00ed hned za Yandexem, pokud jde o objem proveden\u00fdch zm\u011bn v ClickHouse. <\/li>\n<li>Sna\u017e\u00edme se realizovat dal\u0161\u00ed projekty pro ekosyst\u00e9m ClickHouse. <\/li>\n<\/ul>\n<p><\/p>\n<p>O jednom z takov\u00fdch projekt\u016f bych cht\u011bl hovo\u0159it. A to o ClickHouse-operator pro Kubernetes. <\/p>\n<p><\/p>\n<p>Ve sv\u00e9m p\u0159\u00edsp\u011bvku bych cht\u011bl touchnout dv\u011b t\u00e9mata: <\/p>\n<p><\/p>\n<ul>\n<li>Prvn\u00ed t\u00e9ma \u2013 jak funguje n\u00e1\u0161 oper\u00e1tor pro spr\u00e1vu datab\u00e1z\u00ed ClickHouse v Kubernetes. <\/li>\n<li>Druh\u00e9 t\u00e9ma \u2013 jak funguje jak\u00fdkoli oper\u00e1tor, tj. jak interaguje s Kubernetes. <\/li>\n<\/ul>\n<p><\/p>\n<p>Tyto dv\u011b ot\u00e1zky se p\u0159itom budou prol\u00ednat po celou dobu m\u00e9 prezentace. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4cc9790e18e70ae1ccde2cf39ef4ef00.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Koho by mohlo zaj\u00edmat, co se sna\u017e\u00edm \u0159\u00edct?<\/p>\n<p><\/p>\n<ul>\n<li>Nejv\u00edce zaj\u00edmav\u00e9 to bude pro ty, kdo provozuj\u00ed oper\u00e1tory. <\/li>\n<li>Nebo pro ty, kte\u0159\u00ed cht\u011bj\u00ed vytvo\u0159it sv\u016fj vlastn\u00ed, aby pochopili, jak to funguje uvnit\u0159, jak oper\u00e1tor interaguje s Kubernetes a jak\u00e1 \u00faskal\u00ed se mohou objevit. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/07545f7a0171b610697c519d4aa9cd43.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Abyste l\u00e9pe porozum\u011bli tomu, co dnes budeme diskutovat, bylo by dobr\u00e9 m\u00edt znalosti o tom, jak funguje Kubernetes, a m\u00edt z\u00e1kladn\u00ed znalosti o cloudov\u00fdch technologi\u00edch. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/eff56cc3e83fde3d3e64d73d41b07417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co je ClickHouse? Je to sloupcov\u00e1 datab\u00e1ze zam\u011b\u0159en\u00e1 na online zpracov\u00e1n\u00ed analytick\u00fdch dotaz\u016f. A je zcela open source. <\/p>\n<p><\/p>\n<p>A je pro n\u00e1s d\u016fle\u017eit\u00e9 v\u011bd\u011bt pouze dv\u011b v\u011bci. Mus\u00edme v\u011bd\u011bt, \u017ee je to datab\u00e1ze, tak\u017ee to, co budu vypr\u00e1v\u011bt, bude aplikovateln\u00e9 prakticky na jakoukoli datab\u00e1zi. A \u017ee datab\u00e1zov\u00fd syst\u00e9m ClickHouse je velmi dob\u0159e \u0161k\u00e1lovateln\u00fd, prakticky poskytuje line\u00e1rn\u00ed \u0161k\u00e1lovatelnost. A proto je stav clustera pro ClickHouse p\u0159irozen\u00fd. A n\u00e1s nejv\u00edce zaj\u00edm\u00e1 diskutovat o tom, jak spravovat cluster ClickHouse v Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5eb1ff5026c492117bf2467b10de7053.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pro\u010d je tam pot\u0159eba? Pro\u010d nem\u016f\u017eeme pokra\u010dovat v jeho provozov\u00e1n\u00ed samostatn\u011b? Odpov\u011bdi jsou \u010d\u00e1ste\u010dn\u011b technick\u00e9 a \u010d\u00e1ste\u010dn\u011b organiza\u010dn\u00ed. <\/p>\n<p><\/p>\n<ul>\n<li>V praxi se st\u00e1le \u010dast\u011bji setk\u00e1v\u00e1me se situac\u00ed, kdy ve velk\u00fdch spole\u010dnostech u\u017e prakticky v\u0161echny komponenty funguj\u00ed v Kubernetes. Datab\u00e1ze z\u016fst\u00e1vaj\u00ed mimo. <\/li>\n<li>A st\u00e1le \u010dast\u011bji vyvst\u00e1v\u00e1 ot\u00e1zka: \u201eM\u016f\u017eeme to um\u00edstit dovnit\u0159?\u201c A proto se velk\u00e9 firmy sna\u017e\u00ed o maxim\u00e1ln\u00ed unifikaci spr\u00e1vy, aby m\u011bly schopnost rychle spravovat sv\u00e1 datov\u00e1 \u00falo\u017ei\u0161t\u011b. <\/li>\n<li>A zejm\u00e9na to pom\u00e1h\u00e1, pokud je pot\u0159eba maxim\u00e1ln\u00ed mo\u017enost zopakovat to sam\u00e9 na nov\u00e9m m\u00edst\u011b, tj. maxim\u00e1ln\u00ed p\u0159enositelnost.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/99312e74bd7ed4031128c7ec872f6a68.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak jednoduch\u00e9 nebo slo\u017eit\u00e9 to je? To samoz\u0159ejm\u011b lze d\u011blat ru\u010dn\u011b. Ale nen\u00ed to tak jednoduch\u00e9, proto\u017ee m\u00e1me slo\u017eitost spr\u00e1vy samotn\u00e9ho Kubernetes, ale z\u00e1rove\u0148 se k tomu p\u0159id\u00e1v\u00e1 specifika ClickHouse. A vznik\u00e1 takov\u00e1 agregace. <\/p>\n<p><\/p>\n<p>A to v\u0161echno dohromady poskytuje dost velk\u00fd soubor technologi\u00ed, jejich\u017e spr\u00e1va se st\u00e1v\u00e1 u\u017e dost slo\u017eitou, proto\u017ee Kubernetes p\u0159in\u00e1\u0161\u00ed sv\u00e9 ka\u017edodenn\u00ed provozn\u00ed ot\u00e1zky a ClickHouse p\u0159in\u00e1\u0161\u00ed sv\u00e9 ot\u00e1zky k ka\u017edodenn\u00edmu provozu. Zvl\u00e1\u0161\u0165 pokud m\u00e1me n\u011bkolik instanc\u00ed ClickHouse a mus\u00edme s nimi neust\u00e1le n\u011bco d\u011blat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ca10b805b2744d1a5283f96b0ac1cc11.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>U ClickHouse s dynamickou konfigurac\u00ed je dostate\u010dn\u011b velk\u00e9 mno\u017estv\u00ed ot\u00e1zek, kter\u00e9 vytv\u00e1\u0159ej\u00ed st\u00e1l\u00e9 zat\u00ed\u017een\u00ed na DevOps:<\/p>\n<p><\/p>\n<ul>\n<li>Kdy\u017e chceme n\u011bco zm\u011bnit v ClickHouse, nap\u0159\u00edklad p\u0159idat replikaci nebo shard, mus\u00edme prov\u00e9st spr\u00e1vu konfigurace. <\/li>\n<li>Pot\u00e9 je pot\u0159eba zm\u011bnit datovou sch\u00e9ma, proto\u017ee ClickHouse m\u00e1 specifick\u00fd zp\u016fsob shardingu. Je nutn\u00e9 rozlo\u017eit datovou sch\u00e9ma a konfigurace. <\/li>\n<li>Je t\u0159eba nastavit monitoring. <\/li>\n<li>Sb\u00edr\u00e1n\u00ed log\u016f pro nov\u00e9 shardy a nov\u00e9 repliky. <\/li>\n<li>Postarat se o obnovu.<\/li>\n<li>A o restartov\u00e1n\u00ed. <\/li>\n<\/ul>\n<p><\/p>\n<p>To jsou rutinn\u00ed \u00fakoly, kter\u00e9 bychom cht\u011bli zjednodu\u0161it v provozu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. 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 dob\u0159e pom\u00e1h\u00e1 p\u0159i provozu, ale v z\u00e1kladn\u00edch syst\u00e9mov\u00fdch v\u011bcech. <\/p>\n<p><\/p>\n<p>Kubernetes dob\u0159e usnad\u0148uje a prov\u00e1d\u00ed automatizaci takov\u00fdch v\u011bc\u00ed, jako je:<\/p>\n<p><\/p>\n<ul>\n<li>Obnova.<\/li>\n<li>Restartov\u00e1n\u00ed. <\/li>\n<li>Spr\u00e1va \u00falo\u017en\u00e9ho syst\u00e9mu.<\/li>\n<\/ul>\n<p><\/p>\n<p>To je dobr\u00e9, je to spr\u00e1vn\u00fd sm\u011br, ale zcela nem\u00e1 p\u0159edstavu o tom, jak provozovat datab\u00e1zov\u00fd cluster. <\/p>\n<p><\/p>\n<p>Chceme v\u00edce, chceme, aby na\u0161e cel\u00e1 datab\u00e1ze fungovala v Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6564e9f29d5d518925c8593bca978345.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Chceme n\u011bco jako velk\u00e9 kouzeln\u00e9 \u010derven\u00e9 tla\u010d\u00edtko, na kter\u00e9 stisknete a rozbal\u00ed se v\u00e1m a bude udr\u017eov\u00e1no po celou dobu \u017eivotn\u00edho cyklu cluster s ka\u017edodenn\u00edmi \u00fakoly, kter\u00e9 je t\u0159eba \u0159e\u0161it. KlikHouse cluster v Kubernetes.<\/p>\n<p><\/p>\n<p>A my jsme se sna\u017eili vytvo\u0159it takov\u00e9 \u0159e\u0161en\u00ed, kter\u00e9 by pomohlo usnadnit pr\u00e1ci. To je ClickHouse-operator pro Kubernetes od spole\u010dnosti Altinity.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ff80c6fc59069ec900d545096ad978d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oper\u00e1tor je program, jeho\u017e hlavn\u00edm \u00fakolem je \u0159\u00eddit jin\u00e9 programy, tedy funguje jako mana\u017eer. <\/p>\n<p><\/p>\n<p>A obsahuje vzory chov\u00e1n\u00ed. M\u016f\u017eeme to nazvat kodifikovan\u00fdmi znalostmi o oboru. <\/p>\n<p><\/p>\n<p>A jeho hlavn\u00edm \u00fakolem je usnadnit \u017eivot DevOps a sn\u00ed\u017eit mikromana\u017eersk\u00e9 \u00fakoly, aby DevOps myslel v term\u00ednech vysok\u00e9 \u00farovn\u011b, tedy aby se nezab\u00fdval mikromanagementem a nezapletl se do nastaven\u00ed v\u0161ech detail\u016f ru\u010dn\u011b. <\/p>\n<p><\/p>\n<p>A pr\u00e1v\u011b oper\u00e1tor je robotick\u00fd asistent, kter\u00fd se zab\u00fdv\u00e1 mikro\u00fakoly a pom\u00e1h\u00e1 DevOps.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0824a1fa710e8c4f45406aa7f596b977.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pro\u010d je oper\u00e1tor pot\u0159ebn\u00fd? Zachov\u00e1v\u00e1 se zvl\u00e1\u0161t\u011b dob\u0159e ve dvou ot\u00e1zk\u00e1ch:<\/p>\n<p><\/p>\n<ul>\n<li>Kdy\u017e odborn\u00edk, kter\u00fd se zab\u00fdv\u00e1 ClickHouse, nem\u00e1 dostatek zku\u0161enost\u00ed, ale provozovat ClickHouse u\u017e je nutn\u00e9, oper\u00e1tor usnad\u0148uje provoz a umo\u017e\u0148uje provozovat cluster ClickHouse s dostate\u010dn\u011b slo\u017eitou konfigurac\u00ed, p\u0159i\u010dem\u017e se p\u0159\u00edli\u0161 nezab\u00fdv\u00e1 detaily toho, jak to v\u0161echno funguje uvnit\u0159. Jednodu\u0161e mu d\u00e1te \u00fakoly na vysok\u00e9 \u00farovni a to funguje. <\/li>\n<li>A druh\u00fd \u00fakol, ve kter\u00e9m se nejl\u00e9pe projevuje, je, kdy\u017e je t\u0159eba automatizovat velk\u00e9 mno\u017estv\u00ed standardn\u00edch \u00fakol\u016f. Odeb\u00edr\u00e1 mikro\u00fakoly od syst\u00e9mov\u00fdch administr\u00e1tor\u016f. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. 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 nejv\u00edce pot\u0159eba bu\u010f t\u011bm, kte\u0159\u00ed teprve za\u010d\u00ednaj\u00ed svou cestu, nebo t\u011bm, kte\u0159\u00ed se mus\u00ed v\u011bnovat hodn\u011b automatizaci. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/128e7d9ff1ce0c535f98be66aedb1060.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak\u00fd je tedy rozd\u00edl mezi p\u0159\u00edstupem zalo\u017een\u00fdm na oper\u00e1torech a jin\u00fdmi syst\u00e9my? Existuje p\u0159ece Helm. Ten tak\u00e9 pom\u00e1h\u00e1 nasadit ClickHouse, lze vytvo\u0159it helm charts, kter\u00e9 dokonce nasad\u00ed cel\u00fd clustery ClickHouse. Jak\u00fd je tedy rozd\u00edl mezi oper\u00e1torem a nap\u0159\u00edklad Helm?<\/p>\n<p><\/p>\n<p>Hlavn\u00ed fundament\u00e1ln\u00ed rozd\u00edl je v tom, \u017ee Helm je spr\u00e1va bal\u00ed\u010dk\u016f, zat\u00edmco oper\u00e1tor jde d\u00e1le. To je podpora cel\u00e9ho \u017eivotn\u00edho cyklu. Nen\u00ed to pouze instalace, ale ka\u017edodenn\u00ed \u00fakoly, kter\u00e9 zahrnuj\u00ed \u0161k\u00e1lov\u00e1n\u00ed, shardov\u00e1n\u00ed, tedy v\u0161echno, co je t\u0159eba prov\u00e1d\u011bt v pr\u016fb\u011bhu \u017eivotn\u00edho cyklu (pokud je to nutn\u00e9, tak i maz\u00e1n\u00ed) \u2013 to v\u0161e \u0159e\u0161\u00ed oper\u00e1tor. Sna\u017e\u00ed se automatizovat a udr\u017eovat cel\u00fd \u017eivotn\u00ed cyklus softwaru. To je jeho fundament\u00e1ln\u00ed rozd\u00edl od dal\u0161\u00edch dostupn\u00fdch \u0159e\u0161en\u00ed. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. 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 byla \u00favodn\u00ed \u010d\u00e1st, poj\u010fme d\u00e1l. <\/p>\n<p><\/p>\n<p>Jak budujeme sv\u00e9ho oper\u00e1tora? Sna\u017e\u00edme se p\u0159istupovat k ot\u00e1zce, jak spravovat cluster ClickHouse jako jeden zdroj. <\/p>\n<p><\/p>\n<p>Na lev\u00e9 stran\u011b obrazu m\u00e1me vstupn\u00ed data. To je YAML se specifikac\u00ed clusteru, kter\u00fd je klasick\u00fdm zp\u016fsobem p\u0159ed\u00e1v\u00e1n do Kubernetes prost\u0159ednictv\u00edm kubectl. Tam n\u00e1\u0161 oper\u00e1tor to zachyt\u00ed, d\u011bl\u00e1 svou magii. A na v\u00fdstupu m\u00e1me takovou sch\u00e9ma. To je implementace ClickHouse v Kubernetes.<\/p>\n<p><\/p>\n<p>A d\u00e1le se budeme postupn\u011b d\u00edvat, jak oper\u00e1tor funguje, jak\u00e9 standardn\u00ed \u00fakoly lze \u0159e\u0161it. Probereme pouze standardn\u00ed \u00fakoly, proto\u017ee m\u00e1me omezen\u00fd \u010das. A nebude \u0159e\u010deno v\u0161echno, co oper\u00e1tor m\u016f\u017ee \u0159e\u0161it. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b40401931b58988058419d4495dbb1bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poj\u010fme vych\u00e1zet z praxe. N\u00e1\u0161 projekt je zcela open source, tak\u017ee m\u016f\u017eete na GitHubu vid\u011bt, jak funguje. A m\u016f\u017eete vych\u00e1zet z \u00favah, pokud chcete jednodu\u0161e spustit, m\u016f\u017eete za\u010d\u00edt s Quick Start Guide.<\/p>\n<p><\/p>\n<p>Pokud chcete podrobn\u011b rozum\u011bt, sna\u017e\u00edme se udr\u017eovat dokumentaci v celkem p\u0159ijateln\u00e9 podob\u011b. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9414d7c3aa94b6ad999e150f0ac25a97.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poj\u010fme za\u010d\u00edt praktick\u00fdm \u00fakolem. Prvn\u00ed \u00fakol, od kter\u00e9ho chceme za\u010d\u00edt, je spustit prvn\u00ed p\u0159\u00edklad jakkoli. Jak spustit ClickHouse pomoc\u00ed oper\u00e1tora, ani\u017e bychom p\u0159esn\u011b v\u011bd\u011bli, jak to funguje? P\u00ed\u0161eme manifest, proto\u017ee ve\u0161ker\u00e1 komunikace s k8s prob\u00edh\u00e1 prost\u0159ednictv\u00edm manifest\u016f.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3e97cd235827460693ed95fb3598d31d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tady je takov\u00fd slo\u017eit\u00fd manifest. To, co m\u00e1me ozna\u010deno \u010derven\u011b, je to, na co bychom se m\u011bli zam\u011b\u0159it. Po\u017e\u00e1dali jsme oper\u00e1tora, aby vytvo\u0159il cluster s n\u00e1zvem demo.<\/p>\n<p><\/p>\n<p>Zat\u00edm jsou to z\u00e1kladn\u00ed p\u0159\u00edklady. Storage je\u0161t\u011b nen\u00ed pops\u00e1no, ale k storage se vr\u00e1t\u00edme pozd\u011bji. Zat\u00edm budeme sledovat v\u00fdvoj clusteru v re\u00e1ln\u00e9m \u010dase.<\/p>\n<p><\/p>\n<p>Vytvo\u0159ili jsme tento manifest. Krm\u00edme ho na\u0161emu oper\u00e1torovi. On pracoval, ud\u011blal kouzlo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/502e64fbe6ed7d04b2aecb7d51abc7f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00edv\u00e1me se do konzole. Zaj\u00edmav\u00e9 jsou t\u0159i komponenty \u2013 to jsou Pod, dva Service a StatefulSet.<\/p>\n<p><\/p>\n<p>Oper\u00e1tor provedl svou pr\u00e1ci a m\u016f\u017eeme vid\u011bt, co p\u0159esn\u011b vytvo\u0159il. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/67faf120e21e5113680ccff9c71b00f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vytv\u00e1\u0159\u00ed p\u0159ibli\u017en\u011b takov\u00e9 sch\u00e9ma. M\u00e1me StatefulSet, Pod, ConfigMap pro ka\u017edou repliku, ConfigMap pro cel\u00fd cluster. Nezapom\u00ednejme na slu\u017eby jako vstupn\u00ed body do clusteru. <\/p>\n<p><\/p>\n<p>Slu\u017eby \u2013 to je centr\u00e1ln\u00ed Load Balancer Service a m\u016f\u017ee b\u00fdt tak\u00e9 pro ka\u017edou repliku, pro ka\u017ed\u00e9ho shardu. <\/p>\n<p><\/p>\n<p>Tak\u017ee n\u00e1\u0161 z\u00e1kladn\u00ed cluster vypad\u00e1 p\u0159ibli\u017en\u011b takto. Skl\u00e1d\u00e1 se z jedin\u00e9 uzlu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f235ada45ee58b517c0e041f795ae122.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pokra\u010dujme d\u00e1l, budeme to komplikovat. Je t\u0159eba shardovat cluster.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. 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\u0161e \u00fakoly rostou, za\u010d\u00edn\u00e1 dynamika. Chceme p\u0159idat shard. Sledujeme v\u00fdvoj. M\u011bn\u00edme na\u0161i specifikaci. Uv\u00e1d\u00edme, \u017ee chceme dva shardy. <\/p>\n<p><\/p>\n<p>To je ten sam\u00fd soubor, kter\u00fd se dynamicky vyv\u00edj\u00ed s r\u016fstem syst\u00e9mu. Storage nen\u00ed, storage bude probr\u00e1n pozd\u011bji, to je samostatn\u00e9 t\u00e9ma.<\/p>\n<p><\/p>\n<p>Krm\u00edme YAML oper\u00e1tora a sledujeme, co se stane. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8ddb5845cae160098470208f51b5da7c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oper\u00e1tor p\u0159em\u00fd\u0161lel a vytvo\u0159il n\u00e1sleduj\u00edc\u00ed entity. U\u017e m\u00e1me dva Pod, t\u0159i slu\u017eby a n\u00e1hle 2 StatefulSety. Pro\u010d 2 StatefulSety?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. 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 sch\u00e9matu to vypadalo takto \u2013 to je na\u0161e po\u010d\u00e1te\u010dn\u00ed stav, kdy jsme m\u011bli jeden pod.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/657838b0d378121fdd66ad3ff8168600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Stalo se to takto. Zat\u00edm je to jednoduch\u00e9, zdvojn\u00e1sobilo se to. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f039a7046f1c56fbdad6b5a26a519b10.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A pro\u010d se stal StatefulSet dva? Zde se mus\u00edme odklonit a prodiskutovat ot\u00e1zku, jak v Kubernetes prob\u00edh\u00e1 \u0159\u00edzen\u00ed Pod\u016f.<\/p>\n<p><\/p>\n<p>Existuje objekt s n\u00e1zvem StatefulSet, kter\u00fd umo\u017e\u0148uje vytvo\u0159it sadu Pod\u016f z \u0161ablony. Kl\u00ed\u010dov\u00fd faktor zde je \u0161ablona. A v jednom StatefulSetu lze spustit podle jedn\u00e9 \u0161ablony mnoho Pod\u016f. A kl\u00ed\u010dov\u00e1 fr\u00e1ze zde je \u201epodle jedn\u00e9 \u0161ablony mnoho Pod\u016f\u201c.<\/p>\n<p><\/p>\n<p>Bylo velk\u00e9 poku\u0161en\u00ed ud\u011blat cel\u00fd klastr, zabalen\u00fd do jednoho StatefulSet. Bude to fungovat, v tom nejsou \u017e\u00e1dn\u00e9 probl\u00e9my. Ale je tu jeden detail. Pokud chceme sestavit heterogenn\u00ed klastr, tedy z n\u011bkolika verz\u00ed ClickHouse, za\u010d\u00ednaj\u00ed se objevovat ot\u00e1zky. Ano, StatefulSet m\u016f\u017ee prov\u00e9st rolling update, ano, tam lze nasadit novou verzi, ale je t\u0159eba vysv\u011btlit, \u017ee je t\u0159eba zkusit maxim\u00e1ln\u011b tolikto uzl\u016f najednou.<\/p>\n<p><\/p>\n<p>Pokud ale extrapolujeme \u00fakol a \u0159ekneme, \u017ee chceme vytvo\u0159it pln\u011b heterogenn\u00ed klastr a nechceme p\u0159ech\u00e1zet ze star\u00e9 verze na novou pomoc\u00ed rolling update, ale chceme prost\u011b vytvo\u0159it heterogenn\u00ed klastr, jak co do r\u016fzn\u00fdch verz\u00ed ClickHouse, tak co do r\u016fzn\u00fdch \u00falo\u017ei\u0161\u0165. Nap\u0159\u00edklad chceme n\u011bkter\u00e9 repliky ud\u011blat na odd\u011blen\u00fdch disc\u00edch, na pomal\u00fdch, prost\u011b pln\u011b vybudovat heterogenn\u00ed klastr. A proto\u017ee StatefulSet vytv\u00e1\u0159\u00ed ze jednoho \u0161ablonov\u00e9ho standardizovan\u00e9 \u0159e\u0161en\u00ed, nen\u00ed mo\u017en\u00e9 to ud\u011blat. <\/p>\n<p><\/p>\n<p>Po ur\u010dit\u00e9m zamy\u0161len\u00ed bylo rozhodnuto, \u017ee to ud\u011bl\u00e1me takto. Ka\u017ed\u00e1 replika m\u00e1 sv\u016fj vlastn\u00ed StatefulSet. Toto \u0159e\u0161en\u00ed m\u00e1 ur\u010dit\u00e9 nev\u00fdhody, ale v praxi to v\u0161echno pln\u011b inkapsuluje oper\u00e1tor. A m\u00e1 to spoustu v\u00fdhod. M\u016f\u017eeme budovat klastr p\u0159esn\u011b takov\u00fd, jak\u00fd chceme, nap\u0159\u00edklad naprosto heterogenn\u00ed. Proto v klastru, kde m\u00e1me dva shardov\u00e9 uzly s jednou replikou, budou 2 StatefulSety a 2 Pody pr\u00e1v\u011b proto, \u017ee jsme zvolili tento p\u0159\u00edstup z v\u00fd\u0161e uveden\u00fdch d\u016fvod\u016f, abychom mohli postavit heterogenn\u00ed klastr. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b7ae92a545f9bb6cc5f0136df87207f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vra\u0165me se k praktick\u00fdm \u00fakol\u016fm. V na\u0161em klastru je nutn\u00e9 nastavit u\u017eivatele, tedy je t\u0159eba prov\u00e9st n\u011bjakou konfiguraci ClickHouse v Kubernetes. Oper\u00e1tor poskytuje v\u0161echny mo\u017enosti pro to. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6a65aa78293c0b40230cf24efc58e55a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u016f\u017eeme p\u0159\u00edmo v YAML napsat to, co chceme. V\u0161echny konfigura\u010dn\u00ed mo\u017enosti se p\u0159\u00edmo mapuj\u00ed z tohoto YAML do konfigura\u010dn\u00edch soubor\u016f ClickHouse, kter\u00e9 se pot\u00e9 rozlo\u017e\u00ed po cel\u00e9m klastru.<\/p>\n<p><\/p>\n<p>M\u016f\u017eeme to napsat i takto. Toto je jen p\u0159\u00edklad. Heslo lze ud\u011blat za\u0161ifrovan\u00e9. Podporuj\u00ed se naprosto v\u0161echny konfigura\u010dn\u00ed mo\u017enosti ClickHouse. Zde je pouze p\u0159\u00edklad. <\/p>\n<p><\/p>\n<p>Konfigurace v klastru se \u0161\u00ed\u0159\u00ed jako ConfigMap. V praxi se aktualizace ConfigMap neprov\u00e1d\u00ed okam\u017eit\u011b, tak\u017ee pokud je klastr velk\u00fd, proces nasazen\u00ed konfigurace trv\u00e1 n\u011bjak\u00fd \u010das. Ale v\u0161e je to velmi pohodln\u00e9 na pou\u017e\u00edv\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2e42d19d7a558e3b8d4bbb51fe5bd08b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zt\u011b\u017eujeme \u00fakol. Kluster se vyv\u00edj\u00ed. Chceme replikovat data. T. j. m\u00e1me ji\u017e dva shardov\u00e9, po jedn\u00e9 replikaci, nastaven\u00e9 u\u017eivatele. R\u016fsteme a chceme se zab\u00fdvat replikac\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4c97e5e6ca9cb66d3a94fb8cfe610186.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co pot\u0159ebujeme k replikaci? <\/p>\n<p><\/p>\n<p>Pot\u0159ebujeme ZooKeeper. V ClickHouse je replikace postavena s pou\u017eit\u00edm ZooKeeper. ZooKeeper je pot\u0159ebn\u00fd, aby r\u016fzn\u00e9 repliky ClickHouse m\u011bly konsensus ohledn\u011b toho, kter\u00e9 datov\u00e9 bloky existuj\u00ed na jak\u00e9m ClickHouse. <\/p>\n<p><\/p>\n<p>M\u016f\u017eeme pou\u017e\u00edt jak\u00fdkoli ZooKeeper. Pokud m\u00e1 podnik extern\u00ed ZooKeeper, m\u016f\u017ee ho pou\u017e\u00edt. Pokud ne, m\u016f\u017eeme nainstalovat z na\u0161eho repozit\u00e1\u0159e. Existuje instal\u00e1tor, kter\u00fd to cel\u00e9 usnad\u0148uje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6cc40951a19b982abf578836edf569d3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A sch\u00e9ma interakce cel\u00e9ho syst\u00e9mu vypad\u00e1 takto. M\u00e1me Kubernetes jako platformu. Na n\u011bm b\u011b\u017e\u00ed oper\u00e1tor ClickHouse. ZooKeeper jsem zn\u00e1zornil zde. A oper\u00e1tor interaguje jak s ClickHouse, tak se ZooKeeper. T. j. vznik\u00e1 interakce. <\/p>\n<p><\/p>\n<p>A to v\u0161e je pot\u0159eba, aby ClickHouse \u00fasp\u011b\u0161n\u011b replikoval data v k8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4fc37aee850acd20517fa3d7562f0165.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poj\u010fme se nyn\u00ed pod\u00edvat na samotn\u00fd \u00fakol, jak bude vypadat manifest pro replikaci.<\/p>\n<p><\/p>\n<p>K na\u0161emu manifestu p\u0159id\u00e1me dv\u011b sekce. Prvn\u00ed \u2013 odkud vz\u00edt ZooKeeper, kter\u00fd m\u016f\u017ee b\u00fdt bu\u010f uvnit\u0159 Kubernetes, nebo extern\u00ed. To je prost\u00fd popis. A objedn\u00e1v\u00e1me repliky. T. j. chceme dv\u011b repliky. Celkem by m\u011blo vyj\u00edt 4 pody. Ohledn\u011b storage si pamatujeme, ten se vr\u00e1t\u00ed trochu pozd\u011bji. Storage \u2013 to je jin\u00fd p\u0159\u00edb\u011bh. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/afb8c974d0587a4ad87d6ba36bbe5e3b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bylo to takto.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/909ffd258dbce718ddf529a1a753de6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>St\u00e1v\u00e1 se to takto. P\u0159id\u00e1vaj\u00ed se repliky. 4. se neve\u0161el, v\u011b\u0159\u00edme, \u017ee jich m\u016f\u017ee b\u00fdt mnoho. A bokem se p\u0159id\u00e1v\u00e1 ZooKeeper. Sch\u00e9mata se komplikuj\u00ed. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c33b37fc7fc72f51276e5e98b9ec2134.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A nastal \u010das p\u0159idat dal\u0161\u00ed \u00fakol. Budeme p\u0159id\u00e1vat Persistent Storage. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f28d14901a713eca413a52ec6ea21ac5.jpeg\" style=\"display:block;margin: 0 auto;\" \/>Pokud jde o Persistent Storage, m\u00e1me r\u016fzn\u00e9 varianty proveden\u00ed.<\/p>\n<p><\/p>\n<p>V p\u0159\u00edpad\u011b, \u017ee se realizujeme v cloudov\u00e9m poskytovateli, nap\u0159\u00edklad vyu\u017e\u00edv\u00e1n\u00edm Amazonu, Googlu, existuje velk\u00e9 poku\u0161en\u00ed vyu\u017e\u00edt cloudov\u00e9 storage. To je velmi pohodln\u00e9, je to dobr\u00e9. <\/p>\n<p><\/p>\n<p>A existuje druh\u00e1 varianta. To je pro lok\u00e1ln\u00ed storage, kdy m\u00e1me lok\u00e1ln\u00ed disky na ka\u017ed\u00e9m uzlu. Tato varianta je mnohem slo\u017eit\u011bj\u0161\u00ed na proveden\u00ed, ale z\u00e1rove\u0148 je v\u00fdkonn\u011bj\u0161\u00ed. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/483ee5c08b62e987620bf54fd32a44b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poj\u010fme se pod\u00edvat, co m\u00e1me ohledn\u011b cloud storage.<\/p>\n<p><\/p>\n<p>Existuj\u00ed v\u00fdhody. Je to velmi snadn\u00e9 konfigurovat. Prost\u011b si objedn\u00e1me od cloudov\u00e9ho poskytovatele, aby n\u00e1m dal, pros\u00edm, storage takov\u00e9 kapacity, takov\u00e9 t\u0159\u00eddy. T\u0159\u00eddy jsou pops\u00e1ny poskytovateli samostatn\u011b. <\/p>\n<p><\/p>\n<p>A existuje nev\u00fdhoda. Pro n\u011bkoho to m\u016f\u017ee b\u00fdt nev\u00fdznamn\u00e1 nev\u00fdhoda. Samoz\u0159ejm\u011b, \u017ee tam budou n\u011bjak\u00e9 v\u00fdkyvy v\u00fdkonu. Je to velmi pohodln\u00e9 pro pr\u00e1ci, spolehliv\u00e9, ale jsou zde ur\u010dit\u00e9 potenci\u00e1ln\u00ed poklesy v\u00fdkonu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8e82430b64477f91640078ff4eacb47e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A proto\u017ee se ClickHouse zam\u011b\u0159uje pr\u00e1v\u011b na v\u00fdkon, m\u016f\u017eeme dokonce \u0159\u00edci, \u017ee vytahuje maximum, co se d\u00e1, proto se mnoho klient\u016f sna\u017e\u00ed vyt\u011b\u017eit maximum v\u00fdkonu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. 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 abychom dos\u00e1hli maxima, pot\u0159ebujeme lok\u00e1ln\u00ed \u00falo\u017ei\u0161t\u011b.<\/p>\n<p><\/p>\n<p>Kubernetes poskytuje t\u0159i abstrakce pro pou\u017eit\u00ed lok\u00e1ln\u00edho \u00falo\u017ei\u0161t\u011b v Kubernetes. A to jsou: <\/p>\n<p><\/p>\n<ul>\n<li>EmptyDir<\/li>\n<li>HostPath.<\/li>\n<li>M\u00edstn\u00ed<\/li>\n<\/ul>\n<p><\/p>\n<p>Pod\u00edvejme se, \u010d\u00edm se li\u0161\u00ed a \u010d\u00edm jsou si podobn\u00e9. <\/p>\n<p><\/p>\n<p>Za prv\u00e9, ve v\u0161ech t\u0159ech p\u0159\u00edstupech m\u00e1me \u00falo\u017ei\u0161t\u011b \u2013 to jsou lok\u00e1ln\u00ed disky, kter\u00e9 se nach\u00e1zej\u00ed na stejn\u00e9 fyzick\u00e9 k8s nod\u011b. Ale maj\u00ed ur\u010dit\u00e9 rozd\u00edly.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79afb620a0c9a1552b47240b405fedc9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Za\u010dn\u011bme s t\u00edm nejjednodu\u0161\u0161\u00edm, t.j. s emptyDir. Co to vlastn\u011b v praxi je? Oslovujeme na\u0161i specifikaci o to, aby n\u00e1m syst\u00e9m kontejnerizace (nej\u010dast\u011bji je to Docker) poskytl p\u0159\u00edstup k adres\u00e1\u0159i na lok\u00e1ln\u00edm disku.<\/p>\n<p><\/p>\n<p>V praxi Docker n\u011bkde tam uvnit\u0159 po sv\u00fdch vlastn\u00edch cest\u00e1ch vytv\u00e1\u0159\u00ed do\u010dasnou slo\u017eku, nazve ji dlouh\u00fdm hashovac\u00edm k\u00f3dem a poskytne rozhran\u00ed pro p\u0159\u00edstup k n\u00ed. <\/p>\n<p><\/p>\n<p>Jak to bude fungovat z hlediska v\u00fdkonu? Bude to fungovat rychlost\u00ed lok\u00e1ln\u00edho disku, tedy to je \u00fapln\u00fd p\u0159\u00edstup k vlastn\u00edmu disku. <\/p>\n<p><\/p>\n<p>Ale tato metoda m\u00e1 svou nev\u00fdhodu. Trvalost v tomto ohledu je dost pochybn\u011b. P\u0159i prvn\u00edm pohybu Dockeru se kontejnery trvalost ztr\u00e1c\u00ed. Pokud by Kubernetes cht\u011bl z n\u011bjak\u00e9ho d\u016fvodu p\u0159esunout tento Pod na jin\u00fd disk, data by se ztratila. <\/p>\n<p><\/p>\n<p>Tento p\u0159\u00edstup je dobr\u00fd pro testy, proto\u017ee ukazuje ji\u017e norm\u00e1ln\u00ed rychlost, ale pro n\u011bco v\u00e1\u017en\u00e9ho tento variant nevyhovuje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0b60f80fc9ea0e2c1820021bcd9e1382.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Proto existuje druh\u00fd p\u0159\u00edstup. To je hostPath. Pokud se pod\u00edv\u00e1me na p\u0159edchoz\u00ed sn\u00edmek a tento, m\u016f\u017eeme vid\u011bt jen jedno jedin\u00e9 rozd\u00edln\u00e9 m\u00edsto. Na\u0161e slo\u017eka se p\u0159esunula z Dockeru p\u0159\u00edmo na Kubernetes nodu. Tady je to o n\u011bco jednodu\u0161\u0161\u00ed. P\u0159\u00edmo p\u00ed\u0161eme cestu v lok\u00e1ln\u00edm souborov\u00e9m syst\u00e9mu, kde bychom cht\u011bli ukl\u00e1dat sv\u00e9 data. <\/p>\n<p><\/p>\n<p>Tento zp\u016fsob m\u00e1 sv\u00e9 v\u00fdhody. To u\u017e je skute\u010dn\u00fd Persistent, a to klasick\u00fd. Na disku budou data ulo\u017eena na n\u011bjak\u00e9 adrese. <\/p>\n<p><\/p>\n<p>Existuj\u00ed i nev\u00fdhody. Je to slo\u017eitost spr\u00e1vy. N\u00e1\u0161 Kubernetes m\u016f\u017ee cht\u00edt p\u0159esunout Pod na jin\u00fd fyzick\u00fd uzel. A zde p\u0159ich\u00e1z\u00ed na \u0159adu DevOps. Mus\u00ed spr\u00e1vn\u011b vysv\u011btlit cel\u00e9mu syst\u00e9mu, \u017ee tyto pod\u2019 y mohou b\u00fdt p\u0159esunuty pouze na takov\u00e9 uzly, na kter\u00fdch m\u00e1\u0161 p\u0159ipojen\u00e9 n\u011bco p\u0159es tyto cesty, a ne v\u00edce ne\u017e na jeden uzel najednou. To je dost slo\u017eit\u00e9. <\/p>\n<p><\/p>\n<p>Speci\u00e1ln\u011b pro tyto pot\u0159eby jsme u n\u00e1s v oper\u00e1torovi vytvo\u0159ili \u0161ablony, abychom celou tuto slo\u017eitost skryli. A bylo by mo\u017en\u00e9 jednodu\u0161e \u0159\u00edct: \u201eChci m\u00edt jeden instance ClickHouse na ka\u017ed\u00fd fyzick\u00fd uzel a na takov\u00e9mto cest\u011b.\u201c <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f64c19bccc8b187d6af112eda896b25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ale tato pot\u0159eba nen\u00ed jen na\u0161e, proto p\u00e1nov\u00e9 z Kubernetese tak\u00e9 ch\u00e1pou, \u017ee lid\u00e9 cht\u011bj\u00ed m\u00edt p\u0159\u00edstup k fyzick\u00fdm disk\u016fm, a proto poskytuj\u00ed t\u0159et\u00ed \u00farove\u0148.<\/p>\n<p><\/p>\n<p>Ta se naz\u00fdv\u00e1 local. Rozd\u00edl od p\u0159edchoz\u00edho slidu v podstat\u011b \u017e\u00e1dn\u00fd. D\u0159\u00edve bylo t\u0159eba ru\u010dn\u011b prov\u00e1d\u011bt to, \u017ee tyto pod\u2019 y nelze p\u0159esunovat mezi uzly, proto\u017ee mus\u00ed b\u00fdt p\u0159ipojeny k lok\u00e1ln\u00edmu fyzick\u00e9mu disku p\u0159es takovou cestu, a nyn\u00ed jsou ve\u0161ker\u00e9 tyto znalosti enkapsulov\u00e1ny v samotn\u00e9m Kubernetes. A konfigurace se tak st\u00e1v\u00e1 mnohem jednodu\u0161\u0161\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/140c43be34dd7015c0bf4cfd0a0bb384.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vr\u00e1t\u00edme se k na\u0161\u00ed praktick\u00e9 \u00faloze. Vr\u00e1t\u00edme se k \u0161ablon\u011b YAML. Tady m\u00e1me skute\u010dn\u00e9 \u00falo\u017ei\u0161t\u011b. Vr\u00e1tili jsme se k tomu. Definujeme klasickou \u0161ablonu VolumeClaim, jak je v k8s. A popisujeme, jak\u00e9 \u00falo\u017ei\u0161t\u011b chceme.<\/p>\n<p><\/p>\n<p>Po tom k8s po\u017e\u00e1d\u00e1 o \u00falo\u017ei\u0161t\u011b. P\u0159id\u011bl\u00ed n\u00e1m ho ve StatefulSet. A nakonec to bude k dispozici ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/960e666486ed09cebd83235d43f83970.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u011bli jsme takovou sch\u00e9mu. N\u00e1\u0161 Trval\u00fd Storage byl \u010derven\u00fd, co\u017e jakoby nazna\u010dovalo, \u017ee by ho bylo t\u0159eba ud\u011blat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a989df489e3a9fef6a4fbf7b93c489a6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A nyn\u00ed se st\u00e1v\u00e1 zelen\u00fdm. Sch\u00e9ma clusteru ClickHouse na k8s je nyn\u00ed pln\u011b finalizov\u00e1no. M\u00e1me shardov\u00e1n\u00ed, repliky, ZooKeeper, m\u00e1me skute\u010dn\u00fd Persistent, kter\u00fd je realizov\u00e1n r\u016fzn\u00fdmi zp\u016fsoby. Sch\u00e9ma je ji\u017e pln\u011b funk\u010dn\u00ed. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c409ee5da6309a67904394d968ed4906.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pokra\u010dujeme d\u00e1l. N\u00e1\u0161 cluster se vyv\u00edj\u00ed. A Alexej se sna\u017e\u00ed a vyd\u00e1v\u00e1 novou verzi ClickHouse.<\/p>\n<p><\/p>\n<p>Objevuje se praktick\u00fd \u00fakol \u2013 otestovat novou verzi ClickHouse na na\u0161em clusteru. Samoz\u0159ejm\u011b, \u017ee se n\u00e1m nechce ji nasazovat \u00fapln\u011b, chceme n\u011bkde v odlehl\u00e9m rohu nasadit novou verzi do jedn\u00e9 repliky, nebo mo\u017en\u00e1 ne jednu novou verzi, ale hned dv\u011b, proto\u017ee vych\u00e1zej\u00ed \u010dasto. <\/p>\n<p><\/p>\n<p>Co k tomu m\u016f\u017eeme \u0159\u00edci?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48ed52d393d977d0cfaa9320bd02ed1e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tady m\u00e1me mo\u017enost vyu\u017e\u00edt \u0161ablony pod\u016f. Na\u0161e aplikace umo\u017e\u0148uje pln\u011b konfigurovat heterogenn\u00ed klastr. To znamen\u00e1, \u017ee m\u016f\u017eeme nastavit v\u0161e od r\u016fzn\u00fdch replik a\u017e po konkr\u00e9tn\u00ed repliku s verz\u00ed ClickHouse a verz\u00ed \u00falo\u017ei\u0161t\u011b, kterou chceme. M\u016f\u017eeme pln\u011b nakonfigurovat klastr podle na\u0161ich pot\u0159eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4949ecd8119cb4ec0f4bad9bf27fa74e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Te\u010f se postupn\u011b pono\u0159\u00edme hloub\u011bji. P\u0159edt\u00edm jsme diskutovali, jak ClickHouse-operator funguje v kontextu ClickHouse.<\/p>\n<p><\/p>\n<p>Dovolte mi nyn\u00ed \u0159\u00edct p\u00e1r slov o tom, jak funguje jak\u00fdkoli operator a jak interaguje s K8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ca9c2a23c54b2a81ac0a8bba88d5e65.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nejprve se pod\u00edv\u00e1me na interakci s K8s. Co se d\u011bje, kdy\u017e provedeme kubectl apply? Na\u0161e objekty se p\u0159es API objev\u00ed v etcd. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b9eaedeb0f34d10398ba0187f09fef9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nap\u0159\u00edklad z\u00e1kladn\u00ed objekty Kubernetes: pod, StatefulSet, slu\u017eba a tak d\u00e1le. <\/p>\n<p><\/p>\n<p>Zat\u00edm se nic fyzick\u00e9ho ned\u011bje. Tyto objekty je t\u0159eba materializovat v klastru. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3c49dc1b0067347d5fc415ef9b87642d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na to p\u0159ich\u00e1z\u00ed kontroler. Kontroler je speci\u00e1ln\u00ed komponenta K8s, kter\u00e1 um\u00ed materializovat tyto popisy. V\u00ed, jak a co je t\u0159eba ud\u011blat fyzicky. V\u00ed, jak spou\u0161t\u011bt kontejnery a co nastavit, aby server fungoval. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d951eb0f7bacf519566b0ef6cf9bc100.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A materializuje na\u0161e objekty v K8s.<\/p>\n<p><\/p>\n<p>Ale chceme operovat nejen s pody a StatefulSety, ale tak\u00e9 vytvo\u0159it ClickHouseInstallation, tedy objekt typu ClickHouse, abychom s n\u00edm mohli manipulovat jako s celkem. Zat\u00edm takov\u00e1 mo\u017enost nen\u00ed. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1594921ac5dd9384ce81ceae92f5cda9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ale K8s m\u00e1 dal\u0161\u00ed p\u0159\u00edjemnou vlastnost. Chceme, aby vznikla slo\u017eit\u00e1 entita, kter\u00e1 by byla slo\u017een\u00e1 z pod\u016f a StatefulSet\u016f na\u0161eho klastru. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/04f86706f506fa91e365d45537dd9def.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co tedy mus\u00edme ud\u011blat? Za prv\u00e9 p\u0159ich\u00e1z\u00ed na sc\u00e9nu Custom Resource Definition. Co to je? Je to popis pro K8s, \u017ee bude m\u00edt dal\u0161\u00ed typ dat, \u017ee k podu a StatefulSetu chceme p\u0159idat vlastn\u00ed zdroj, kter\u00fd bude slo\u017eit\u011bj\u0161\u00ed uvnit\u0159. Je to popis struktury dat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f02ae12ef3ab5db974234b14e38792ac.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tento popis tak\u00e9 pos\u00edl\u00e1me pomoc\u00ed kubectl apply. Kubernetes ho s radost\u00ed p\u0159evzal. <\/p>\n<p><\/p>\n<p>A nyn\u00ed m\u00e1me ve sklad\u011b, u objektu v etcd, mo\u017enost zapsat vlastn\u00ed zdroj s n\u00e1zvem ClickHouseInstallation.<\/p>\n<p><\/p>\n<p>Ale zat\u00edm se nic d\u00e1l nestane. T. j. pokud nyn\u00ed vytvo\u0159\u00edme YAML soubor, kter\u00fd jsme zva\u017eovali s popisem shard\u016f, replik a \u0159ekneme 'kubectl apply', Kubernetes ho p\u0159ijme, ulo\u017e\u00ed do etcd a \u0159ekne: 'Skv\u011ble, ale nev\u00edm, co s n\u00edm d\u011blat. Jak spravovat ClickHouseInstallation nev\u00edm.' <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7c2f9f3f81b83c987a3bd72a881d0d91.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Proto pot\u0159ebujeme n\u011bkoho, kdo pom\u016f\u017ee Kubernetes spravovat nov\u00fd typ dat. Na lev\u00e9 stran\u011b m\u00e1me nativn\u00ed kontroler Kubernetes, kter\u00fd pracuje s nativn\u00edmi typy dat. A na prav\u00e9 stran\u011b by se m\u011bl objevit vlastn\u00ed kontroler, kter\u00fd um\u00ed pracovat s vlastn\u00edmi typy dat. <\/p>\n<p><\/p>\n<p>A jinak se naz\u00fdv\u00e1 oper\u00e1tor. Vyt\u00e1hl jsem ho zde mimo Kubernetes, proto\u017ee m\u016f\u017ee b\u011b\u017eet i mimo K8s. Nej\u010dast\u011bji samoz\u0159ejm\u011b v\u0161echny oper\u00e1tory b\u011b\u017e\u00ed v Kubernetes, ale nic mu nebr\u00e1n\u00ed st\u00e1t venku, proto je zde speci\u00e1ln\u011b vyveden ven. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7aa3a1b67d0def5ba752dff56baeebbf.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A u\u017e vlastn\u00ed kontroler, tj. oper\u00e1tor, interaguje s Kubernetes p\u0159es API. U\u017e um\u00ed spolupracovat s API. A u\u017e v\u00ed, jak z vlastn\u00edho zdroje zmaterializovat slo\u017eitou strukturu, kterou chceme vytvo\u0159it. P\u0159esn\u011b t\u00edm se zab\u00fdv\u00e1 oper\u00e1tor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a5f773ddc3663f24d5379955da9c3037.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak funguje oper\u00e1tor? Pod\u00edvejme se na pravou \u010d\u00e1st, abychom zjistili, jak to d\u011bl\u00e1. Zjist\u00edme, jak oper\u00e1tor v\u0161e zmaterializuje a jak d\u00e1le prob\u00edh\u00e1 interakce s K8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/08a8d8dbcb35117a0eb3320589c6ff8d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oper\u00e1tor je program. Je orientovan\u00fd na ud\u00e1losti. Oper\u00e1tor se pomoc\u00ed Kubernetes API p\u0159ihl\u00e1s\u00ed k ud\u00e1lostem. V Kubernetes API jsou vstupn\u00ed body, na kter\u00fdch se lze p\u0159ihl\u00e1sit k ud\u00e1lostem. A pokud se n\u011bco v K8s zm\u011bn\u00ed, Kubernetes po\u0161le ud\u00e1losti v\u0161em, kdo maj\u00ed z\u00e1jem, tedy kdo se na tento bod API p\u0159ihl\u00e1sil, ten bude dost\u00e1vat ozn\u00e1men\u00ed.<\/p>\n<p><\/p>\n<p>Oper\u00e1tor se p\u0159ihl\u00e1s\u00ed k ud\u00e1lostem a m\u011bl by na n\u011b reagovat. Jeho \u00fakolem je reagovat na vznikl\u00e9 ud\u00e1losti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f0664a4151e6e7f6f8575a3e54372e9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ud\u00e1losti jsou generov\u00e1ny ur\u010dit\u00fdmi aktualizacemi. P\u0159ich\u00e1z\u00ed n\u00e1\u0161 YAML soubor s popisem ClickHouseInstallation. P\u0159i\u0161el p\u0159es kubectl apply do etcd. Tam se spustila ud\u00e1lost, kter\u00e1 n\u00e1sledn\u011b p\u0159i\u0161la k ClickHouse-operatorovi. Oper\u00e1tor obdr\u017eel tento popis. A m\u011bl by n\u011bco ud\u011blat. Pokud p\u0159i\u0161la aktualizace na objekt ClickHouseInstallation, je t\u0159eba aktualizovat cluster. \u00dakolem oper\u00e1tora je aktualizovat cluster. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0952bdd391a72aa15bf66af4ce69f4af.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co d\u011bl\u00e1? P\u0159edev\u0161\u00edm je t\u0159eba sestavit ak\u010dn\u00ed pl\u00e1n, co s touto aktualizac\u00ed ud\u011bl\u00e1me. Aktualizace mohou b\u00fdt velmi mal\u00e9, tj. mal\u00e9 ve vykon\u00e1n\u00ed YAML, ale mohou m\u00edt za n\u00e1sledek velk\u00e9 zm\u011bny v klastru. Proto oper\u00e1tor vytv\u00e1\u0159\u00ed pl\u00e1n a pot\u00e9 se ho dr\u017e\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79caaa43b6fd9f3e2eb1afe44ecb2df9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Podle tohoto pl\u00e1nu za\u010d\u00edn\u00e1 p\u0159ipravovat tuto strukturu dovnit\u0159, aby se zhmotnily pod'y, slu\u017eby, tj. d\u011bl\u00e1 to, co je jeho hlavn\u00ed \u00fakol. Je to jako stav\u011bt klastr ClickHouse v Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e91576a26d6b758a68ae0b35cbe01897.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Te\u010f se dotkn\u011bme jedn\u00e9 zaj\u00edmav\u00e9 v\u011bci. To je rozd\u011blen\u00ed odpov\u011bdnost\u00ed mezi Kubernetes a oper\u00e1torem, tj. co d\u011bl\u00e1 Kubernetes, co d\u011bl\u00e1 oper\u00e1tor a jak spolu interaguj\u00ed. <\/p>\n<p><\/p>\n<p>Kubernetes odpov\u00edd\u00e1 za syst\u00e9mov\u00e9 z\u00e1le\u017eitosti, tj. za z\u00e1kladn\u00ed sadu objekt\u016f, kterou lze interpretovat jako system-scope. Kubernetes v\u00ed, jak spou\u0161t\u011bt pod'y, jak restartovat kontejnery, jak vytv\u00e1\u0159et volume mount, jak pracovat s ConfigMap, tj. v\u0161echno, co lze nazvat syst\u00e9mem. <\/p>\n<p><\/p>\n<p>Oper\u00e1to\u0159i operuj\u00ed v oborov\u00fdch oblastech. Ka\u017ed\u00fd oper\u00e1tor je ur\u010den pro svou oborovou oblast. My jsme vytvo\u0159ili oper\u00e1tora pro ClickHouse.<\/p>\n<p><\/p>\n<p>A oper\u00e1tor interaguje pr\u00e1v\u011b v term\u00ednech oborov\u00e9 oblasti, jako je p\u0159id\u00e1n\u00ed repliky, vytvo\u0159en\u00ed sch\u00e9matu, nastaven\u00ed monitorov\u00e1n\u00ed. Doch\u00e1z\u00ed k takov\u00e9mu rozd\u011blen\u00ed.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9dc07d9c29d5dfd538343aadb751e4c0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pod\u00edvejme se na praktick\u00fd p\u0159\u00edklad, jak k tomuto rozd\u011blen\u00ed odpov\u011bdnost\u00ed doch\u00e1z\u00ed, kdy\u017e prov\u00e1d\u00edme akci p\u0159idat repliku. <\/p>\n<p><\/p>\n<p>Oper\u00e1tor dostane \u00fakol \u2013 p\u0159idat repliku. Co oper\u00e1tor d\u011bl\u00e1? Oper\u00e1tor vypo\u010d\u00edt\u00e1, \u017ee je pot\u0159eba vytvo\u0159it nov\u00fd StatefulSet, ve kter\u00e9m je t\u0159eba popsat ur\u010dit\u00e9 \u0161ablony, volume claim. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7a31f2f76a3bdda87e4bccf0e04fe4a8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u0161echno to p\u0159iprav\u00ed a p\u0159ed\u00e1v\u00e1 d\u00e1l do K8s. \u0158\u00edk\u00e1, \u017ee pot\u0159ebuje ConfigMap, StatefulSet, Volume. Kubernetes to zpracov\u00e1v\u00e1. Nahr\u00e1v\u00e1 z\u00e1kladn\u00ed jednotky, se kter\u00fdmi operuje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2be6892234cc12b056962265c13dba07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A znovu p\u0159ich\u00e1z\u00ed do hry ClickHouse-operator. U\u017e m\u00e1 fyzick\u00fd pod, na kter\u00e9m lze n\u011bco d\u011blat. A ClickHouse-operator znovu pracuje v term\u00ednech oborov\u00e9 oblasti. Tj. konkr\u00e9tn\u011b ClickHouse, proto\u017ee pro zahrnut\u00ed repliky do klastru je t\u0159eba nejprve nastavit datov\u00e9 sch\u00e9ma, kter\u00e9 v tomto klastru existuje. A za druh\u00e9, tuto repliku je t\u0159eba zahrnout do monitorov\u00e1n\u00ed, aby byla dob\u0159e sledov\u00e1na. To v\u0161e oper\u00e1tor nastavuje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/790616342b98b347fa67e0100754c8b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A teprve pot\u00e9 do hry vstupuje samotn\u00fd ClickHouse, tedy dal\u0161\u00ed vysoce \u00farov\u0148ov\u00fd prvek. To u\u017e je datab\u00e1ze. M\u00e1 sv\u016fj instance, dal\u0161\u00ed nakonfigurovanou replikaci, kter\u00e1 je p\u0159ipravena p\u0159ipojit se do clusteru.<\/p>\n<p><\/p>\n<p>Vypl\u00fdv\u00e1 z toho, \u017ee \u0159et\u011bzec vykon\u00e1v\u00e1n\u00ed a rozd\u011blen\u00ed odpov\u011bdnosti p\u0159i p\u0159id\u00e1v\u00e1n\u00ed repliky je dost dlouh\u00fd.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ec79cfa2b45fadbe25f4d9fe8d2ec5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pokra\u010dujeme v na\u0161ich praktick\u00fdch \u00faloh\u00e1ch. Pokud ji\u017e cluster existuje, je mo\u017en\u00e9 prov\u00e9st migraci konfigurace. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a52aee0d4350b8da00cdb4b525df80ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Upravili jsme to tak, aby do existuj\u00edc\u00edho xml, kter\u00e9 ClickHouse ch\u00e1pe, bylo mo\u017en\u00e9 propustit skrz.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/91abb1d3b0a14f2118361403a74e14c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je mo\u017en\u00e9 prov\u00e9st jemn\u00e9 lad\u011bn\u00ed ClickHouse. Pr\u00e1v\u011b zoned deployment \u2013 to je to, o \u010dem jsem hovo\u0159il p\u0159i vysv\u011btlov\u00e1n\u00ed hostPath, m\u00edstn\u00edho \u00falo\u017ei\u0161t\u011b. Toto je spr\u00e1vn\u00fd zp\u016fsob, jak prov\u00e9st zoned deployment.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/fde502f30223e04a918f4fd598c3dd9f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dal\u0161\u00ed praktick\u00e1 \u00faloha \u2013 to je monitoring.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4e685fba7883075105c0164a778c51e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pokud se n\u00e1\u0161 cluster m\u011bn\u00ed, mus\u00edme pravideln\u011b nastavovat monitoring. <\/p>\n<p><\/p>\n<p>Pod\u00edvejme se na sch\u00e9ma. Zelen\u00e9 \u0161ipky jsme ji\u017e probrali. Nyn\u00ed se pod\u00edvejme na \u010derven\u00e9 \u0161ipky. To je to, jak chceme monitorovat n\u00e1\u0161 cluster. Jak metriky z clustru ClickHouse p\u0159ich\u00e1zej\u00ed do Prometheus a pot\u00e9 do Grafana.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1210c1423f99d48a20e06e855bf48a72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak\u00e1 je obt\u00ed\u017enost spojen\u00e1 s monitoringem? Pro\u010d se to prezentuje jako n\u011bjak\u00fd \u00fasp\u011bch? Obt\u00ed\u017enost spo\u010d\u00edv\u00e1 pr\u00e1v\u011b v dynamice. Kdy\u017e m\u00e1me jeden statick\u00fd cluster, m\u016f\u017eeme monitoring nastavit jednou a v\u00edc se t\u00edm nezab\u00fdvat.<\/p>\n<p><\/p>\n<p>Ale pokud m\u00e1me mnoho cluster\u016f, nebo se neust\u00e1le n\u011bco m\u011bn\u00ed, proces je dynamick\u00fd. A neust\u00e1l\u00e9 p\u0159enastavov\u00e1n\u00ed monitoringu je pl\u00fdtv\u00e1n\u00edm zdroji a \u010dasem, tedy i prostou lenost\u00ed. To je t\u0159eba automatizovat. Obt\u00ed\u017enost spo\u010d\u00edv\u00e1 pr\u00e1v\u011b v dynamice procesu. A oper\u00e1tor to velmi dob\u0159e automatizuje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48a7264f1228671e0c483c8211a71eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak se n\u00e1\u0161 cluster vyv\u00edjel? Zpo\u010d\u00e1tku vypadal takto.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8a8c7b6cd5562deb315368e1e8e1c976.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pak vypadal takto.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1a3e915fbadf3aa5f3b33d337f36e76e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nakonec se stal takov\u00fdmto. <\/p>\n<p><\/p>\n<p>A monitoring se prov\u00e1d\u00ed automaticky oper\u00e1torem. Jedin\u00fd vstup. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e079e65bf8deff43a81d8ffde938a709.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A my jen na v\u00fdstupu sledujeme v Grafana dashboardu, jak uvnit\u0159 na\u0161ich cluster\u016f pulzuje \u017eivot. <\/p>\n<p><\/p>\n<p>Mimochodem, Grafana dashboard tak\u00e9 p\u0159ich\u00e1z\u00ed s na\u0161\u00edm oper\u00e1torem p\u0159\u00edmo ve zdrojov\u00fdch k\u00f3dech. M\u016f\u017eete se p\u0159ipojit a pou\u017e\u00edvat to. Tento sn\u00edmek obrazovky mi na\u0161i DevOps poskytli.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ad1c2899dd845d0ba4185bdf758468c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kam bychom cht\u011bli sm\u011b\u0159ovat d\u00e1l? To je:<\/p>\n<p><\/p>\n<ul>\n<li>Rozv\u00edjet automatizaci testov\u00e1n\u00ed. Hlavn\u00edm c\u00edlem je automatizovan\u00e9 testov\u00e1n\u00ed nov\u00fdch verz\u00ed. <\/li>\n<li>Tak\u00e9 velmi chceme automatizovat integraci se ZooKeeperem. A m\u00e1me v pl\u00e1nu integrovat se s ZooKeeper-operator. Tedy, pro ZooKeeper byl naps\u00e1n operator a bylo by logick\u00e9, aby se dva oper\u00e1to\u0159i za\u010dali integrovat pro vytvo\u0159en\u00ed pohodln\u011bj\u0161\u00edho \u0159e\u0161en\u00ed. <\/li>\n<li>Chceme prov\u00e9st slo\u017eit\u011bj\u0161\u00ed kontroly \u017eivotaschopnosti. <\/li>\n<li>Zelenou jsem vyzna\u010dil to, co m\u00e1me na dosah, d\u011bd\u011bn\u00ed Templates \u2013 hotovo, t.j. s dal\u0161\u00edm vyd\u00e1n\u00edm oper\u00e1tora u\u017e budeme m\u00edt d\u011bd\u011bn\u00ed \u0161ablon. To je mocn\u00fd n\u00e1stroj, kter\u00fd umo\u017e\u0148uje vytv\u00e1\u0159et slo\u017eit\u00e9 konfigurace z kousk\u016f. <\/li>\n<li>A chceme automatizaci slo\u017eit\u00fdch \u00faloh. Hlavn\u00ed z nich je Re-sharding. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f232c0aab389be5069e5c7886e265c01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poj\u010fme prov\u00e9st mezisou\u010det. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/62f7814994af0441ba5a82de4e9780d7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co dost\u00e1v\u00e1me na v\u00fdstupu? A m\u00e1 to smysl nebo nem\u00e1? M\u011bli bychom v\u016fbec zkou\u0161et dostat datab\u00e1zi do Kubernetes a aplikovat oper\u00e1tora jako celek a Alitnity-oper\u00e1tora konkr\u00e9tn\u011b?<\/p>\n<p><\/p>\n<p>Na v\u00fdstupu dost\u00e1v\u00e1me:<\/p>\n<p><\/p>\n<ul>\n<li>V\u00fdznamn\u00e9 zjednodu\u0161en\u00ed a automatizaci konfigurace, nasazen\u00ed a tak\u00e9 \u00fadr\u017eby. <\/li>\n<li>Okam\u017eit\u011b integrovan\u00e9 monitorov\u00e1n\u00ed. <\/li>\n<li>A hotov\u00e9 k pou\u017eit\u00ed kodifikovan\u00e9 \u0161ablony pro slo\u017eit\u00e9 situace. U\u017e nen\u00ed pot\u0159eba ru\u010dn\u011b p\u0159id\u00e1vat repliky. To d\u011bl\u00e1 operator. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/aebccd7a2dc55f14645f79f89f7b7458.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Z\u016fstala jen posledn\u00ed ot\u00e1zka. U\u017e m\u00e1me datab\u00e1zi v Kubernetes, virtualizaci. Jak\u00e1 je v\u00fdkonnost takov\u00e9ho \u0159e\u0161en\u00ed, zejm\u00e9na vzhledem k tomu, \u017ee ClickHouse je optimalizov\u00e1n na v\u00fdkon?<\/p>\n<p><\/p>\n<p>Odpov\u011b\u010f \u2013 v\u0161echno je v po\u0159\u00e1dku! Nebudu se podrobn\u011b rozepisovat, to je t\u00e9ma samostatn\u00e9 p\u0159edn\u00e1\u0161ky. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ffc230941f0ae24926186db4d8d68ade.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ale existuje takov\u00fd projekt, jako je TSBS. Jak\u00fd je jeho hlavn\u00ed \u00fakol? Je to testov\u00e1n\u00ed datab\u00e1z\u00ed na v\u00fdkon. Je to pokus porovnat tepl\u00e9 s tepl\u00fdm, m\u011bkk\u00e9 s m\u011bkk\u00fdm. <\/p>\n<p><\/p>\n<p>Jak to funguje? Generuje se jeden soubor dat. Pak se tento soubor dat na stejn\u00e9m souboru test\u016f zkou\u0161\u00ed na r\u016fzn\u00fdch datab\u00e1z\u00edch. A ka\u017ed\u00e1 datab\u00e1ze \u0159e\u0161\u00ed jeden \u00fakol tak, jak um\u00ed. A pak lze v\u00fdsledky porovn\u00e1vat. <\/p>\n<p><\/p>\n<p>U\u017e podporuje velk\u00e9 mno\u017estv\u00ed datab\u00e1z\u00ed. Vybral jsem t\u0159i hlavn\u00ed. To jsou:<\/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=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5b4733534a4e6e36fb7788127adc6e86.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bylo tak\u00e9 provedeno srovn\u00e1n\u00ed s jin\u00fdm podobn\u00fdm \u0159e\u0161en\u00edm. Srovn\u00e1n\u00ed s RedShift. Srovn\u00e1n\u00ed prob\u011bhlo na Amazonu. ClickHouse tak\u00e9 v\u0161echny v t\u00e9to ot\u00e1zce dob\u0159e p\u0159ekon\u00e1v\u00e1. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/44cc8dedc07a02fe1ed5aad3e17a579c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak\u00e9 z\u00e1v\u011bry lze u\u010dinit z toho, co jsem \u0159ekl?<\/p>\n<p><\/p>\n<ul>\n<li>DB v Kubernetes je mo\u017en\u00e9. Pravd\u011bpodobn\u011b je mo\u017en\u00e9 jak\u00e9koli, ale celkov\u011b to vypad\u00e1, \u017ee to jde. ClickHouse v Kubernetes ur\u010dit\u011b funguje prost\u0159ednictv\u00edm na\u0161eho oper\u00e1tora. <\/li>\n<li>Operator pom\u00e1h\u00e1 automatizovat procesy a skute\u010dn\u011b usnad\u0148uje \u017eivot.<\/li>\n<li>V\u00fdkon je norm\u00e1ln\u00ed.<\/li>\n<li>A, jak se domn\u00edv\u00e1me, to lze a je t\u0159eba pou\u017e\u00edt. <\/li>\n<\/ul>\n<p><\/p>\n<p>Open source \u2013 p\u0159ipojte se!<\/p>\n<p><\/p>\n<p>Jak u\u017e jsem \u0159ekl, oper\u00e1tor je pln\u011b open source produkt, tak\u017ee by bylo skv\u011bl\u00e9, kdyby co nejv\u00edce lid\u00ed jej vyu\u017eilo. P\u0159ipojte se! \u010cek\u00e1me na v\u00e1s v\u0161echny!<\/p>\n<p><\/p>\n<p>D\u011bkuji v\u0161em!<\/p>\n<p><\/p>\n<p>Ot\u00e1zky<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch klastr\u016f. 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>D\u011bkuji za p\u0159edn\u00e1\u0161ku! Jmenuji se Anton. Jsem z firmy SEMrush. Zaj\u00edm\u00e1 m\u011b, co se t\u00fd\u010de logov\u00e1n\u00ed. O monitorov\u00e1n\u00ed se sly\u0161\u00ed, ale o logov\u00e1n\u00ed nic, pokud mluv\u00edme o cel\u00e9m klastru. U n\u00e1s nap\u0159\u00edklad m\u00e1me klastr na hardware. A pou\u017e\u00edv\u00e1me centralizovan\u00e9 logov\u00e1n\u00ed, sb\u00edr\u00e1me standardn\u00edmi prost\u0159edky do jedn\u00e9 hromady. A potom z toho vytahujeme zaj\u00edmav\u00e1 data.<\/em> <\/p>\n<p><\/p>\n<p>Dobr\u00e1 ot\u00e1zka, tzn. logov\u00e1n\u00ed je v seznamu \u00fakol\u016f. N\u00e1\u0161 oper\u00e1tor to zat\u00edm automatizuje. Je to st\u00e1le ve v\u00fdvoji, projekt je st\u00e1le docela mlad\u00fd. Uv\u011bdomujeme si pot\u0159ebu logov\u00e1n\u00ed. Je to tak\u00e9 velmi d\u016fle\u017eit\u00e9 t\u00e9ma. A je to snad stejn\u011b d\u016fle\u017eit\u00e9 jako monitorov\u00e1n\u00ed. Ale jako prvn\u00ed na realizaci bylo monitorov\u00e1n\u00ed. Logov\u00e1n\u00ed bude. Sna\u017e\u00edme se automatizovat v\u0161echny aspekty fungov\u00e1n\u00ed klastru. Proto odpov\u011b\u010f \u2013 aktu\u00e1ln\u011b oper\u00e1tor to bohu\u017eel neum\u00ed, ale je to v pl\u00e1nu, budeme to d\u011blat. Pokud m\u00e1te z\u00e1jem se p\u0159ipojit, tak pros\u00edm pull request.<\/p>\n<p><\/p>\n<p><em>Dobr\u00fd den! D\u011bkuji za p\u0159edn\u00e1\u0161ku! M\u00e1m standardn\u00ed ot\u00e1zku spojenou s Persistent Volumes. Kdy\u017e vytv\u00e1\u0159\u00edme konfiguraci t\u00edmto oper\u00e1torem, jak oper\u00e1tor ur\u010duje, na kter\u00e9 n\u00f3d\u011b m\u00e1me p\u0159ipojen\u00fd n\u011bjak\u00fd disk nebo slo\u017eku? Mus\u00edme mu p\u0159edem vysv\u011btlit, \u017ee, pros\u00edm, um\u00edst\u011bte n\u00e1\u0161 ClickHouse pr\u00e1v\u011b na t\u011bch n\u00f3d\u00e1ch, kde je disk?<\/em><\/p>\n<p><\/p>\n<p>Pokud se nepletu, tato ot\u00e1zka je pokra\u010dov\u00e1n\u00edm local storage, zejm\u00e9na \u010d\u00e1sti t\u00fdkaj\u00edc\u00ed se hostPath. Je to jako vysv\u011btlit cel\u00e9mu syst\u00e9mu, \u017ee pod m\u00e1 b\u00fdt spu\u0161t\u011bn pr\u00e1v\u011b na takov\u00e9 n\u00f3d\u011b, na kterou m\u00e1me fyzicky p\u0159ipojen\u00fd disk, kter\u00fd je namontov\u00e1n na takov\u00e9mto cest\u011b. To je cel\u00e1 sekce, kterou jsem se dotkl velmi povrchn\u011b, proto\u017ee odpov\u011b\u010f je dost velk\u00e1. <\/p>\n<p><\/p>\n<p>Ve zkratce to vypad\u00e1 takto. Mus\u00edme samoz\u0159ejm\u011b prov\u00e9st provisioning t\u011bchto objem\u016f. V sou\u010dasn\u00e9 dob\u011b v m\u00edstn\u00edm \u00falo\u017ei\u0161ti nen\u00ed dynamick\u00fd provisioning, tak\u017ee DevOps mus\u00ed sami upravit disky, tyto objemy. A mus\u00ed vysv\u011btlit Kubernetes provisioning, \u017ee budou m\u00edt Persistent volumes ur\u010dit\u00e9 t\u0159\u00eddy, kter\u00e9 se nach\u00e1zej\u00ed na ur\u010dit\u00fdch uzlech. Pak bude pot\u0159eba vysv\u011btlit Kubernetes, \u017ee pody, kter\u00e9 vy\u017eaduj\u00ed ur\u010ditou t\u0159\u00eddu m\u00edstn\u00edho \u00falo\u017ei\u0161t\u011b, mus\u00ed b\u00fdt podle \u0161t\u00edtk\u016f pl\u00e1nov\u00e1ny pouze na ur\u010dit\u00e9 uzly. K tomu m\u00e1 operator mo\u017enost p\u0159i\u0159adit n\u011bjak\u00fd \u0161t\u00edtek a jeden na instanci hostitele. A stane se, \u017ee pody budou Kubernetesem sm\u011brov\u00e1ny k spu\u0161t\u011bn\u00ed pouze na uzl\u00edch, kter\u00e9 spl\u0148uj\u00ed po\u017eadavky, \u0161t\u00edtky, jednodu\u0161e \u0159e\u010deno. Administr\u00e1to\u0159i p\u0159i\u0159azuj\u00ed \u0161t\u00edtky, prov\u00e1d\u011bj\u00ed provisioning disk\u016f ru\u010dn\u011b. A pak to \u0161k\u00e1luje.<\/p>\n<p><\/p>\n<p>A pr\u00e1v\u011b t\u0159et\u00ed varianta m\u00edstn\u00edho \u00falo\u017ei\u0161t\u011b pom\u00e1h\u00e1 to trochu usnadnit. Jak jsem ji\u017e zd\u016fraznil, jde o pe\u010dlivou pr\u00e1ci na nastaven\u00ed, kter\u00e1 na v\u00fdstupu pom\u00e1h\u00e1 dos\u00e1hnout maxim\u00e1ln\u00ed v\u00fdkon.<\/p>\n<p><\/p>\n<p><em>M\u00e1m je\u0161t\u011b jednu ot\u00e1zku, kter\u00e1 s t\u00edm souvis\u00ed. Kubernetes byl navr\u017een tak, \u017ee n\u00e1s nezaj\u00edm\u00e1, zda ztrat\u00edme uzel. Co v tomto p\u0159\u00edpad\u011b d\u011blat, pokud jsme ztratili uzel, na kter\u00e9m m\u00e1me shard?<\/em><\/p>\n<p><\/p>\n<p>Ano, Kubernetes byl p\u016fvodn\u011b koncipov\u00e1n tak, \u017ee na\u0161e vztahy k na\u0161im pod\u016fm jsou jako k dobytku, a nyn\u00ed ka\u017ed\u00fd disk se st\u00e1v\u00e1 n\u011b\u010d\u00edm jako dom\u00e1c\u00edm mazl\u00ed\u010dkem. Existuje probl\u00e9m, \u017ee je nem\u016f\u017eeme jen tak vyhodit. A v\u00fdvoj Kubernetes sm\u011b\u0159uje k tomu, \u017ee nen\u00ed mo\u017en\u00e9 na to pohl\u00ed\u017eet filozoficky, jako na pln\u011b vyhazovateln\u00e9 zdroje.<\/p>\n<p><\/p>\n<p>Nyn\u00ed praktick\u00e1 ot\u00e1zka. Co d\u011blat, pokud jste ztratili uzel, na kter\u00e9m byl disk? Tady se probl\u00e9m \u0159e\u0161\u00ed na vy\u0161\u0161\u00ed \u00farovni. V p\u0159\u00edpad\u011b ClickHouse m\u00e1me repliky, kter\u00e9 funguj\u00ed na \u00farovni nad t\u00edm, tj. na \u00farovni ClickHouse.<\/p>\n<p><\/p>\n<p>Jak\u00e1 je tedy dispozice? Za to, aby se neztratila data, odpov\u00edd\u00e1 DevOps. Mus\u00ed spr\u00e1vn\u011b nastavit replikaci a mus\u00ed sledovat, aby se replikace prov\u00e1d\u011bla. V repliku na \u00farovni ClickHouse by m\u011bly b\u00fdt data zdvojeny. To nen\u00ed \u00fakol, kter\u00fd \u0159e\u0161\u00ed operator. A nen\u00ed to \u00fakol, kter\u00fd \u0159e\u0161\u00ed samotn\u00fd Kubernetes. Je to na \u00farovni ClickHouse.<\/p>\n<p><\/p>\n<p>Co d\u011blat, pokud se v\u00e1m odpoj\u00ed \u017eelezn\u00fd uzel? A mus\u00edte nainstalovat druh\u00fd, spr\u00e1vn\u011b na n\u011bm zprovoznit disk, aplikovat \u0161t\u00edtky. A pot\u00e9 spln\u00ed po\u017eadavky, aby mohl Kubernetes spustit instanci podu. Kubernetes jej spust\u00ed. V\u017edy\u0165 m\u00e1te m\u00e9n\u011b pod\u016f, ne\u017e je zapot\u0159eb\u00ed. Projde cyklem, kter\u00fd jsem ukazoval. A na nejvy\u0161\u0161\u00ed \u00farovni ClickHouse pochop\u00ed, \u017ee k n\u00e1m p\u0159i\u0161la replikace, je\u0161t\u011b je pr\u00e1zdn\u00e1 a na ni je pot\u0159eba za\u010d\u00edt nal\u00e9vat data. Tedy tento proces je je\u0161t\u011b \u0161patn\u011b automatizovan\u00fd. <\/p>\n<p><\/p>\n<p><em>D\u011bkuji za p\u0159edn\u00e1\u0161ku! Kdy\u017e se d\u011bj\u00ed r\u016fzn\u00e9 pot\u00ed\u017ee, sel\u017ee oper\u00e1tor a restartuje se, a v tuto chv\u00edli p\u0159ich\u00e1zej\u00ed ud\u00e1losti, n\u011bjak je zpracov\u00e1v\u00e1te?<\/em><\/p>\n<p><\/p>\n<p>Co se stane, kdy\u017e oper\u00e1tor sel\u017ee a restartuje se, \u017ee? <\/p>\n<p><\/p>\n<p><em>Ano. A v ten moment p\u0159ich\u00e1zely ud\u00e1losti.<\/em> <\/p>\n<p><\/p>\n<p>\u00dakol, co d\u011blat v tomto p\u0159\u00edpad\u011b, je \u010d\u00e1ste\u010dn\u011b rozd\u011blen mezi oper\u00e1tora a Kubernetes. Kubernetes m\u00e1 mo\u017enost p\u0159ehraj\u00ed ud\u00e1losti, kter\u00e9 se staly. P\u0159ehraje je. A \u00fakol oper\u00e1tora je zajistit, aby, kdy\u017e do\u0161lo k replay logu ud\u00e1lost\u00ed, tyto ud\u00e1losti byly idempotentn\u00ed. Aby opakovan\u00e9 p\u0159ijet\u00ed stejn\u00e9 ud\u00e1losti neporu\u0161ilo n\u00e1\u0161 syst\u00e9m. A n\u00e1\u0161 oper\u00e1tor s t\u00edmto \u00fakolem obstoj\u00ed. <\/p>\n<p><\/p>\n<p><em>Dobr\u00fd den! D\u011bkuji za p\u0159edn\u00e1\u0161ku! Dmitrij Zavyalov, spole\u010dnost<\/em> <em>Smedova. Pl\u00e1nuje se p\u0159id\u00e1n\u00ed do oper\u00e1tora mo\u017enost\u00ed nastaven\u00ed s haproxy? Zaj\u00edm\u00e1 n\u00e1s n\u011bjak\u00fd jin\u00fd vyrovn\u00e1va\u010d zat\u00ed\u017een\u00ed krom\u011b standardn\u00edho, kter\u00fd by byl inteligentn\u00ed a ch\u00e1pal, \u017ee je tam skute\u010dn\u011b ClickHouse.<\/em> <\/p>\n<p><\/p>\n<p>Mluv\u00edte o Ingress?<\/p>\n<p><\/p>\n<p><em>Ano, Ingress nahradit za haproxy. V haproxy m\u016f\u017eete uv\u00e9st topologii clusteru, kde m\u00e1 repliky.<\/em><\/p>\n<p><\/p>\n<p>Zat\u00edm jsme o tom nep\u0159em\u00fd\u0161leli. Pokud je to pro v\u00e1s d\u016fle\u017eit\u00e9 a m\u016f\u017eete vysv\u011btlit, pro\u010d to pot\u0159ebujete, mohli bychom to realizovat, zejm\u00e9na pokud byste cht\u011bli participovat. Rychl\u00e1 odpov\u011b\u010f \u2013 ne, v sou\u010dasnosti tuto funk\u010dnost nem\u00e1me. D\u011bkujeme za podn\u011bt, pod\u00edv\u00e1me se na to. A pokud je\u0161t\u011b vysv\u011btl\u00edte use case a pro\u010d je to pot\u0159eba v praxi, nap\u0159\u00edklad vytvo\u0159\u00edte issues na GitHubu, bude to v\u00fdborn\u00e9.<\/p>\n<p><\/p>\n<p><em>U\u017e existuj\u00ed.<\/em><\/p>\n<p><\/p>\n<p>Dob\u0159e. Jsme otev\u0159eni v\u0161em n\u00e1vrh\u016fm. A haproxy je na seznamu \u00fakol\u016f. Seznam \u00fakol\u016f roste, a neub\u00fdv\u00e1 zat\u00edm. Ale to je dobr\u00e9, to znamen\u00e1, \u017ee produkt je \u017e\u00e1dan\u00fd.<\/p>\n<p>Zdroj: <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.3 - 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\/cs\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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\udd47Oper\u00e1tor v Kubernetes pro spr\u00e1vu datab\u00e1zov\u00fdch cluster\u016f. Vladislav Klimenko (Altinity, 2019) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/cs\/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":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/96965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=96965"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/96965\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/96966"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=96965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=96965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=96965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}