{"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\/sv\/blog\/administrirovanie\/operator-v-kubernetes-dlya-upravleniya-klasterami-bd-vladislav-klimenko-altinity-2019","title":{"rendered":"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/56e002c7408c4708e39ece867f84171e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rapportet handlar om praktiska fr\u00e5gor kring utveckling av operat\u00f6rer i Kubernetes, design av deras arkitektur och grundl\u00e4ggande funktionsprinciper.<\/p>\n<p><\/p>\n<p>I den f\u00f6rsta delen av rapporten kommer vi att g\u00e5 igenom:<\/p>\n<p><\/p>\n<ul>\n<li>vad en operat\u00f6r i Kubernetes \u00e4r och varf\u00f6r den beh\u00f6vs;<\/li>\n<li>hur en operat\u00f6r f\u00f6renklar hanteringen av komplexa system;<\/li>\n<li>vad en operat\u00f6r kan och vad den inte kan.<\/li>\n<\/ul>\n<p><\/p>\n<p>D\u00e4refter g\u00e5r vi vidare till diskussionen om operat\u00f6rens interna strukturer. Vi kommer att betrakta arkitekturen och funktionen av en operat\u00f6r steg f\u00f6r steg. Vi kommer att detaljerat analysera:<\/p>\n<p><\/p>\n<ul>\n<li>interaktionen mellan operat\u00f6ren och Kubernetes;<\/li>\n<li>vilka funktioner operat\u00f6ren tar p\u00e5 sig och vad den delegerar till Kubernetes.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vi kommer att titta p\u00e5 hantering av shardar och repliker av databaser i Kubernetes.<br \/>\nD\u00e4refter diskuterar vi fr\u00e5gor kring datalagring:<\/p>\n<p><\/p>\n<ul>\n<li>hur man arbetar med Persistent Storage ur operat\u00f6rens perspektiv;<\/li>\n<li>f\u00e4llor med anv\u00e4ndning av Local Storage.<\/li>\n<\/ul>\n<p><\/p>\n<p>I den avslutande delen av rapporten ska vi g\u00e5 igenom praktiska exempel p\u00e5 till\u00e4mpning av <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">clickhouse-operator<\/a><\/noindex> med Amazon eller Google Cloud Service. Rapporten bygger p\u00e5 exempel fr\u00e5n utvecklingen och driften av en operat\u00f6r f\u00f6r 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=\"Spela 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>Jag heter Vladislav Klimenko. Jag ville idag ber\u00e4tta om v\u00e5r erfarenhet av utveckling och drift av operat\u00f6ren, som \u00e4r en specialiserad operat\u00f6r f\u00f6r hantering av databaskluster. Som exempel kommer vi att titta p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Altinity\/clickhouse-operator\">ClickHouse-operator<\/a><\/noindex> f\u00f6r att hantera ett ClickHouse-kluster.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/cc297a3edb3b2a5e30d0dc2725de4011.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Varf\u00f6r har vi m\u00f6jlighet att tala om operat\u00f6ren och ClickHouse?<\/p>\n<p><\/p>\n<ul>\n<li>Vi arbetar med support och utveckling av ClickHouse. <\/li>\n<li>Just nu f\u00f6rs\u00f6ker vi l\u00e5ngsamt bidra med det vi kan till utvecklingen av ClickHouse. Vi \u00e4r de n\u00e4st st\u00f6rsta efter Yandex n\u00e4r det kommer till antalet \u00e4ndringar som gjorts i ClickHouse. <\/li>\n<li>Vi f\u00f6rs\u00f6ker g\u00f6ra ytterligare projekt f\u00f6r ClickHouse-ekosystemet. <\/li>\n<\/ul>\n<p><\/p>\n<p>Jag skulle vilja ber\u00e4tta om ett av dessa projekt. Det handlar om ClickHouse-operatorn f\u00f6r Kubernetes. <\/p>\n<p><\/p>\n<p>I min presentation vill jag ta upp tv\u00e5 \u00e4mnen: <\/p>\n<p><\/p>\n<ul>\n<li>Det f\u00f6rsta \u00e4mnet handlar om hur v\u00e5r operat\u00f6r f\u00f6r hantering av ClickHouse-databaser i Kubernetes fungerar. <\/li>\n<li>Det andra \u00e4mnet handlar om hur en operat\u00f6r fungerar generellt, dvs. hur den interagerar med Kubernetes. <\/li>\n<\/ul>\n<p><\/p>\n<p>Dessa tv\u00e5 fr\u00e5gor kommer att korsas genom hela min presentation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4cc9790e18e70ae1ccde2cf39ef4ef00.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vem skulle vara intresserad av att lyssna p\u00e5 det jag f\u00f6rs\u00f6ker f\u00f6rmedla?<\/p>\n<p><\/p>\n<ul>\n<li>Det \u00e4r mest intressant f\u00f6r dem som driver operat\u00f6rer. <\/li>\n<li>Eller f\u00f6r dem som vill bygga sin egen f\u00f6r att f\u00f6rst\u00e5 hur den fungerar internt, hur operat\u00f6ren interagerar med Kubernetes och vilka f\u00e4llor som kan dyka upp. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/07545f7a0171b610697c519d4aa9cd43.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r att b\u00e4ttre f\u00f6rst\u00e5 vad vi kommer att diskutera idag, vore det bra att veta hur Kubernetes fungerar och ha en grundl\u00e4ggande kunskap om molnteknologier. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/eff56cc3e83fde3d3e64d73d41b07417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad \u00e4r ClickHouse? Det \u00e4r en kolumnorienterad databas med fokus p\u00e5 onlinebehandling av analytiska f\u00f6rfr\u00e5gningar. Och den \u00e4r helt \u00f6ppen k\u00e4llkod. <\/p>\n<p><\/p>\n<p>Och vi beh\u00f6ver veta tv\u00e5 saker. F\u00f6r det f\u00f6rsta vet vi att detta \u00e4r en databas, s\u00e5 det jag kommer att f\u00f6rklara kommer att vara till\u00e4mpligt p\u00e5 n\u00e4stan alla databaser. F\u00f6r det andra att databashanteringssystemet ClickHouse skalas mycket bra, det ger praktiskt taget linj\u00e4r skalbarhet. D\u00e4rf\u00f6r \u00e4r klustrets tillst\u00e5nd det normala tillst\u00e5ndet f\u00f6r ClickHouse. Det mest intressanta f\u00f6r oss \u00e4r att diskutera hur man underh\u00e5ller ett ClickHouse-kluster i Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5eb1ff5026c492117bf2467b10de7053.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Varf\u00f6r beh\u00f6vs det d\u00e4r? Varf\u00f6r kan vi inte forts\u00e4tta att driva det sj\u00e4lva? Svaren \u00e4r delvis tekniska och delvis organisatoriska. <\/p>\n<p><\/p>\n<ul>\n<li>I praktiken st\u00f6ter vi allt oftare p\u00e5 situationer d\u00e4r n\u00e4stan alla komponenter i stora f\u00f6retag redan k\u00f6rs i Kubernetes. Databaserna blir kvar utanf\u00f6r. <\/li>\n<li>Och allt oftare st\u00e4lls fr\u00e5gan: \"Kan vi integrera detta?\". D\u00e4rf\u00f6r f\u00f6rs\u00f6ker stora f\u00f6retag att maximera standardiseringen av hanteringen f\u00f6r att snabbt kunna administrera sina datalagringar. <\/li>\n<li>Och det h\u00e4r \u00e4r s\u00e4rskilt hj\u00e4lpsamt om det kr\u00e4vs maximal m\u00f6jlighet att \u00e5terskapa samma sak p\u00e5 en ny plats, det vill s\u00e4ga maximal portabilitet.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/99312e74bd7ed4031128c7ec872f6a68.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hur enkelt eller sv\u00e5rt \u00e4r det? Det kan sj\u00e4lvklart g\u00f6ras manuellt. Men det \u00e4r inte s\u00e5 enkelt, eftersom vi har den totala komplexiteten av att hantera Kubernetes, samtidigt som vi m\u00e5ste ta h\u00e4nsyn till ClickHouse-specifikationen. Resultatet blir en s\u00e5dan aggregering. <\/p>\n<p><\/p>\n<p>Och allt detta ger en ganska stor upps\u00e4ttning teknologier som blir sv\u00e5ra att hantera, eftersom Kubernetes kommer med sina dagliga driftfr\u00e5gor och ClickHouse med sina specifika dagliga driftutmaningar. S\u00e4rskilt om vi har flera ClickHouse-instanser och st\u00e4ndigt m\u00e5ste hantera n\u00e5got med dem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. 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 har med dynamisk konfiguration ett stort antal fr\u00e5gor som skapar en konstant belastning p\u00e5 DevOps:<\/p>\n<p><\/p>\n<ul>\n<li>N\u00e4r vi vill \u00e4ndra n\u00e5got i ClickHouse, till exempel l\u00e4gga till en replik eller shard, m\u00e5ste vi hantera konfigurationen. <\/li>\n<li>Sedan m\u00e5ste dataskeman \u00e4ndras eftersom ClickHouse har ett speciellt s\u00e4tt att sharda. Man beh\u00f6ver distribuera dataskeman och konfigurationerna. <\/li>\n<li>\u00d6vervakning m\u00e5ste st\u00e4llas in. <\/li>\n<li>Insamling av loggar f\u00f6r nya shards, f\u00f6r nya repliker. <\/li>\n<li>Man m\u00e5ste ta hand om \u00e5terst\u00e4llning.<\/li>\n<li>Och om omstart. <\/li>\n<\/ul>\n<p><\/p>\n<p>Det \u00e4r s\u00e5dana rutinarbeten som man verkligen skulle vilja underl\u00e4tta i driften.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. 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 hj\u00e4lper bra till med driften, men n\u00e4r det g\u00e4ller de grundl\u00e4ggande systemaspekterna. <\/p>\n<p><\/p>\n<p>Kubernetes underl\u00e4ttar och automatiserar saker s\u00e5som:<\/p>\n<p><\/p>\n<ul>\n<li>\u00c5terst\u00e4llning.<\/li>\n<li>Omstart. <\/li>\n<li>Systemlagringshantering.<\/li>\n<\/ul>\n<p><\/p>\n<p>Detta \u00e4r bra, det \u00e4r r\u00e4tt riktning, men det har ingen komplett f\u00f6rst\u00e5else f\u00f6r hur man driver en databascluster. <\/p>\n<p><\/p>\n<p>Man vill ha mer, man vill att hela databasen ska fungera i Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6564e9f29d5d518925c8593bca978345.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Man vill f\u00e5 n\u00e5got som en stor magisk r\u00f6d knapp, som man trycker p\u00e5 och f\u00e5r ett cluster som installeras och underh\u00e5lls under hela livscykeln, med dagliga uppgifter som m\u00e5ste l\u00f6sas. ClickHouse-cluster i Kubernetes.<\/p>\n<p><\/p>\n<p>Och vi har f\u00f6rs\u00f6kt skapa en l\u00f6sning som underl\u00e4ttar arbetet. Det \u00e4r ClickHouse-operat\u00f6ren f\u00f6r Kubernetes fr\u00e5n Altinity.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ff80c6fc59069ec900d545096ad978d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Operat\u00f6ren \u00e4r ett program vars huvuduppgift \u00e4r att hantera andra program, det vill s\u00e4ga, det \u00e4r en f\u00f6rvaltare. <\/p>\n<p><\/p>\n<p>Och det inneh\u00e5ller beteendemallar. Man kan kalla det kodifierad kunskap om \u00e4mnesomr\u00e5det. <\/p>\n<p><\/p>\n<p>Och dess huvuduppgift \u00e4r att underl\u00e4tta livet f\u00f6r DevOps och minska micromanagement, s\u00e5 att han (DevOps) t\u00e4nker i termer av h\u00f6g niv\u00e5, det vill s\u00e4ga, att han (DevOps) inte \u00e4gnar sig \u00e5t micromanagement och inte beh\u00f6ver st\u00e4lla in alla detaljer manuellt. <\/p>\n<p><\/p>\n<p>Och just operat\u00f6ren \u00e4r en hj\u00e4lprobot som tacklar mikrouppgifter och hj\u00e4lper DevOps.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0824a1fa710e8c4f45406aa7f596b977.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Varf\u00f6r beh\u00f6vs en operat\u00f6r? Den visar sig s\u00e4rskilt bra i tv\u00e5 fr\u00e5gor:<\/p>\n<p><\/p>\n<ul>\n<li>N\u00e4r en specialist som sysslar med ClickHouse har otillr\u00e4cklig erfarenhet, men m\u00e5ste b\u00f6rja anv\u00e4nda ClickHouse, underl\u00e4ttar operat\u00f6ren driften och m\u00f6jligg\u00f6r att driva ClickHouse-cluster med en ganska komplex konfiguration, utan att beh\u00f6va g\u00e5 in p\u00e5 detaljer om hur allt fungerar inuti. Man ger honom bara h\u00f6gre uppgifter, och det fungerar. <\/li>\n<li>Och den andra uppgiften, d\u00e4r han verkligen utm\u00e4rker sig, \u00e4r n\u00e4r det handlar om att automatisera ett stort antal repetitiva uppgifter. Han avlastar sysadmins fr\u00e5n mikrouppgifter. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f1cb11156d57f560d0b6c82700ac6ff8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det h\u00e4r beh\u00f6vs mest av allt f\u00f6r antingen de som just har b\u00f6rjat sin resa, eller de som beh\u00f6ver fokusera mycket p\u00e5 automatisering. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/128e7d9ff1ce0c535f98be66aedb1060.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad \u00e4r d\u00e5 skillnaden mellan ett operat\u00f6rsbaserat tillv\u00e4gag\u00e5ngss\u00e4tt och andra system? Finns det inte Helm? Det hj\u00e4lper ju ocks\u00e5 att installera ClickHouse, man kan rita helm charts som till och med s\u00e4tter upp en hel ClickHouse-kluster. Vad \u00e4r d\u00e5 skillnaden mellan en operat\u00f6r och till exempel Helm?<\/p>\n<p><\/p>\n<p>Den grundl\u00e4ggande skillnaden \u00e4r att Helm \u00e4r en pakethanterare, medan en operat\u00f6r g\u00e5r ett steg l\u00e4ngre. Det handlar om att st\u00f6dja hela livscykeln. Det handlar inte bara om installation, utan \u00e4ven om dagliga uppgifter som inkluderar skalning, sharding, det vill s\u00e4ga allt som m\u00e5ste utf\u00f6ras under livscykeln (om det beh\u00f6vs, \u00e4ven borttagning) - det \u00e4r allt en operat\u00f6r hanterar. Han f\u00f6rs\u00f6ker automatisera och underh\u00e5lla hela programvarans livscykel. Det \u00e4r hans fundamentala skillnad fr\u00e5n andra l\u00f6sningar p\u00e5 marknaden. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e26b57c8caf8437f683d7afbfa127ebd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Detta var den inledande delen, l\u00e5t oss g\u00e5 vidare. <\/p>\n<p><\/p>\n<p>Hur bygger vi v\u00e5r operat\u00f6r? Vi f\u00f6rs\u00f6ker n\u00e4rma oss fr\u00e5gan om hur man hanterar en ClickHouse-kluster som en resurs. <\/p>\n<p><\/p>\n<p>H\u00e4r p\u00e5 v\u00e4nster sida av bilden har vi indata. Det h\u00e4r \u00e4r YAML med specifikationen f\u00f6r klustret, som p\u00e5 det klassiska s\u00e4ttet \u00f6verf\u00f6rs till Kubernetes via kubectl. D\u00e4r f\u00e5ngar operat\u00f6ren upp det, g\u00f6r sin magi. Och ut kommer vi med en s\u00e5dan h\u00e4r schema. Detta \u00e4r implementeringen av ClickHouse i Kubernetes.<\/p>\n<p><\/p>\n<p>Och s\u00e5 kommer vi l\u00e5ngsamt att se hur operat\u00f6ren faktiskt fungerar, vilka repetitiva uppgifter som kan l\u00f6sas. Vi kommer endast att titta p\u00e5 typiska uppgifter, eftersom vi har begr\u00e4nsad tid. Det kommer inte att handla om allt vad operat\u00f6ren kan hantera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/b40401931b58988058419d4495dbb1bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss basera oss p\u00e5 praktiken. V\u00e5rt projekt \u00e4r helt open source, s\u00e5 man kan titta p\u00e5 GitHub hur det fungerar. Och man kan basera sig p\u00e5 \u00f6verv\u00e4ganden, om man bara vill s\u00e4tta ig\u00e5ng, kan man b\u00f6rja med Quick Start Guide.<\/p>\n<p><\/p>\n<p>Om man vill g\u00e5 p\u00e5 djupet, f\u00f6rs\u00f6ker vi h\u00e5lla dokumentationen i ett hyfsat skick. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9414d7c3aa94b6ad999e150f0ac25a97.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss b\u00f6rja med en praktisk uppgift. Den f\u00f6rsta uppgiften vi vill starta med \u00e4r att k\u00f6ra det f\u00f6rsta exemplet p\u00e5 n\u00e5got s\u00e4tt. Hur k\u00f6r man ClickHouse med hj\u00e4lp av operat\u00f6ren, \u00e4ven om man inte riktigt vet hur den fungerar? Vi skriver en manifest, eftersom all kommunikation med k8s sker genom manifester.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3e97cd235827460693ed95fb3598d31d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4r \u00e4r en komplex manifest. Det som vi har markerat i r\u00f6tt \u00e4r det som vi m\u00e5ste fokusera p\u00e5. Vi ber operat\u00f6ren att skapa ett kluster med namnet demo.<\/p>\n<p><\/p>\n<p>Detta \u00e4r grundl\u00e4ggande exempel. Storage beskrivs \u00e4nnu inte, men vi kommer tillbaka till storage lite senare. F\u00f6r nu kommer vi att observera utvecklingen av klustret i realtid.<\/p>\n<p><\/p>\n<p>Vi har skapat denna manifest. Vi matar den till v\u00e5r operat\u00f6r. Den har arbetat, gjort sin magi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/502e64fbe6ed7d04b2aecb7d51abc7f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi kollar i konsolen. Tre komponenter v\u00e4cker intresse \u2013 det \u00e4r Pod, tv\u00e5 tj\u00e4nster och StatefulSet.<\/p>\n<p><\/p>\n<p>Operat\u00f6ren har arbetat, och vi kan titta p\u00e5 vad den har skapat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/67faf120e21e5113680ccff9c71b00f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Den skapar ungef\u00e4r ett s\u00e5dant schema. Vi har StatefulSet, Pod, ConfigMap f\u00f6r varje replika, ConfigMap f\u00f6r hela klustret. Tj\u00e4nsterna \u00e4r n\u00f6dv\u00e4ndigtvis ing\u00e5ngspunkter f\u00f6r klustret. <\/p>\n<p><\/p>\n<p>Tj\u00e4nster \u00e4r den centrala Load Balancer-tj\u00e4nsten och man kan \u00e4ven ha en f\u00f6r varje replika, f\u00f6r varje shard. <\/p>\n<p><\/p>\n<p>H\u00e4r \u00e4r v\u00e5rt grundl\u00e4ggande kluster som ser ut ungef\u00e4r s\u00e5 h\u00e4r. Det best\u00e5r av en enda nod. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f235ada45ee58b517c0e041f795ae122.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi g\u00e5r vidare och komplicerar saker. Klustret m\u00e5ste shardas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/992836a00434c64fb4616c1c4cc4df97.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00e5ra uppgifter \u00f6kar, dynamiken b\u00f6rjar. Vi vill l\u00e4gga till en shard. Vi f\u00f6ljer utvecklingen. Vi \u00e4ndrar v\u00e5r specifikation. Vi anger att vi vill ha tv\u00e5 shards. <\/p>\n<p><\/p>\n<p>Detta \u00e4r samma fil som dynamiskt utvecklas med systemets tillv\u00e4xt. Storage finns inte, det kommer att diskuteras senare, det \u00e4r ett separat \u00e4mne.<\/p>\n<p><\/p>\n<p>Vi matar YAML-operat\u00f6ren och ser vad som h\u00e4nder. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8ddb5845cae160098470208f51b5da7c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Operat\u00f6ren t\u00e4nkte efter och skapade f\u00f6ljande entiteter. Vi har redan tv\u00e5 Pods, tre tj\u00e4nster och pl\u00f6tsligt, 2 StatefulSets. Varf\u00f6r 2 StatefulSets?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/26eb734ff1a195de2ceaab842b472ee4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00e5 schemat var det s\u00e5 h\u00e4r \u2013 detta \u00e4r v\u00e5rt ursprungliga tillst\u00e5nd, n\u00e4r vi hade en pod.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/657838b0d378121fdd66ad3ff8168600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det blev s\u00e5 h\u00e4r. F\u00f6r nu \u00e4r allt enkelt, det har duplicerats. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f039a7046f1c56fbdad6b5a26a519b10.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och varf\u00f6r blev StatefulSet tv\u00e5? H\u00e4r m\u00e5ste vi avledas och diskutera hur Kubernetes hanterar Pods.<\/p>\n<p><\/p>\n<p>Det finns ett objekt som heter StatefulSet, som g\u00f6r att man kan skapa en upps\u00e4ttning Pods fr\u00e5n en mall. H\u00e4r \u00e4r nyckelfaktorn \u2013 den h\u00e4r mallen. Och man kan starta m\u00e5nga Pods fr\u00e5n en mall inom en StatefulSet. Nyckelfrasen h\u00e4r \u00e4r 'm\u00e5nga Pods fr\u00e5n en och samma mall'.<\/p>\n<p><\/p>\n<p>Det fanns en stor frestelse att skapa hela klustret genom att packa det i en enda StatefulSet. Det skulle fungera, det finns inga problem med det. Men det finns en liten nyans. Om vi vill bygga ett heterogent kluster, det vill s\u00e4ga med flera versioner av ClickHouse, s\u00e5 b\u00f6rjar vi f\u00e5 fr\u00e5gor. Ja, StatefulSet kan g\u00f6ra en rolling update, och man kan rulla ut en ny version, och f\u00f6rklara att man inte b\u00f6r f\u00f6rs\u00f6ka uppgradera fler \u00e4n ett visst antal noder samtidigt.<\/p>\n<p><\/p>\n<p>Men om vi extrapolerar uppgiften och s\u00e4ger att vi vill skapa ett helt heterogent kluster, d\u00e4r vi vill skapa ett heterogent kluster b\u00e5de med olika versioner av ClickHouse och med olika lagring. Vi vill till exempel skapa vissa repliker p\u00e5 separata diskar, p\u00e5 l\u00e5ngsamma diskar, i grunden bygga ett helt heterogent kluster. Och eftersom StatefulSet skapar en standardiserad l\u00f6sning fr\u00e5n en och samma mall, s\u00e5 finns det ingen m\u00f6jlighet att g\u00f6ra detta. <\/p>\n<p><\/p>\n<p>Efter viss eftertanke togs beslutet att g\u00f6ra s\u00e5 h\u00e4r. Varje replik har sin egen StatefulSet. Det finns vissa nackdelar med denna l\u00f6sning, men i praktiken inkapslar den fullt ut operatorn. Det finns ocks\u00e5 m\u00e5nga f\u00f6rdelar. Vi kan bygga exakt det kluster vi vill, till exempel helt heterogent. D\u00e4rf\u00f6r, i klustret d\u00e4r vi har tv\u00e5 shardar med en replik vardera, kommer vi att ha 2 StatefulSets och 2 Pods just f\u00f6r att vi valde detta tillv\u00e4gag\u00e5ngss\u00e4tt p\u00e5 grund av de ovan n\u00e4mnda sk\u00e4len f\u00f6r m\u00f6jligheten att bygga ett heterogent kluster. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b7ae92a545f9bb6cc5f0136df87207f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss \u00e5terg\u00e5 till praktiska uppgifter. I v\u00e5rt kluster beh\u00f6ver vi konfigurera anv\u00e4ndare, det vill s\u00e4ga vi m\u00e5ste g\u00f6ra n\u00e5gon slags konfiguration av ClickHouse i Kubernetes. Operat\u00f6ren tillhandah\u00e5ller alla m\u00f6jligheter f\u00f6r detta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6a65aa78293c0b40230cf24efc58e55a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi kan skriva direkt i YAML vad vi vill. Alla konfigurationsalternativ mappas direkt fr\u00e5n denna YAML till ClickHouse-konfigurationer, som sedan sprids \u00f6ver hela klustret.<\/p>\n<p><\/p>\n<p>Detta \u00e4r ett alternativ. Som ett exempel kan l\u00f6senordet g\u00f6ras krypterat. Alla konfigurationsalternativ f\u00f6r ClickHouse st\u00f6ds. H\u00e4r \u00e4r det bara ett exempel. <\/p>\n<p><\/p>\n<p>Konfigurationen f\u00f6r klustret distribueras som ConfigMap. I praktiken sker uppdateringen av ConfigMap inte omedelbart, s\u00e5 om klustret \u00e4r stort tar processen att trycka ut konfigurationen en viss tid. Men allt detta \u00e4r mycket praktiskt i drift.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2e42d19d7a558e3b8d4bbb51fe5bd08b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi komplicerar uppgiften. Klustret utvecklas. Vi vill replikera data. Det vill s\u00e4ga, vi har redan tv\u00e5 shardar, med en replik vardera, och anv\u00e4ndarna \u00e4r inst\u00e4llda. Vi v\u00e4xer och vill \u00e4gna oss \u00e5t replikering.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4c97e5e6ca9cb66d3a94fb8cfe610186.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad beh\u00f6ver vi f\u00f6r replikering? <\/p>\n<p><\/p>\n<p>Vi beh\u00f6ver ZooKeeper. I ClickHouse \u00e4r replikering byggd med hj\u00e4lp av ZooKeeper. ZooKeeper beh\u00f6vs f\u00f6r att olika replikor av ClickHouse ska ha konsensus om vilka datablokkar som finns p\u00e5 vilken ClickHouse. <\/p>\n<p><\/p>\n<p>Vilken ZooKeeper som helst kan anv\u00e4ndas. Om f\u00f6retaget har en extern ZooKeeper kan den anv\u00e4ndas. Om inte, kan vi installera en fr\u00e5n v\u00e5rt repository. Det finns en installationsprogram som underl\u00e4ttar detta. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/6cc40951a19b982abf578836edf569d3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och interaktionsschemat f\u00f6r hela systemet ser ut s\u00e5 h\u00e4r. Vi har Kubernetes som plattform. P\u00e5 den k\u00f6rs ClickHouse-operat\u00f6ren. ZooKeeper har jag illustrerat h\u00e4r. Operat\u00f6ren interagerar b\u00e5de med ClickHouse och med ZooKeeper. Det vill s\u00e4ga, det blir en interaktion. <\/p>\n<p><\/p>\n<p>Och allt detta beh\u00f6vs f\u00f6r att ClickHouse framg\u00e5ngsrikt ska kunna replikera data i k8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4fc37aee850acd20517fa3d7562f0165.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss nu titta p\u00e5 sj\u00e4lva uppgiften, hur manifestet f\u00f6r replikering kommer att se ut.<\/p>\n<p><\/p>\n<p>Vi l\u00e4gger till tv\u00e5 sektioner till v\u00e5rt manifest. Den f\u00f6rsta \u00e4r var vi ska h\u00e4mta ZooKeeper, som kan vara antingen inuti Kubernetes eller extern. Detta \u00e4r bara en beskrivning. Och vi beg\u00e4r replikor. Det vill s\u00e4ga, vi vill ha tv\u00e5 replikor. S\u00e5 totalt ska vi ha 4 poddar. Vi kommer ih\u00e5g lagringen, den kommer tillbaka lite l\u00e4ngre fram. Lagring \u00e4r en egen historia. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/afb8c974d0587a4ad87d6ba36bbe5e3b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det var s\u00e5 h\u00e4r.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/909ffd258dbce718ddf529a1a753de6f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det blir s\u00e5 h\u00e4r. Replikor l\u00e4ggs till. Den fj\u00e4rde fick inte plats, s\u00e5 vi tror att det kan finnas m\u00e5nga d\u00e4r. Och ZooKeeper l\u00e4ggs till p\u00e5 sidan. Scheman blir mer komplexa. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c33b37fc7fc72f51276e5e98b9ec2134.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och det \u00e4r dags att l\u00e4gga till n\u00e4sta uppgift. Vi kommer att l\u00e4gga till Persistent Storage. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f28d14901a713eca413a52ec6ea21ac5.jpeg\" style=\"display:block;margin: 0 auto;\" \/>N\u00e4r det g\u00e4ller Persistent Storage har vi olika implementationsalternativ.<\/p>\n<p><\/p>\n<p>Om vi k\u00f6r i en molnleverant\u00f6r, till exempel, n\u00e4r vi anv\u00e4nder Amazon, Google, finns det en stark frestelse att anv\u00e4nda molnlagring. Det \u00e4r mycket bekv\u00e4mt, det \u00e4r bra. <\/p>\n<p><\/p>\n<p>Och det finns ett andra alternativ. Det \u00e4r f\u00f6r lokal lagring, n\u00e4r vi har lokala diskar p\u00e5 varje nod. Detta alternativ \u00e4r mycket sv\u00e5rare att implementera, men det \u00e4r mer effektivt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/483ee5c08b62e987620bf54fd32a44b4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss titta p\u00e5 vad vi har n\u00e4r det g\u00e4ller molnlagring.<\/p>\n<p><\/p>\n<p>Det finns f\u00f6rdelar. Det \u00e4r mycket enkelt att konfigurera. Vi best\u00e4ller bara hos molnleverant\u00f6ren, att ge oss lagring av viss kapacitet och klass. Klasserna \u00e4r specificerade av leverant\u00f6rerna sj\u00e4lva. <\/p>\n<p><\/p>\n<p>Och det finns en nackdel. F\u00f6r vissa \u00e4r detta en icke-kritisk nackdel. Sj\u00e4lvklart kommer det att finnas vissa prestandaproblem. Det \u00e4r mycket praktiskt att arbeta med, p\u00e5litligt, men det finns vissa potentiella prestandautmaningar.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8e82430b64477f91640078ff4eacb47e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och eftersom ClickHouse fokuserar just p\u00e5 prestanda, kan man till och med s\u00e4ga att det pressar allt som g\u00e5r, d\u00e4rf\u00f6r f\u00f6rs\u00f6ker m\u00e5nga kunder maximera prestandan.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8638fe37b848a98ce8326218d368baa3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r att maximera detta beh\u00f6ver vi lokal lagring.<\/p>\n<p><\/p>\n<p>Kubernetes tillhandah\u00e5ller tre abstraktioner f\u00f6r anv\u00e4ndning av lokal lagring i Kubernetes. Dessa \u00e4r: <\/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>L\u00e5t oss titta p\u00e5 hur de skiljer sig \u00e5t och vad de har gemensamt. <\/p>\n<p><\/p>\n<p>F\u00f6r det f\u00f6rsta har vi i alla tre metoderna lagring \u2013 det \u00e4r lokala diskar som finns p\u00e5 samma fysiska k8s-nod. Men de har vissa skillnader.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79afb620a0c9a1552b47240b405fedc9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi b\u00f6rjar med det enklaste, dvs. med emptyDir. Vad \u00e4r detta i praktiken? Det \u00e4r n\u00e4r vi ber v\u00e5rt system f\u00f6r containerhantering (oftast Docker) att ge oss \u00e5tkomst till en mapp p\u00e5 den lokala disken.<\/p>\n<p><\/p>\n<p>I praktiken skapar Docker n\u00e5gonstans p\u00e5 sina egna v\u00e4gar en tempor\u00e4r mapp, d\u00f6per den till en l\u00e5ng hash. Och ger ett gr\u00e4nssnitt f\u00f6r \u00e5tkomst till den. <\/p>\n<p><\/p>\n<p>Hur kommer detta att fungera sett till prestanda? Det kommer att fungera med hastigheten av den lokala disken, dvs. det \u00e4r en fullst\u00e4ndig \u00e5tkomst till sin enhet. <\/p>\n<p><\/p>\n<p>Men detta har sin nackdel. Persistent i detta avseende \u00e4r ganska os\u00e4kert. Vid den minsta inverkan av Docker p\u00e5 containrarna f\u00f6rloras persistent data. Om Kubernetes av n\u00e5gon anledning vill flytta denna Pod till en annan disk, s\u00e5 g\u00e5r uppgifterna f\u00f6rlorade. <\/p>\n<p><\/p>\n<p>Denna metod \u00e4r bra f\u00f6r tester, eftersom hastigheten redan \u00e4r acceptabel, men f\u00f6r n\u00e5got mer seri\u00f6st \u00e4r detta alternativ inte l\u00e4mpligt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0b60f80fc9ea0e2c1820021bcd9e1382.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00e4rf\u00f6r finns det en andra metod. Det \u00e4r hostPath. Om man tittar p\u00e5 den f\u00f6reg\u00e5ende sliden och denna, s\u00e5 kan man se bara en enda skillnad. V\u00e5r mapp har flyttat fr\u00e5n Docker direkt till Kubernetes-noden. H\u00e4r \u00e4r det lite enklare. Vi anger direkt s\u00f6kv\u00e4gen i det lokala filsystemet d\u00e4r vi vill lagra v\u00e5ra data. <\/p>\n<p><\/p>\n<p>F\u00f6rdelar finns med denna metod. Det \u00e4r redan en riktig persistent lagring, och dessutom klassisk. Uppgifterna kommer att skrivas till disken p\u00e5 en viss adress. <\/p>\n<p><\/p>\n<p>Det finns nackdelar. Det handlar om hanteringskomplexitet. V\u00e5r Kubernetes kan vilja flytta en Pod till en annan fysisk nod. H\u00e4r kommer DevOps in i bilden. De m\u00e5ste f\u00f6rklara systemet korrekt att dessa pods bara kan flyttas till s\u00e5dana noder som har n\u00e5got monterat l\u00e4ngs dessa v\u00e4gar, och h\u00f6gst en nod \u00e5t g\u00e5ngen. Det \u00e4r ganska komplicerat. <\/p>\n<p><\/p>\n<p>F\u00f6r dessa \u00e4ndam\u00e5l har vi skapat mallar hos oss som operat\u00f6r f\u00f6r att d\u00f6lja all denna komplexitet. Man skulle enkelt kunna s\u00e4ga: \"Jag vill ha en instans av ClickHouse p\u00e5 varje fysisk nod och i en specifik s\u00f6kv\u00e4g.\" <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f64c19bccc8b187d6af112eda896b25.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men denna n\u00f6dv\u00e4ndighet g\u00e4ller inte bara oss, d\u00e4rf\u00f6r f\u00f6rst\u00e5r \u00e4ven herrarna fr\u00e5n Kubernetes att m\u00e4nniskor vill ha tillg\u00e5ng till fysiska diskar, s\u00e5 de erbjuder en tredje niv\u00e5.<\/p>\n<p><\/p>\n<p>Den kallas local. Det finns praktiskt taget ingen skillnad fr\u00e5n f\u00f6reg\u00e5ende bild. Tidigare var vi tvungna att manuellt genomf\u00f6ra att dessa pods inte kunde flyttas fr\u00e5n nod till nod, eftersom de m\u00e5ste vara kopplade langs en specifik s\u00f6kv\u00e4g till den lokala fysiska disken, men nu inkapslas all denna kunskap inom Kubernetes. Det blir mycket enklare att konfigurera.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/140c43be34dd7015c0bf4cfd0a0bb384.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss \u00e5terg\u00e5 till v\u00e5r praktiska uppgift. L\u00e5t oss \u00e5terg\u00e5 till YAML-mallen. H\u00e4r har vi en riktig lagring. Vi kom tillbaka till detta. Vi definierar en klassisk VolumeClaim-mall som i k8s. Och beskriver vilken lagring vi vill ha.<\/p>\n<p><\/p>\n<p>Efter detta kommer k8s att beg\u00e4ra lagring. Det kommer att tilldela det till oss i StatefulSet. Och slutligen kommer det att bli tillg\u00e4ngligt f\u00f6r ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/960e666486ed09cebd83235d43f83970.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi hade en s\u00e5dan h\u00e4r schema. V\u00e5r Persistenta Lagring var r\u00f6d, vilket liksom antydde att vi borde \u00e5tg\u00e4rda det. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a989df489e3a9fef6a4fbf7b93c489a6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och den blir gr\u00f6n. Nu har schemat f\u00f6r ClickHouse-klustret p\u00e5 k8s fullbordats. Vi har shards, repliker, ZooKeeper, och det finns en riktig Persistent, som har realiserats p\u00e5 olika s\u00e4tt. Schemat \u00e4r nu helt fungerande. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/c409ee5da6309a67904394d968ed4906.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi forts\u00e4tter fram\u00e5t. V\u00e5rt kluster v\u00e4xer. Och Aleksej anstr\u00e4nger sig och sl\u00e4pper en ny version av ClickHouse.<\/p>\n<p><\/p>\n<p>En praktisk uppgift uppst\u00e5r \u2013 att testa den nya versionen av ClickHouse p\u00e5 v\u00e5rt kluster. Naturligtvis vill vi inte rulla ut den helt, vi vill kanske s\u00e4tta en ny version i ett avl\u00e4gset h\u00f6rn p\u00e5 en replika, och kanske inte bara en ny version, utan tv\u00e5, eftersom de sl\u00e4pps ganska ofta. <\/p>\n<p><\/p>\n<p>Vad kan vi s\u00e4ga om detta?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48ed52d393d977d0cfaa9320bd02ed1e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4r har vi precis en s\u00e5dan m\u00f6jlighet. Det handlar om mallarna f\u00f6r poddar. Vi kan specificera hur v\u00e5r operator helt och h\u00e5llet till\u00e5ter att bygga en heterogen kluster. Det vill s\u00e4ga konfigurera, fr\u00e5n att ha alla repliker i en h\u00f6g, till att ha varje individuell replika med vilken version av ClickHouse vi vill ha, vilken lagringsversion vi vill ha. Vi kan helt konfigurera klustret enligt den konfiguration vi beh\u00f6ver. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4949ecd8119cb4ec0f4bad9bf27fa74e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nu kommer vi att f\u00f6rdjupa oss lite mer. Tidigare har vi pratat om hur ClickHouse-operatorn fungerar specifikt f\u00f6r ClickHouse.<\/p>\n<p><\/p>\n<p>Nu skulle jag vilja s\u00e4ga n\u00e5gra ord om hur vilken operator som helst fungerar, samt hur den interagerar med K8s.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ca9c2a23c54b2a81ac0a8bba88d5e65.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi b\u00f6rjar med att titta p\u00e5 interaktionen med K8s. Vad h\u00e4nder n\u00e4r vi g\u00f6r kubectl apply? V\u00e5ra objekt dyker upp i etcd via API:et. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4b9eaedeb0f34d10398ba0187f09fef9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Till exempel de grundl\u00e4ggande objekten i Kubernetes: pod, StatefulSet, service och s\u00e5 vidare. <\/p>\n<p><\/p>\n<p>Ingenting fysiskt h\u00e4nder \u00e4nnu. Dessa objekt m\u00e5ste materialiseras i klustret. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/3c49dc1b0067347d5fc415ef9b87642d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r detta kommer en controller in i bilden. En controller \u00e4r en speciell komponent i k8s som vet hur man materialiserar dessa beskrivningar. Den vet hur och vad som m\u00e5ste g\u00f6ras fysiskt. Den vet hur man startar containrar och vad som m\u00e5ste konfigureras f\u00f6r att servern ska fungera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/d951eb0f7bacf519566b0ef6cf9bc100.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och den materialiserar v\u00e5ra objekt i K8s.<\/p>\n<p><\/p>\n<p>Men vi vill inte bara hantera poddar och StatefulSet:er, vi vill skapa ClickHouseInstallation, det vill s\u00e4ga ett objekt av typen ClickHouse, f\u00f6r att hantera det som en helhet. F\u00f6r n\u00e4rvarande finns det ingen s\u00e5dan m\u00f6jlighet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1594921ac5dd9384ce81ceae92f5cda9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men K8s har en annan trevlig funktion. Vi vill att det ska finnas en s\u00e5dan komplex entitet d\u00e4r v\u00e5r kluster sammanst\u00e4lls av poddar och StatefulSet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/04f86706f506fa91e365d45537dd9def.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad beh\u00f6ver vi g\u00f6ra f\u00f6r detta? F\u00f6r det f\u00f6rsta kommer Custom Resource Definition in p\u00e5 scenen. Vad \u00e4r det? Det \u00e4r en beskrivning f\u00f6r K8s av att du kommer f\u00e5 ytterligare en datatyp, och att vi vill l\u00e4gga till en anpassad resurs f\u00f6r poddar och StatefulSet, som blir komplex inuti. Det \u00e4r en beskrivning av datastukturen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f02ae12ef3ab5db974234b14e38792ac.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi skickar ocks\u00e5 denna via kubectl apply dit. Kubernetes tar den med gl\u00e4dje. <\/p>\n<p><\/p>\n<p>Och nu har vi i lagringen, hos objektet i etcd, m\u00f6jlighet att registrera den anpassade resursen med namnet ClickHouseInstallation.<\/p>\n<p><\/p>\n<p>Men f\u00f6r nu kommer ingenting att h\u00e4nda. D.v.s. om vi nu skapar en YAML-fil som vi diskuterade med beskrivning av shards, repliker och s\u00e4ger \"kubectl apply\", s\u00e5 kommer Kubernetes att ta emot den, spara den i etcd och s\u00e4ga: \"Bra, men jag vet inte vad jag ska g\u00f6ra med den. Jag vet inte hur man underh\u00e5ller ClickHouseInstallation.\" <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7c2f9f3f81b83c987a3bd72a881d0d91.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00e4rf\u00f6r beh\u00f6ver vi n\u00e5gon som hj\u00e4lper Kubernetes att underh\u00e5lla den nya datatypen. Till v\u00e4nster har vi den inbyggda Kubernetes-controllern som arbetar med inbyggda datatyper. Och till h\u00f6ger b\u00f6r vi f\u00e5 en anpassad controller som kan arbeta med anpassade datatyper. <\/p>\n<p><\/p>\n<p>Och p\u00e5 ett annat s\u00e4tt kallas den operat\u00f6r. Jag har specifikt placerat den utanf\u00f6r Kubernetes, eftersom den kan k\u00f6ras utanf\u00f6r K8s. Oftast k\u00f6rs dock alla operat\u00f6rer i Kubernetes, men ingenting hindrar den fr\u00e5n att st\u00e5 utanf\u00f6r, d\u00e4rf\u00f6r har den placerats externt h\u00e4r. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7aa3a1b67d0def5ba752dff56baeebbf.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och i sin tur interagerar den anpassade controllern, \u00e4ven kallad operat\u00f6r, med Kubernetes via API. Den kan redan interagera med API. Och den vet redan hur man materialiserar en komplex struktur fr\u00e5n en anpassad resurs, som vi vill skapa. Det \u00e4r precis det operat\u00f6ren g\u00f6r. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a5f773ddc3663f24d5379955da9c3037.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hur fungerar operat\u00f6ren? L\u00e5t oss titta p\u00e5 den h\u00f6gra delen f\u00f6r att f\u00f6rst\u00e5 hur den g\u00f6r detta. Vi ska ta reda p\u00e5 hur operat\u00f6ren materialiserar allt detta och hur interaktionen med K8s g\u00e5r till.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/08a8d8dbcb35117a0eb3320589c6ff8d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Operat\u00f6ren \u00e4r ett program. Det \u00e4r h\u00e4ndelsestyrt. Operat\u00f6ren registrerar sig via Kubernetes API f\u00f6r h\u00e4ndelser. I Kubernetes API finns ing\u00e5ngspunkter d\u00e4r man kan registrera sig f\u00f6r h\u00e4ndelser. Och om n\u00e5got f\u00f6r\u00e4ndras i K8s, skickar Kubernetes h\u00e4ndelser till alla som vill, d.v.s. den som har registrerat sig p\u00e5 den h\u00e4r API-punkten f\u00e5r meddelanden.<\/p>\n<p><\/p>\n<p>Operat\u00f6ren registrerar sig f\u00f6r h\u00e4ndelser och m\u00e5ste reagera p\u00e5 dem. Dess uppgift \u00e4r att reagera p\u00e5 uppkommande h\u00e4ndelser. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9f0664a4151e6e7f6f8575a3e54372e9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>H\u00e4ndelser genereras av vissa uppdateringar. V\u00e5r YAML-fil med beskrivningen av ClickHouseInstallation kommer in. Den har g\u00e5tt till etcd genom kubectl apply. D\u00e4r utl\u00f6ste det en h\u00e4ndelse, och denna h\u00e4ndelse kom till ClickHouse-operat\u00f6ren. Operat\u00f6ren fick denna beskrivning. Och den m\u00e5ste g\u00f6ra n\u00e5got. Om en uppdatering av objektet ClickHouseInstallation har kommit, s\u00e5 m\u00e5ste klustret uppdateras. Och operat\u00f6rens uppgift \u00e4r att uppdatera klustret. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/0952bdd391a72aa15bf66af4ce69f4af.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad g\u00f6r han? F\u00f6rst och fr\u00e4mst m\u00e5ste en handlingsplan uppr\u00e4ttas f\u00f6r vad vi ska g\u00f6ra med denna uppdatering. Uppdateringar kan vara mycket sm\u00e5, det vill s\u00e4ga sm\u00e5 i YAML-implementering, men de kan leda till mycket stora f\u00f6r\u00e4ndringar i klustret. D\u00e4rf\u00f6r skapar operat\u00f6ren en plan och f\u00f6ljer den d\u00e4refter.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/79caaa43b6fd9f3e2eb1afe44ecb2df9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Han b\u00f6rjar att enligt denna plan bearbeta denna struktur inuti f\u00f6r att materialisera poddar, tj\u00e4nster, det vill s\u00e4ga g\u00f6ra det som \u00e4r hans huvuduppgift. Det \u00e4r som att bygga ett ClickHouse-kluster i Kubernetes.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e91576a26d6b758a68ae0b35cbe01897.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nu ska vi ta upp en intressant sak. Det \u00e4r delningen av ansvar mellan Kubernetes och operat\u00f6ren, det vill s\u00e4ga vad Kubernetes g\u00f6r, vad operat\u00f6ren g\u00f6r och hur de interagerar med varandra. <\/p>\n<p><\/p>\n<p>Kubernetes ansvarar f\u00f6r systemrelaterade saker, det vill s\u00e4ga f\u00f6r den grundl\u00e4ggande upps\u00e4ttningen objekt som kan tolkas som systemomfattande. Kubernetes vet hur man startar poddar, hur man startar om containrar, hur man monterar volymer, hur man arbetar med ConfigMap, det vill s\u00e4ga allt som kan kallas systemet. <\/p>\n<p><\/p>\n<p>Operat\u00f6rer arbetar inom specifika \u00e4mnesomr\u00e5den. Varje operat\u00f6r \u00e4r specifik f\u00f6r sitt \u00e4mnesomr\u00e5de. Vi har gjort en f\u00f6r ClickHouse.<\/p>\n<p><\/p>\n<p>Och operat\u00f6ren interagerar just i termer av \u00e4mnesomr\u00e5den, s\u00e5som att l\u00e4gga till en replik, skapa ett schema, st\u00e4lla in \u00f6vervakning. Det blir en s\u00e5dan separation.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/9dc07d9c29d5dfd538343aadb751e4c0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss titta p\u00e5 ett praktiskt exempel p\u00e5 hur denna ansvarsdela sker n\u00e4r vi utf\u00f6r \u00e5tg\u00e4rden att l\u00e4gga till en replik. <\/p>\n<p><\/p>\n<p>Operat\u00f6ren f\u00e5r i uppdrag att l\u00e4gga till en replik. Vad g\u00f6r operat\u00f6ren? Operat\u00f6ren ber\u00e4knar att en ny StatefulSet m\u00e5ste skapas, d\u00e4r s\u00e5dana mallar och volymanspr\u00e5k m\u00e5ste beskrivas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/7a31f2f76a3bdda87e4bccf0e04fe4a8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Han har f\u00f6rberett allt detta och vidarebefordrar det till K8s. Han s\u00e4ger att han beh\u00f6ver ConfigMap, StatefulSet, Volym. Kubernetes utf\u00f6r det. Han materialiserar de grundl\u00e4ggande enheter som han arbetar med. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/2be6892234cc12b056962265c13dba07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och sedan kommer ClickHouse-operat\u00f6ren \u00e5terigen in i bilden. Han har redan en fysisk pod d\u00e4r man kan g\u00f6ra n\u00e5got. Och ClickHouse-operat\u00f6ren arbetar \u00e5terigen i termer av \u00e4mnesomr\u00e5den. Det vill s\u00e4ga f\u00f6r ClickHouse, f\u00f6r att aktivera en replik i klustret, m\u00e5ste dataskeman som finns i detta kluster st\u00e4llas in. Och f\u00f6r det andra m\u00e5ste denna replik inkluderas i \u00f6vervakning s\u00e5 att den kan sp\u00e5ras v\u00e4l. Det \u00e4r operat\u00f6ren som st\u00e4ller detta in. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/790616342b98b347fa67e0100754c8b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och f\u00f6rst efter detta kommer sj\u00e4lva ClickHouse i spel, det vill s\u00e4ga ytterligare en mer h\u00f6gst\u00e5ende enhet. Detta \u00e4r redan en databas. Den har sin egen instans, en konfigurerad replika som \u00e4r redo att g\u00e5 in i klustret.<\/p>\n<p><\/p>\n<p>Det blir en l\u00e5ng kedja av utf\u00f6rande och ansvarsf\u00f6rdelning vid till\u00e4gg av en replika.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5ec79cfa2b45fadbe25f4d9fe8d2ec5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi forts\u00e4tter med v\u00e5ra praktiska uppgifter. Om klustret redan finns kan vi genomf\u00f6ra migrering av konfigurering. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/a52aee0d4350b8da00cdb4b525df80ad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi har gjort det s\u00e5 att i den befintliga xml som ClickHouse f\u00f6rst\u00e5r kan vi skicka igenom data.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/91abb1d3b0a14f2118361403a74e14c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det g\u00e5r att g\u00f6ra en finjustering av ClickHouse. Just zonad distribution \u00e4r det jag n\u00e4mnde n\u00e4r jag f\u00f6rklarade hostPath, lokal lagring. Hur man korrekt g\u00f6r zonad distribution.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/fde502f30223e04a918f4fd598c3dd9f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Den n\u00e4sta praktiska uppgiften \u00e4r \u00f6vervakning.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4e685fba7883075105c0164a778c51e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Om v\u00e5rt kluster f\u00f6r\u00e4ndras m\u00e5ste vi periodiskt st\u00e4lla in \u00f6vervakningen. <\/p>\n<p><\/p>\n<p>L\u00e5t oss titta p\u00e5 schemat. Vi har redan diskuterat de gr\u00f6na pilarna. Nu l\u00e5t oss titta p\u00e5 de r\u00f6da pilarna. Det \u00e4r hur vi vill \u00f6vervaka v\u00e5rt kluster. Hur m\u00e4tv\u00e4rden fr\u00e5n ClickHouse-klustret hamnar i Prometheus, och sedan i Grafana.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1210c1423f99d48a20e06e855bf48a72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad \u00e4r sv\u00e5righeten med \u00f6vervakning? Varf\u00f6r framh\u00e5lls det som n\u00e5gon slags prestation? Sv\u00e5righeten ligger just i dynamiken. N\u00e4r vi har ett kluster och det \u00e4r statiskt kan vi en g\u00e5ng st\u00e4lla in \u00f6vervakningen och sedan inte bekymra oss mer.<\/p>\n<p><\/p>\n<p>Men om vi har m\u00e5nga kluster, eller om n\u00e5got st\u00e4ndigt \u00e4ndras, s\u00e5 \u00e4r processen dynamisk. Att st\u00e4ndigt beh\u00f6va omkonfigurera \u00f6vervakningen \u00e4r en sl\u00f6seri med resurser och tid, det vill s\u00e4ga \u00e4ven bara lathet. Detta m\u00e5ste automatiseras. Sv\u00e5righeten ligger just i den dynamiska processen. Och operat\u00f6ren automatiserar detta mycket bra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/48a7264f1228671e0c483c8211a71eb3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hur har v\u00e5rt kluster utvecklats? I b\u00f6rjan s\u00e5g det ut s\u00e5 h\u00e4r.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/8a8c7b6cd5562deb315368e1e8e1c976.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sedan s\u00e5g det ut s\u00e5 h\u00e4r.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/1a3e915fbadf3aa5f3b33d337f36e76e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I slut\u00e4ndan blev det s\u00e5 h\u00e4r. <\/p>\n<p><\/p>\n<p>Och \u00f6vervakningen g\u00f6rs automatiskt av operat\u00f6ren. En enda ing\u00e5ngspunkt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/e079e65bf8deff43a81d8ffde938a709.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Och vi tittar bara p\u00e5 utdata i Grafana-dashboarden, hur livet i v\u00e5rt kluster pulserar inuti. <\/p>\n<p><\/p>\n<p>F\u00f6r \u00f6vrigt sprids ocks\u00e5 Grafana-dashboards med v\u00e5r operat\u00f6r direkt i k\u00e4llkoden. Man kan ansluta och anv\u00e4nda det. Denna sk\u00e4rmdump fick jag av v\u00e5ra DevOps.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/4ad1c2899dd845d0ba4185bdf758468c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vart skulle vi vilja g\u00e5 h\u00e4rifr\u00e5n? Det \u00e4r:<\/p>\n<p><\/p>\n<ul>\n<li>Att utveckla automatisering av testning. Huvuduppgiften \u00e4r automatisk testning av nya versioner. <\/li>\n<li>Vi vill ocks\u00e5 automatisera integrationen med ZooKeeper. Vi planerar att integrera med ZooKeeper-operatorn. Det vill s\u00e4ga, en operator f\u00f6r ZooKeeper har skrivits och det \u00e4r logiskt att de tv\u00e5 operatorerna b\u00f6rjar integrera sig f\u00f6r att bygga en mer bekv\u00e4m l\u00f6sning. <\/li>\n<li>Vi vill g\u00f6ra mer komplexa livscykelkontroller. <\/li>\n<li>Jag har markerat i gr\u00f6nt det som \u00e4r p\u00e5 g\u00e5ng \u2014 arv av mallar \u2013 KLAR, allts\u00e5 i n\u00e4sta version av operatorn kommer vi redan att ha m\u00f6jligheten att arva mallar. Detta \u00e4r ett kraftfullt verktyg som m\u00f6jligg\u00f6r att bygga komplexa konfigurationer fr\u00e5n bitar. <\/li>\n<li>Och vi vill automatisera komplexa uppgifter. Den st\u00f6rsta av dem \u00e4r Re-sharding. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/f232c0aab389be5069e5c7886e265c01.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss g\u00f6ra en mellanliggande sammanfattning. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/62f7814994af0441ba5a82de4e9780d7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vad f\u00e5r vi ut p\u00e5 andra sidan? \u00c4r det v\u00e4rt att syssla med detta eller inte? Borde vi alls f\u00f6rs\u00f6ka dra databasen till Kubernetes och anv\u00e4nda operatorn i allm\u00e4nhet och Alitnity-operatorn i synnerhet?<\/p>\n<p><\/p>\n<p>Resultatet blir:<\/p>\n<p><\/p>\n<ul>\n<li>V\u00e4sentlig f\u00f6renkling och automatisering av konfiguration, distribution samt underh\u00e5ll. <\/li>\n<li>Omedelbart inbyggd \u00f6vervakning. <\/li>\n<li>Och f\u00e4rdiga, kodifierade mallar f\u00f6r komplexa situationer. Redan \u00e5tg\u00e4rder som att l\u00e4gga till en replik beh\u00f6ver inte g\u00f6ras manuellt. Det g\u00f6r operatorn. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/aebccd7a2dc55f14645f79f89f7b7458.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det finns bara en sista fr\u00e5ga kvar. Vi har redan databasen i Kubernetes, virtualisering. Hur \u00e4r det med prestandan hos en s\u00e5dan l\u00f6sning, s\u00e4rskilt med tanke p\u00e5 att ClickHouse \u00e4r optimerad f\u00f6r prestanda?<\/p>\n<p><\/p>\n<p>Svaret \u2013 allt \u00e4r okej! Jag kommer inte att g\u00e5 in p\u00e5 detaljer, det \u00e4r ett \u00e4mne f\u00f6r en separat presentation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/ffc230941f0ae24926186db4d8d68ade.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men det finns ett projekt som heter TSBS. Vad \u00e4r dess huvuduppgift? Det \u00e4r en prestandatest av databaser. Det \u00e4r ett f\u00f6rs\u00f6k att j\u00e4mf\u00f6ra lika med lika. <\/p>\n<p><\/p>\n<p>Hur fungerar det? En upps\u00e4ttning data genereras. Sedan k\u00f6rs denna upps\u00e4ttning data genom samma upps\u00e4ttning tester p\u00e5 olika databaser. Och varje databas l\u00f6ser en uppgift p\u00e5 det s\u00e4tt som den kan. Sedan kan resultaten j\u00e4mf\u00f6ras. <\/p>\n<p><\/p>\n<p>Det st\u00f6der redan m\u00e5nga databaser. Jag har markerat tre huvudsakliga. Det \u00e4r:<\/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=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/5b4733534a4e6e36fb7788127adc6e86.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det har ocks\u00e5 gjorts en j\u00e4mf\u00f6relse med en annan liknande l\u00f6sning. En j\u00e4mf\u00f6relse med RedShift. J\u00e4mf\u00f6relsen gjordes p\u00e5 Amazon. ClickHouse sl\u00e5r ocks\u00e5 alla i denna fr\u00e5ga. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. Vladislav Klimenko (Altinity, 2019)\" src=\"\/wp-content\/uploads\/2020\/10\/44cc8dedc07a02fe1ed5aad3e17a579c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vilka slutsatser kan dras fr\u00e5n det jag har ber\u00e4ttat?<\/p>\n<p><\/p>\n<ul>\n<li>Databaser i Kubernetes \u00e4r m\u00f6jliga. Troligtvis kan man anv\u00e4nda vilken som helst, men \u00f6verlag verkar det som att det \u00e4r m\u00f6jligt. ClickHouse i Kubernetes kan definitivt anv\u00e4ndas av v\u00e5r operat\u00f6r. <\/li>\n<li>Operat\u00f6ren hj\u00e4lper till att automatisera processer och f\u00f6renklar verkligen livet.<\/li>\n<li>Prestandan \u00e4r normal.<\/li>\n<li>Och vi tycker att detta \u00e4r n\u00e5got som b\u00e5de kan och b\u00f6r anv\u00e4ndas. <\/li>\n<\/ul>\n<p><\/p>\n<p>\u00d6ppen k\u00e4llkod \u2013 g\u00e5 med!<\/p>\n<p><\/p>\n<p>Som jag redan n\u00e4mnt, operat\u00f6ren \u00e4r en helt \u00f6ppen k\u00e4llkodsprodukt, s\u00e5 det skulle vara mycket bra om s\u00e5 m\u00e5nga som m\u00f6jligt anv\u00e4nde den. G\u00e5 med! Vi v\u00e4ntar p\u00e5 er alla!<\/p>\n<p><\/p>\n<p>Tack alla!<\/p>\n<p><\/p>\n<p>Fr\u00e5gor<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Operat\u00f6r i Kubernetes f\u00f6r hantering av databaskluster. 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>Tack f\u00f6r presentationen! Jag heter Anton. Jag kommer fr\u00e5n f\u00f6retaget SEMrush. Jag undrar \u00f6ver loggning. Jag har h\u00f6rt om \u00f6vervakning, men inget om loggning n\u00e4r det g\u00e4ller hela klustret. Vi har exempelvis satt upp ett kluster p\u00e5 h\u00e5rdvara. Och vi anv\u00e4nder centraliserad loggning, samlar in med standardverktyg till en gemensam plats. Och sedan h\u00e4mtar vi intressanta data d\u00e4rifr\u00e5n.<\/em> <\/p>\n<p><\/p>\n<p>Bra fr\u00e5ga, det vill s\u00e4ga loggning st\u00e5r p\u00e5 listan \u00f6ver att g\u00f6ra. V\u00e5r operat\u00f6r automatiserar fortfarande inte detta. Den utvecklas fortfarande, projektet \u00e4r relativt ungt. Vi f\u00f6rst\u00e5r behovet av loggning. Det \u00e4r ocks\u00e5 ett mycket viktigt \u00e4mne. Och det \u00e4r nog inte mindre viktigt \u00e4n \u00f6vervakning. Men f\u00f6rst p\u00e5 listan f\u00f6r implementering var \u00f6vervakning. Loggning kommer att ske. Vi f\u00f6rs\u00f6ker naturligtvis automatisera alla aspekter av klusterets livscykel. S\u00e5 svaret \u00e4r att i nul\u00e4get kan operat\u00f6ren tyv\u00e4rr inte detta, men det finns p\u00e5 planerna, vi kommer att g\u00f6ra detta. Om det finns intresse att g\u00e5 med, g\u00f6r g\u00e4rna en pull request.<\/p>\n<p><\/p>\n<p><em>Hej! Tack f\u00f6r presentationen! Jag har en standardfr\u00e5ga som r\u00f6r Persistenta Volymer. N\u00e4r vi skapar en konfiguration med denna operat\u00f6r, hur best\u00e4mmer operat\u00f6ren p\u00e5 vilken nod vi har monterat en viss disk eller mapp? M\u00e5ste vi f\u00f6rklara f\u00f6r den att den ska placera v\u00e5r ClickHouse just p\u00e5 dessa noder d\u00e4r det finns en disk?<\/em><\/p>\n<p><\/p>\n<p>S\u00e5vitt jag f\u00f6rst\u00e5r, denna fr\u00e5ga \u00e4r en forts\u00e4ttning p\u00e5 lokal lagring, s\u00e4rskilt delen som r\u00f6r hostPath. Det handlar om att f\u00f6rklara hela systemet att en pod ska startas p\u00e5 en viss nod, d\u00e4r vi har en fysiskt ansluten disk som \u00e4r monterad p\u00e5 en viss v\u00e4g. Det \u00e4r en hel sektion som jag endast ber\u00f6rt ytligt, f\u00f6r svaret \u00e4r ganska omfattande. <\/p>\n<p><\/p>\n<p>Sammanfattningsvis ser det ut s\u00e5 h\u00e4r. Sj\u00e4lvklart m\u00e5ste vi g\u00f6ra provisioning av dessa volymer. F\u00f6r n\u00e4rvarande finns det ingen dynamisk provisioning i lokal lagring, s\u00e5 DevOps m\u00e5ste sj\u00e4lva partitionera diskarna, allts\u00e5 dessa volymer. Och de m\u00e5ste f\u00f6rklara f\u00f6r Kubernetes provisioning att du kommer att ha Persistent volumes av en viss klass som finns p\u00e5 vissa noder. Sen m\u00e5ste de f\u00f6rklara f\u00f6r Kubernetes att poddar som kr\u00e4ver en viss klass av lokal lagring, m\u00e5ste schemal\u00e4ggas endast p\u00e5 dessa noder. F\u00f6r dessa syften finns det m\u00f6jlighet att tilldela vissa etiketter och en per v\u00e4rdinstans. Och det kommer att resultera i att poddarna kommer att routas av Kubernetes f\u00f6r att bara k\u00f6ras p\u00e5 noder som uppfyller kraven, etiketter, f\u00f6r att uttrycka det enkelt. Administrat\u00f6rerna tilldelar etiketter, g\u00f6r provisioning av diskarna manuellt. Och d\u00e5 g\u00e5r det att skala.<\/p>\n<p><\/p>\n<p>Och just den tredje varianten av lokal lagring hj\u00e4lper att f\u00f6renkla detta n\u00e5got. Som jag redan har betonat, \u00e4r det ett noggrant arbete med inst\u00e4llningar som i slut\u00e4nden hj\u00e4lper att f\u00e5 ut maximal prestanda.<\/p>\n<p><\/p>\n<p><em>Jag har en andra fr\u00e5ga som \u00e4r relaterad till detta. Kubernetes \u00e4r utformad s\u00e5 att vi inte ska bry oss om vi f\u00f6rlorar en nod eller inte. Vad ska vi g\u00f6ra i det h\u00e4r fallet om vi har f\u00f6rlorat noden d\u00e4r v\u00e5r shard finns?<\/em><\/p>\n<p><\/p>\n<p>Ja, Kubernetes positionerade sig fr\u00e5n b\u00f6rjan s\u00e5 att v\u00e5r relation till v\u00e5ra poddar \u00e4r som boskap, men h\u00e4r blir varje disk n\u00e5got som liknar ett husdjur. Det finns ett problem med att vi inte kan sl\u00e4nga dem hur som helst. Och utvecklingen av Kubernetes g\u00e5r i en riktning d\u00e4r vi inte kan helt hantera detta filosofiskt som helt f\u00f6rbrukningsbara resurser.<\/p>\n<p><\/p>\n<p>Nu till den praktiska fr\u00e5gan. Vad ska man g\u00f6ra om en nod som hade disken f\u00f6rsvann? H\u00e4r l\u00f6ser man problemet p\u00e5 en h\u00f6gre niv\u00e5. I fallet med ClickHouse har vi replikat som arbetar p\u00e5 en h\u00f6gre niv\u00e5, allts\u00e5 p\u00e5 ClickHouse-niv\u00e5.<\/p>\n<p><\/p>\n<p>Vad blir dispositionen? DevOps ansvarar f\u00f6r att inga data g\u00e5r f\u00f6rlorade. De m\u00e5ste korrekt st\u00e4lla in replikeringen och f\u00f6lja upp s\u00e5 att replikeringen utf\u00f6rs. I replikatet p\u00e5 ClickHouse-niv\u00e5 m\u00e5ste data duplikeras. Det h\u00e4r \u00e4r inte en uppgift som operat\u00f6ren l\u00f6ser. Och det \u00e4r inte en uppgift som Kubernetes l\u00f6ser. Det ligger p\u00e5 ClickHouse-niv\u00e5.<\/p>\n<p><\/p>\n<p>Vad ska man g\u00f6ra om ni har en fysisk nod som har fallit bort? S\u00e5 det blir n\u00f6dv\u00e4ndigt att s\u00e4tta upp en ny, korrekt provisionera en disk p\u00e5 den, applicera labels. Och efter det kommer den att uppfylla kraven s\u00e5 att Kubernetes kan starta en instans av podden p\u00e5 den. Kubernetes kommer att starta den. Ni har ju inte tillr\u00e4ckligt med pods enligt det angivna antalet. Den kommer att g\u00e5 igenom cykeln som jag visade. Och p\u00e5 den \u00f6versta niv\u00e5n kommer ClickHouse att f\u00f6rst\u00e5 att en replika har kommit in, den \u00e4r fortfarande tom och vi m\u00e5ste b\u00f6rja \u00f6verf\u00f6ra data till den. D.v.s. den h\u00e4r processen \u00e4r fortfarande d\u00e5ligt automatiserad. <\/p>\n<p><\/p>\n<p><em>Tack f\u00f6r presentationen! N\u00e4r det sker olika problem, faller operat\u00f6ren och startar om, och under den tiden kommer det in h\u00e4ndelser, hanterar ni detta p\u00e5 n\u00e5got s\u00e4tt?<\/em><\/p>\n<p><\/p>\n<p>Vad h\u00e4nder om operat\u00f6ren har fallit och startat om, eller hur? <\/p>\n<p><\/p>\n<p><em>Ja. Och under den tiden kom h\u00e4ndelser.<\/em> <\/p>\n<p><\/p>\n<p>Uppgiften om vad man ska g\u00f6ra i det h\u00e4r fallet delas delvis mellan operat\u00f6ren och Kubernetes. Kubernetes har m\u00f6jlighet att \u00e5terspela den intr\u00e4ffade h\u00e4ndelsen. Den \u00e5terspelar. Och operat\u00f6rens uppgift \u00e4r att se till att n\u00e4r han f\u00e5r en replay av h\u00e4ndelselogg, s\u00e5 \u00e4r dessa h\u00e4ndelser idempotenta. S\u00e5 att en upprepning av samma h\u00e4ndelse inte bryter v\u00e5r system. Och v\u00e5r operat\u00f6r klarar av den uppgiften. <\/p>\n<p><\/p>\n<p><em>Hej! Tack f\u00f6r presentationen! Dmitry Zavyalov, f\u00f6retaget<\/em> <em>Smedova. Planeras det att l\u00e4gga till m\u00f6jlighet att konfigurera operat\u00f6ren med haproxy? Det skulle vara intressant med n\u00e5gon annan lastbalanserare \u00e4n den standardm\u00e4ssiga, som \u00e4r smart och f\u00f6rst\u00e5r att det verkligen handlar om ClickHouse.<\/em> <\/p>\n<p><\/p>\n<p>Pratar ni om Ingress?<\/p>\n<p><\/p>\n<p><em>Ja, ers\u00e4tt Ingress med haproxy. I haproxy kan man ange klustrets topologi, d\u00e4r den har repliker.<\/em><\/p>\n<p><\/p>\n<p>Vi har \u00e4nnu inte t\u00e4nkt p\u00e5 det. Om ni beh\u00f6ver det och kan f\u00f6rklara varf\u00f6r det beh\u00f6vs, s\u00e5 kan det genomf\u00f6ras, speciellt om ni vill delta. Vi kommer g\u00e4rna att \u00f6verv\u00e4ga alternativet. Kort svar \u2013 nej, vi har f\u00f6r n\u00e4rvarande inte den funktionen. Tack f\u00f6r tipset, vi kommer att titta p\u00e5 det. Om ni ocks\u00e5 kan f\u00f6rklara use case och varf\u00f6r det beh\u00f6vs i praktiken, till exempel, om ni skapar issues p\u00e5 GitHub, s\u00e5 vore det fantastiskt.<\/p>\n<p><\/p>\n<p><em>Det finns redan.<\/em><\/p>\n<p><\/p>\n<p>Bra. Vi \u00e4r \u00f6ppna f\u00f6r alla f\u00f6rslag. Och haproxy s\u00e4tts p\u00e5 to-do-listan. To-do-listan v\u00e4xer och minskar inte f\u00f6r tillf\u00e4llet. Men det \u00e4r bra, det betyder att produkten \u00e4r efterfr\u00e5gad.<\/p>\n<p>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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\udd47Operat\u00f6r i Kubernetes f\u00f6r att hantera databaskluster. Vladislav Klimenko (Altinity, 2019) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/96965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=96965"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/96965\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/96966"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=96965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=96965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=96965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}