{"id":71858,"date":"2020-02-28T21:00:08","date_gmt":"2020-02-28T18:00:08","guid":{"rendered":"https:\/\/prohoster.info\/blog\/patterny-hraneniya-dannyh-v-kubernetes"},"modified":"2020-03-03T16:14:09","modified_gmt":"2020-03-03T13:14:09","slug":"patterny-hraneniya-dannyh-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","title":{"rendered":"Vzory ukladania d\u00e1t v Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/490180\/\"><img decoding=\"async\" alt=\"Vzory ukladania d\u00e1t v Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/148744e73101d47e7a5a76bdd3bb57e1.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nAhoj, Habr!<\/p>\n<p>Pripom\u00edname, \u017ee sme vydali \u010fal\u0161iu mimoriadne zauj\u00edmav\u00fa a u\u017eito\u010dn\u00fa <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/patterny-kubernetes-shablony-razrabotki-sobstvennyh-oblachnyh-prilozheniy\">knihu<\/a><\/noindex> o vzoroch Kubernetes. V\u0161etko sa za\u010dalo s \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/all\/product\/raspredelennye-sistemy-patterny-proektirovaniya\">Vzorov<\/a><\/noindex>\" Brendanom Burnsom, a inak, pr\u00e1ca v tomto segmente u n\u00e1s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/kubernetes-dlya-devops-razvertyvanie-zapusk-i-masshtabirovanie-v-oblake\">vrie<\/a><\/noindex>. Dnes v\u00e1m pon\u00fakame pre\u010d\u00edta\u0165 si \u010dl\u00e1nok z blogu MinIO, ktor\u00fd stru\u010dne zobrazuje trendy a \u0161pecifik\u00e1 vzorov ukladania \u00fadajov v Kubernetes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Kubernetes z\u00e1sadne zmenil tradi\u010dn\u00e9 vzory v\u00fdvoja a nasadzovania aplik\u00e1ci\u00ed. Teraz m\u00f4\u017ee t\u00edm str\u00e1vi\u0165 len nieko\u013eko dn\u00ed na v\u00fdvoji, testovan\u00ed a nasaden\u00ed aplik\u00e1cie \u2013 v r\u00f4znych prostrediach, a to v\u0161etko v r\u00e1mci klastrov Kubernetes. Tak\u00e1to pr\u00e1ca s technol\u00f3giami predch\u00e1dzaj\u00facich gener\u00e1ci\u00ed oby\u010dajne trvala cel\u00e9 t\u00fd\u017edne, ak nie mesiace.<\/p>\n<p>Toto zr\u00fdchlenie sa stalo mo\u017en\u00fdm v\u010faka abstrakcii, ktor\u00fa Kubernetes poskytuje \u2013 to znamen\u00e1, \u017ee Kubernetes s\u00e1m uskuto\u010d\u0148uje interakciu s n\u00edzkovrstvov\u00fdmi detailmi fyzick\u00fdch alebo virtu\u00e1lnych strojov, pri\u010dom u\u017e\u00edvate\u013eom umo\u017e\u0148uje vyhlasova\u0165 medzi in\u00fdmi parametrami potrebn\u00fd procesor, potrebn\u00fd objem pam\u00e4te a po\u010det in\u0161tanci\u00ed kontajnerov. Ke\u010f\u017ee podporou Kubernetes je zaanga\u017eovan\u00e9 obrovsk\u00e9 spolo\u010denstvo a rozsah nasadenia Kubernetes sa neust\u00e1le roz\u0161iruje, s ve\u013ek\u00fdm odstupom vedie medzi v\u0161etk\u00fdmi platformami orchestr\u00e1cie kontajnerov.<\/p>\n<p><i><b>S rast\u00facim vyu\u017eit\u00edm Kubernetes sa zvy\u0161uje aj zm\u00e4tok oh\u013eadom vzorov ukladania \u00fadajov, ktor\u00e9 v \u0148om pou\u017e\u00edvaj\u00fa.<\/b><\/i>.<\/p>\n<p>Pri v\u0161eobecnej konkurencii o k\u00fasok kol\u00e1\u010da Kubernetes (teda o \u00falo\u017eisko \u00fadajov), ke\u010f sa hovor\u00ed o ulo\u017een\u00ed \u00fadajov, jej sign\u00e1l sa str\u00e1ca v silnom \u0161ume.<br \/>\nKubernetes zosob\u0148uje modern\u00fd model v\u00fdvoja a nasadzovania aplik\u00e1ci\u00ed, ako aj ich spr\u00e1vy. Tento modern\u00fd model oddeluje ukladanie \u00fadajov od v\u00fdpo\u010dtov. Aby ste plne pochopili tak\u00e9to oddelenie v kontexte Kubernetes, mus\u00edte tie\u017e pochopi\u0165, \u010do s\u00fa aplik\u00e1cie s uchovan\u00edm stavu a bez uchovania stavu a ako to s\u00favis\u00ed s ukladan\u00edm \u00fadajov. Tu m\u00e1 pr\u00edstup REST API, ktor\u00fd sa pou\u017e\u00edva v S3, zjavn\u00e9 v\u00fdhody v porovnan\u00ed s pr\u00edstupom POSIX\/CSI, charakteristick\u00fdm pre in\u00e9 rie\u0161enia.<\/p>\n<p>V tomto \u010dl\u00e1nku sa budeme rozpr\u00e1va\u0165 o vzoroch ukladania \u00fadajov v Kubernetes a osobitne sa dotkneme debaty o aplik\u00e1ci\u00e1ch funguj\u00facich s ukladan\u00edm a bez ukladania stavu, aby sme porozumeli, ak\u00fd je medzi nimi rozdiel a pre\u010do je to d\u00f4le\u017eit\u00e9. \u010ealej v texte bud\u00fa presk\u00faman\u00e9 aplik\u00e1cie a pou\u017eit\u00e9 vzory ukladania \u00fadajov v svetle osved\u010den\u00fdch prakt\u00edk pr\u00e1ce s kontajnermi a Kubernetes.<\/p>\n<h4>Kontajnery bez ukladania stavu<\/h4>\n<p>\nKontajnery s\u00fa zo svojej podstaty \u013eahk\u00e9 a efem\u00e9rne. Mo\u017eno ich bez probl\u00e9mov zastavova\u0165, maza\u0165 alebo nasadzova\u0165 na in\u00fd uzol \u2013 v\u0161etko to trv\u00e1 len nieko\u013eko sek\u00fand. V ve\u013ekom syst\u00e9me orchestr\u00e1cie kontajnerov sa tak\u00e9to oper\u00e1cie dej\u00fa neust\u00e1le a pou\u017e\u00edvatelia si ani nev\u0161imn\u00fa tak\u00e9to zmeny. Av\u0161ak presuny s\u00fa mo\u017en\u00e9 iba vtedy, ak kontajner nem\u00e1 \u017eiadne z\u00e1vislosti od uzla, na ktorom sa nach\u00e1dza. O tak\u00fdch kontajneroch hovor\u00edme, \u017ee funguj\u00fa <i>bez ukladania stavu<\/i>.<\/p>\n<h4>Kontajnery s ukladan\u00edm stavu<\/h4>\n<p>\nAk kontajner uchov\u00e1va \u00fadaje na lok\u00e1lne pripojen\u00fdch zariadeniach (alebo na blokovom zariaden\u00ed), potom sa \u00falo\u017eisko \u00fadajov, na ktorom sa nach\u00e1dza, mus\u00ed presun\u00fa\u0165 na nov\u00fd uzol spolu s kontajnerom \u2013 v pr\u00edpade zlyhania. Je to d\u00f4le\u017eit\u00e9, preto\u017ee inak aplik\u00e1cia be\u017eiaca v kontajneri nebude schopn\u00e1 spr\u00e1vne fungova\u0165, ke\u010f\u017ee potrebuje pristupova\u0165 k \u00fadajom ulo\u017een\u00fdm na miestnych m\u00e9di\u00e1ch. O tak\u00fdch kontajneroch hovor\u00edme, \u017ee funguj\u00fa <i>s ukladan\u00edm stavu<\/i>.<\/p>\n<p>Z \u010disto technick\u00e9ho h\u013eadiska je mo\u017en\u00e9 kontajnery s ukladan\u00edm stavu tie\u017e pres\u00fava\u0165 na in\u00e9 uzly. Obvykle to zabezpe\u010duje pomocou distribuovan\u00fdch s\u00faborov\u00fdch syst\u00e9mov alebo blokov\u00fdch sie\u0165ov\u00fdch \u00falo\u017e\u00edsk pripojen\u00fdch ku v\u0161etk\u00fdm uzlom, na ktor\u00fdch pracuj\u00fa kontajnery. T\u00fdmto sp\u00f4sobom kontajnery z\u00edskavaj\u00fa pr\u00edstup k objemom pre trval\u00e9 ukladanie \u00fadajov a inform\u00e1cie s\u00fa ulo\u017een\u00e9 na diskoch nach\u00e1dzaj\u00facich sa po celej sieti. Tento pr\u00edstup nazvem \u201e<i>kontajnerov\u00fdm pr\u00edstupom s ukladan\u00edm stavu<\/i>\u201c, a v zost\u00e1vaj\u00facej \u010dasti \u010dl\u00e1nku ho tak budem naz\u00fdva\u0165 pre zachovanie jednotnosti.<\/p>\n<p><img decoding=\"async\" alt=\"Vzory ukladania d\u00e1t v Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/a5546db15801389d58476f50c8c66803.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPri typickom pr\u00edstupe k softv\u00e9rov\u00fdm kontajnerom s udr\u017eiavan\u00edm stavu s\u00fa v\u0161etky pod aplik\u00e1ci\u00ed pripojen\u00e9 k jednej distribuovanej s\u00faborovej s\u00fastave \u2013 ide v podstate o ak\u00fasi zdie\u013ean\u00fa pam\u00e4\u0165, kde sa nach\u00e1dzaj\u00fa v\u0161etky d\u00e1ta aplik\u00e1ci\u00ed. Hoci s\u00fa mo\u017en\u00e9 niektor\u00e9 vari\u00e1cie, toto je vysokon\u00e1vrhov\u00fd pr\u00edstup.<\/p>\n<p>Teraz sa pozrime, pre\u010do je pr\u00edstup k softv\u00e9rov\u00fdm kontajnerom s udr\u017eiavan\u00edm stavu v prostred\u00ed orientovanom na cloud antipatrom.<\/p>\n<h4>Cloudovo orientovan\u00e9 navrhovanie aplik\u00e1ci\u00ed<\/h4>\n<p>\nTradi\u010dne aplik\u00e1cie pou\u017e\u00edvali datab\u00e1zy na \u0161trukt\u00farovan\u00e9 ukladanie inform\u00e1ci\u00ed a lok\u00e1lne disky alebo distribuovan\u00e9 s\u00faborov\u00e9 syst\u00e9my, kam sa ukladali v\u0161etky ne\u0161trukt\u00farovan\u00e9 alebo dokonca polo\u0161trukt\u00farovan\u00e9 d\u00e1ta. S narastaj\u00facim objemom ne\u0161trukt\u00farovan\u00fdch d\u00e1t si v\u00fdvoj\u00e1ri uvedomili, \u017ee POSIX je pr\u00edli\u0161 \"rozpr\u00e1van\u00fd\", spojen\u00fd so zna\u010dn\u00fdmi n\u00e1kladmi a nakoniec br\u00e1ni \u010dinnosti aplik\u00e1cie pri prechode na naozaj ve\u013ek\u00e9 objemy.<\/p>\n<p>To v podstate viedlo k vzniku nov\u00e9ho \u0161tandardu ukladania d\u00e1t, t. j. cloudovo orientovan\u00fdch \u00falo\u017e\u00edsk, ktor\u00e9 pracuj\u00fa preva\u017ene na z\u00e1klade REST API a oslobodzuj\u00fa aplik\u00e1ciu od za\u0165a\u017eovania \u00fadr\u017ebou lok\u00e1lneho ukladania d\u00e1t. V takom pr\u00edpade aplik\u00e1cia vlastne prech\u00e1dza do re\u017eimu bez udr\u017eiavania stavu (ke\u010f\u017ee stav sa nach\u00e1dza v vzdialenom \u00falo\u017eisku). Modern\u00e9 aplik\u00e1cie s\u00fa vybudovan\u00e9 od nuly u\u017e s oh\u013eadom na tento faktor. Zvy\u010dajne je ak\u00e1ko\u013evek modern\u00e1 aplik\u00e1cia, ktor\u00e1 sprac\u00fava d\u00e1ta r\u00f4zneho druhu (logy, metad\u00e1ta, blob-y a pod.) postaven\u00e1 na cloudovo orientovanej paradigme, kde sa stav pres\u00fava do \u0161peci\u00e1lne ur\u010denej softv\u00e9rovej syst\u00e9my na jeho ulo\u017eenie. <\/p>\n<p><i><b>Pr\u00edstup k softv\u00e9rov\u00fdm kontajnerom s udr\u017eiavan\u00edm stavu n\u00fati cel\u00fa t\u00fato paradigmu vr\u00e1ti\u0165 sa presne tam, odkia\u013e za\u010d\u00ednala! <\/b><\/i><\/p>\n<p>Pri pou\u017e\u00edvan\u00ed rozhran\u00ed POSIX na ukladanie \u00fadajov aplik\u00e1cie funguj\u00fa rovnako, ako keby uchov\u00e1vali stav, a z tohto d\u00f4vodu sa odchyluj\u00fa od najd\u00f4le\u017eitej\u0161\u00edch postul\u00e1tov cloudov\u00e9ho dizajnu, t.j. od mo\u017enosti variabilne upravova\u0165 ve\u013ekosti pracovn\u00fdch tokov aplik\u00e1cie v z\u00e1vislosti od prich\u00e1dzaj\u00facej z\u00e1\u0165a\u017ee, presun\u00fa\u0165 sa na nov\u00fd uzol, hne\u010f ako aktu\u00e1lny uzol zlyh\u00e1, a podobne.<\/p>\n<p>Ke\u010f sa na t\u00fato situ\u00e1ciu pozrieme bli\u017e\u0161ie, zis\u0165ujeme, \u017ee pri v\u00fdbere \u00falo\u017eiska \u00fadajov sa op\u00e4\u0165 a op\u00e4\u0165 stret\u00e1vame s dilemou \u201ePOSIX vs. REST API\u201c, ALE so sp\u00f4soben\u00fdm zhor\u0161en\u00edm probl\u00e9mov POSIX, ktor\u00e9 vypl\u00fdva zo distribuovanej povahy prostred\u00ed Kubernetes. Konkr\u00e9tne,<\/p>\n<ul>\n<li><b>POSIX je rozvl\u00e1\u010dny.<\/b>: Semantika POSIX si vy\u017eaduje asoci\u00e1ciu s ka\u017edou oper\u00e1ciou metad\u00e1t a deskriptorov s\u00faborov, ktor\u00e9 pom\u00e1haj\u00fa udr\u017eiava\u0165 stav oper\u00e1cie. To vedie k v\u00fdznamn\u00fdm n\u00e1kladom, ktor\u00e9 nemaj\u00fa \u017eiadnu skuto\u010dn\u00fa hodnotu. API na ukladanie objektov, konkr\u00e9tne S3 API, sa t\u00fdchto po\u017eiadaviek zbavili, \u010do umo\u017e\u0148uje aplik\u00e1cii pracova\u0165 a potom \u201ezabudn\u00fa\u0165\u201c na toto volanie. Odpove\u010f syst\u00e9mu ukladania \u00fadajov ukazuje, \u010di bola t\u00e1to akcia \u00faspe\u0161ne vykonan\u00e1 alebo nie. V pr\u00edpade zlyhania m\u00f4\u017ee aplik\u00e1cia vykona\u0165 op\u00e4tovn\u00fd pokus.<\/li>\n<li><b>Sie\u0165ov\u00e9 obmedzenia<\/b>: V distribuovanom syst\u00e9me sa predpoklad\u00e1, \u017ee m\u00f4\u017ee existova\u0165 mno\u017estvo aplik\u00e1ci\u00ed, ktor\u00e9 sa sna\u017eia zapisova\u0165 \u00fadaje na rovnak\u00e9 pripojen\u00e9 zariadenie. Preto nie je len to, \u017ee aplik\u00e1cie bud\u00fa s\u00fa\u0165a\u017ei\u0165 medzi sebou o \u0161\u00edrku p\u00e1sma (aby poslali \u00fadaje na zariadenie), samotn\u00fd syst\u00e9m ukladania \u00fadajov bude s\u00fa\u0165a\u017ei\u0165 o t\u00fato \u0161\u00edrku p\u00e1sma, rozosielaj\u00fac \u00fadaje po fyzick\u00fdch diskoch. V d\u00f4sledku rozvl\u00e1\u010dnosti POSIX sa po\u010det sie\u0165ov\u00fdch volan\u00ed n\u00e1sobne zvy\u0161uje. Na druhej strane, S3 API zabezpe\u010duje jasn\u00e9 rozdelenie sie\u0165ov\u00fdch volan\u00ed medzi t\u00fdmi, ktor\u00e9 prich\u00e1dzaj\u00fa od klienta na server a t\u00fdmi, ktor\u00e9 sa dej\u00fa v r\u00e1mci servera.<\/li>\n<li><b>Bezpe\u010dnos\u0165<\/b>: Model zabezpe\u010denia POSIX si vy\u017eaduje akt\u00edvnu \u00fa\u010das\u0165 \u010dloveka: administr\u00e1tori konfiguruj\u00fa konkr\u00e9tne \u00farovne pr\u00edstupu pre ka\u017ed\u00e9ho pou\u017e\u00edvate\u013ea alebo skupinu. T\u00e1to paradigma sa \u0165a\u017eko prisp\u00f4sobuje svetu orientovan\u00e9mu na cloud. Modern\u00e9 aplik\u00e1cie z\u00e1visia od modelov zabezpe\u010denia, ktor\u00e9 s\u00fa viazan\u00e9 na API, kde sa pr\u00e1va na pr\u00edstup ur\u010duj\u00fa ako s\u00fabor polit\u00edk, vy\u010dle\u0148uj\u00fa sa servisn\u00e9 \u00fa\u010dty, do\u010dasn\u00e9 prihlasovacie \u00fadaje at\u010f.<\/li>\n<li><b>Spravovate\u013enos\u0165<\/b>: Kontajnery s pretrv\u00e1vaj\u00facim stavom prin\u00e1\u0161aj\u00fa ur\u010dit\u00e9 n\u00e1klady spojen\u00e9 s mana\u017ementom. Ide o synchroniz\u00e1ciu paraleln\u00e9ho pr\u00edstupu k d\u00e1tam, zabezpe\u010denie konzistencie d\u00e1t; to v\u0161etko si vy\u017eaduje starostliv\u00e9 zv\u00e1\u017eenie, ak\u00e9 vzorce pr\u00edstupu k d\u00e1tam pou\u017ei\u0165. Je potrebn\u00e9 in\u0161talova\u0165, kontrolova\u0165 a konfigurova\u0165 \u010fal\u0161ie programy, nehovoriac o dodato\u010dn\u00fdch n\u00e1kladoch na v\u00fdvoj.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Kontajnerov\u00e9 rozhranie \u00falo\u017eiska d\u00e1t<\/h4>\n<p>\nZatia\u013e \u010do rozhranie kontajnerov\u00e9ho \u00falo\u017eiska d\u00e1t (CSI) v\u00fdrazne pomohlo s roz\u0161\u00edren\u00edm \u00farovne zv\u00e4zkov Kubernetes, \u010diasto\u010dne ho prenieslo na extern\u00fdch poskytovate\u013eov \u00falo\u017eiska, ale n\u00e1hodne prispelo aj k presved\u010deniu, \u017ee kontajnerov\u00fd pr\u00edstup s pretrv\u00e1vaj\u00facim stavom je odpor\u00fa\u010danou met\u00f3dou ukladania d\u00e1t v Kubernetes.<\/p>\n<p>CSI bol navrhnut\u00fd ako \u0161tandard poskytovania \u013eubovo\u013en\u00fdch syst\u00e9mov blokov\u00e9ho a s\u00faborov\u00e9ho \u00falo\u017eiska pre dedi\u010dn\u00e9 aplik\u00e1cie pri pr\u00e1ci s Kubernetes. A ako bolo preuk\u00e1zan\u00e9 v tomto \u010dl\u00e1nku, jedin\u00e1 situ\u00e1cia, v ktorej je od\u00f4vodnen\u00e9 kontajnerov\u00e9 rie\u0161enie s pretrv\u00e1vaj\u00facim stavom (a CSI v jeho s\u00fa\u010dasnej forme) \u2013 je, ke\u010f je sama aplik\u00e1cia dedi\u010dn\u00fdm syst\u00e9mom, v ktorom nie je mo\u017en\u00e9 prida\u0165 podporu API objektov\u00e9ho \u00falo\u017eiska d\u00e1t.<\/p>\n<p>Je d\u00f4le\u017eit\u00e9 pochopi\u0165, \u017ee pri pou\u017e\u00edvan\u00ed CSI v jeho s\u00fa\u010dasnej forme, to znamen\u00e1 pripojen\u00edm zv\u00e4zkov pre modern\u00e9 aplik\u00e1cie, sa stretneme s pribli\u017ene rovnak\u00fdmi probl\u00e9mami, ak\u00e9 sa objavili v syst\u00e9moch, kde je ukladanie \u00fadajov organizovan\u00e9 pod\u013ea \u0161t\u00fdlu POSIX.<\/p>\n<h4>Kvalitnej\u0161\u00ed pr\u00edstup<\/h4>\n<p>\nV tomto pr\u00edpade je d\u00f4le\u017eit\u00e9 ch\u00e1pa\u0165, \u017ee v\u00e4\u010d\u0161ina aplik\u00e1ci\u00ed v podstate nie je optimalizovan\u00e1 na pr\u00e1cu so stavom alebo bez neho. Toto spr\u00e1vanie z\u00e1vis\u00ed od celkovej architekt\u00fary syst\u00e9mu a od konkr\u00e9tnych variantov zvolen\u00fdch pri n\u00e1vrhu. Povedzme si nie\u010do o aplik\u00e1ci\u00e1ch, ktor\u00e9 uchov\u00e1vaj\u00fa stav.<\/p>\n<p>V z\u00e1sade je mo\u017en\u00e9 sa v\u0161etky d\u00e1ta aplik\u00e1ci\u00ed rozde\u013eova\u0165 do nieko\u013ek\u00fdch \u0161irok\u00fdch typov:<\/p>\n<ul>\n<li>Logov\u00e9 d\u00e1ta<\/li>\n<li>D\u00e1ta \u010dasov\u00fdch pe\u010diatok<\/li>\n<li>Transak\u010dn\u00e9 d\u00e1ta<\/li>\n<li>Metad\u00e1ta<\/li>\n<li>Obrazy kontajnerov<\/li>\n<li>Blobov\u00e9 d\u00e1ta (ve\u013ek\u00e9 bin\u00e1rne objekty)<\/li>\n<\/ul>\n<p>\nV\u0161etky tieto typy d\u00e1t s\u00fa ve\u013emi dobre podporovan\u00e9 na modern\u00fdch platform\u00e1ch ukladania d\u00e1t a existuje nieko\u013eko cloudovo orientovan\u00fdch platforiem, ktor\u00e9 s\u00fa prisp\u00f4soben\u00e9 na dod\u00e1vanie d\u00e1t v ka\u017edom z t\u00fdchto konkr\u00e9tnych form\u00e1tov. Napr\u00edklad transak\u010dn\u00e9 d\u00e1ta a metad\u00e1ta m\u00f4\u017eu by\u0165 v modernej cloudovo orientovanej datab\u00e1ze, ako je CockroachDB, YugaByte at\u010f. Obrazy kontajnerov alebo blobov\u00e9 d\u00e1ta m\u00f4\u017eu by\u0165 ulo\u017een\u00e9 v docker registry zalo\u017eenom na MinIO. D\u00e1ta \u010dasov\u00fdch pe\u010diatok m\u00f4\u017eu by\u0165 ulo\u017een\u00e9 v datab\u00e1ze \u010dasov\u00fdch radov, napr\u00edklad InfluxDB at\u010f. Nebudeme sa tu zaobera\u0165 detailami ka\u017ed\u00e9ho typu d\u00e1t a pr\u00edslu\u0161n\u00fdch aplik\u00e1ci\u00ed, ale v\u0161eobecn\u00e1 my\u0161lienka je vyhn\u00fa\u0165 sa trval\u00e9mu ulo\u017eeniu d\u00e1t na b\u00e1ze lok\u00e1lneho montovania diskov.<\/p>\n<p><img decoding=\"async\" alt=\"Vzory ukladania d\u00e1t v Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8e39996ef159f09915802549d4e8ecd5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOkrem toho sa \u010dasto ukazuje, \u017ee je efekt\u00edvne poskytn\u00fa\u0165 \u00farove\u0148 do\u010dasn\u00e9ho cachovania, ktor\u00e1 sl\u00fa\u017ei aplik\u00e1ci\u00e1m ako ak\u00e9si \u00falo\u017eisko do\u010dasn\u00fdch s\u00faborov, av\u0161ak aplik\u00e1cie by na t\u00fato \u00farove\u0148 nemali spol\u00edha\u0165 ako na zdroj pravdy.<\/p>\n<h4>\u00dalo\u017eisko pre aplik\u00e1cie so stavom<\/h4>\n<p>\nZatia\u013e \u010do v v\u00e4\u010d\u0161ine pr\u00edpadov je u\u017eito\u010dn\u00e9 udr\u017eiava\u0165 aplik\u00e1cie bez stavu, aplik\u00e1cie ur\u010den\u00e9 na uchov\u00e1vanie d\u00e1t - ako s\u00fa datab\u00e1zy, objektov\u00e9 \u00falo\u017eisk\u00e1, \u00falo\u017eisk\u00e1 k\u013e\u00fa\u010dov a hodn\u00f4t - by mali uchov\u00e1va\u0165 stav. Po\u010fme sa pozrie\u0165 na to, pre\u010do sa tieto aplik\u00e1cie nasadzuj\u00fa na Kubernetes. Ako pr\u00edklad vezmeme MinIO, av\u0161ak podobn\u00e9 princ\u00edpy s\u00fa pou\u017eite\u013en\u00e9 aj na in\u00e9 ve\u013ek\u00e9 cloudovo orientovan\u00e9 syst\u00e9my ukladania d\u00e1t.<\/p>\n<p>Aplik\u00e1cie orientovan\u00e9 na cloud s\u00fa navrhnut\u00e9 tak, aby maxim\u00e1lne vyu\u017e\u00edvali flexibilitu, ktor\u00e1 je vlastn\u00e1 kontajnerom. To znamen\u00e1, \u017ee nerobia \u017eiadne predpoklady o prostred\u00ed, v ktorom bud\u00fa nasaden\u00e9. Napr\u00edklad MinIO vyu\u017e\u00edva intern\u00fd mechanizmus roz\u0161\u00edren\u00e9ho k\u00f3dovania (erasure coding), ktor\u00fd zabezpe\u010duje dostato\u010dn\u00fa odolnos\u0165 syst\u00e9mu, aby zostal funk\u010dn\u00fd aj pri zlyhan\u00ed polovice diskov. MinIO tie\u017e spravuje integritu a bezpe\u010dnos\u0165 d\u00e1t pou\u017eit\u00edm vlastn\u00e9ho hashovania a \u0161ifrovania na serverovej strane.<\/p>\n<p>Pre tak\u00e9to aplik\u00e1cie orientovan\u00e9 na cloud s\u00fa lok\u00e1lne perzistentn\u00e9 objemy (PV) najvhodnej\u0161\u00edm rie\u0161en\u00edm pre z\u00e1lo\u017en\u00e9 \u00falo\u017eisko. Lok\u00e1lne PV umo\u017e\u0148uje ukladanie surov\u00fdch d\u00e1t, pri\u010dom aplik\u00e1cie be\u017eiace na t\u00fdchto PV samostatne zhroma\u017e\u010fuj\u00fa inform\u00e1cie, ktor\u00e9 umo\u017e\u0148uj\u00fa \u0161k\u00e1lovanie d\u00e1t a spr\u00e1vu rast\u00facich po\u017eiadaviek na d\u00e1ta.<\/p>\n<p>Tento pr\u00edstup je omnoho jednoduch\u0161\u00ed a ove\u013ea lep\u0161ie sa \u0161k\u00e1luje v porovnan\u00ed s PV na b\u00e1ze CSI, ktor\u00e9 do syst\u00e9mu zav\u00e1dzaj\u00fa vlastn\u00e9 \u00farovne spr\u00e1vy d\u00e1t a redundancie; probl\u00e9mom je, \u017ee tieto \u00farovne obvykle konfliktuj\u00fa s aplik\u00e1ciami navrhnut\u00fdmi na princ\u00edpe uchov\u00e1vania stavu.<\/p>\n<h4>Sebavedom\u00fd krok k oddeleniu d\u00e1t od v\u00fdpo\u010dtov<\/h4>\n<p>\nV tomto \u010dl\u00e1nku sme hovorili o tom, ako sa aplik\u00e1cie preorientov\u00e1vaj\u00fa na pr\u00e1cu bez uchov\u00e1vania stavu, in\u00fdmi slovami, uchov\u00e1vanie d\u00e1t je oddelen\u00e9 od v\u00fdpo\u010dtov nad nimi. Na z\u00e1ver si pozrieme nieko\u013eko re\u00e1lnych pr\u00edkladov tohto trendu.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/spark.apache.org\/\">Spark<\/a><\/noindex>, zn\u00e1ma platforma na anal\u00fdzu d\u00e1t, sa tradi\u010dne pou\u017e\u00edvala s uchov\u00e1van\u00edm stavu a nasaden\u00edm v s\u00faborovom syst\u00e9me HDFS. Av\u0161ak, s prechodom Spark do sveta orientovan\u00e9ho na cloud, sa t\u00e1to platforma \u010doraz \u010dastej\u0161ie vyu\u017e\u00edva bez uchov\u00e1vania stavu pomocou `s3a`. Spark pou\u017e\u00edva s3a na prenos stavu do in\u00fdch syst\u00e9mov, pri\u010dom samotn\u00e9 kontajnery Spark funguj\u00fa \u00faplne bez uchov\u00e1vania stavu. In\u00ed ve\u013ek\u00ed hr\u00e1\u010di v oblasti anal\u00fdzy ve\u013ek\u00fdch d\u00e1t, konkr\u00e9tne <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vertica.com\/docs\/9.2.x\/HTML\/Content\/Authoring\/Eon\/Architecture.htm\">Vertica<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/min.io\/resources\/docs\/Teradata-solution-brief.pdf\">Teradata<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.pivotal.io\/partners\/minio-greenplum\/using.html\">Greenplum<\/a><\/noindex> taktie\u017e prech\u00e1dzaj\u00fa k pr\u00e1ci s oddelen\u00edm uchov\u00e1vania d\u00e1t a v\u00fdpo\u010dtov nad nimi.<\/p>\n<p>Podobn\u00e9 vzory sa daj\u00fa pozorova\u0165 aj na in\u00fdch ve\u013ek\u00fdch analytick\u00fdch platform\u00e1ch, medzi ktor\u00e9 patr\u00ed Presto, TensorFlow do R, Jupyter. Exportovan\u00edm stavu do vzdialen\u00fdch cloudov\u00fdch \u00falo\u017en\u00fdch syst\u00e9mov sa ove\u013ea jednoduch\u0161ie spravuje va\u0161a aplik\u00e1cia a jej \u0161k\u00e1lovanie. Okrem toho to podporuje prenosnos\u0165 aplik\u00e1cie do r\u00f4znych prostred\u00ed.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/490180\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432\u044b\u0448\u043b\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430 \u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u0445 Kubernetes. \u041d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0435\u0449\u0435 \u0441 &quot;\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432&quot; \u0411\u0440\u0435\u043d\u0434\u0430\u043d\u0430 \u0411\u0435\u0440\u043d\u0441\u0430, \u0438, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 \u044d\u0442\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043a\u0438\u043f\u0438\u0442. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0436\u0435 \u043c\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0432\u0430\u043c \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438\u0437 \u0431\u043b\u043e\u0433\u0430 MinIO, \u043a\u0440\u0430\u0442\u043a\u043e \u0438\u0437\u043b\u0430\u0433\u0430\u044e\u0449\u0443\u044e \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0438 \u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kubernetes. Kubernetes \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":71859,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-71858","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\/sk\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes\" \/>\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-02-28T18:00:08+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:09+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\udd47Vzory ukladania d\u00e1t v Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\u041f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Kubernetes | ProHoster","og:url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","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-02-28T18:00:08+00:00","article:modified_time":"2020-03-03T13:14:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"71858","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 18:55:27","updated":"2022-09-27 18:57:08","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/71858","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=71858"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/71858\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/71859"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=71858"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=71858"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=71858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}