{"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\/cs\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","title":{"rendered":"Vzorov\u00e9 ukl\u00e1d\u00e1n\u00ed dat 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=\"Vzorov\u00e9 ukl\u00e1d\u00e1n\u00ed dat v Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/148744e73101d47e7a5a76bdd3bb57e1.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nAhoj, Habr!<\/p>\n<p>P\u0159ipom\u00edn\u00e1me, \u017ee jsme vydali dal\u0161\u00ed velmi zaj\u00edmav\u00fd a u\u017eite\u010dn\u00fd <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/patterny-kubernetes-shablony-razrabotki-sobstvennyh-oblachnyh-prilozheniy\">kniha<\/a><\/noindex> o vzorech Kubernetes. V\u0161echno to za\u010dalo s \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/all\/product\/raspredelennye-sistemy-patterny-proektirovaniya\">Vzory<\/a><\/noindex>\" Brendanem Burnsem, a mimochodem, pr\u00e1ce v tomto segmentu m\u00e1me <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/kubernetes-dlya-devops-razvertyvanie-zapusk-i-masshtabirovanie-v-oblake\">vzkv\u00e9t\u00e1<\/a><\/noindex>. Dnes v\u00e1m nab\u00edz\u00edme p\u0159e\u010d\u00edst si \u010dl\u00e1nek z blogu MinIO, kter\u00fd stru\u010dn\u011b shrnuje tendence a specifika vzor\u016f ukl\u00e1d\u00e1n\u00ed dat v Kubernetes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Kubernetes z\u00e1sadn\u011b zm\u011bnil tradi\u010dn\u00ed vzory v\u00fdvoje a nasazen\u00ed aplikac\u00ed. Nyn\u00ed m\u016f\u017ee t\u00fdmu trvat jen n\u011bkolik dn\u00ed na v\u00fdvoj, testov\u00e1n\u00ed a nasazen\u00ed aplikace \u2013 v r\u016fzn\u00fdch prost\u0159ed\u00edch, a to v\u0161e v r\u00e1mci cluster\u016f Kubernetes. Takov\u00e1 pr\u00e1ce s technologiemi minul\u00fdch generac\u00ed obvykle trvala cel\u00e9 t\u00fddny, ne-li m\u011bs\u00edce.<\/p>\n<p>Toto zrychlen\u00ed bylo mo\u017en\u00e9 d\u00edky abstrakci, kterou Kubernetes poskytuje \u2013 tedy proto, \u017ee Kubernetes samo realizuje interakci s n\u00edzko\u00farov\u0148ov\u00fdmi detaily fyzick\u00fdch nebo virtu\u00e1ln\u00edch stroj\u016f, umo\u017e\u0148uj\u00edc\u00ed u\u017eivatel\u016fm deklarovat mimo jin\u00e9 pot\u0159ebn\u00fd procesor, pot\u0159ebn\u00e9 mno\u017estv\u00ed pam\u011bti, po\u010det instanc\u00ed kontejner\u016f. Vzhledem k tomu, \u017ee o podporu Kubernetes se star\u00e1 obrovsk\u00e9 spole\u010denstv\u00ed a rozsah pou\u017e\u00edv\u00e1n\u00ed Kubernetes se neust\u00e1le roz\u0161i\u0159uje, jednozna\u010dn\u011b vede p\u0159ed ostatn\u00edmi platformami pro orchestraci kontejner\u016f.<\/p>\n<p><i><b>Jak se pou\u017e\u00edv\u00e1n\u00ed Kubernetes roz\u0161i\u0159uje, roste i zmatek ohledn\u011b vzor\u016f ukl\u00e1d\u00e1n\u00ed dat, kter\u00e9 se v n\u011bm pou\u017e\u00edvaj\u00ed.<\/b><\/i>.<\/p>\n<p>P\u0159i v\u0161eobecn\u00e9 konkurenci o kousek kol\u00e1\u010de Kubernetes (tedy o ukl\u00e1d\u00e1n\u00ed dat), kdy\u017e dojde na \u0159e\u010d o ukl\u00e1d\u00e1n\u00ed dat, sign\u00e1l zde tonie ve siln\u00e9m \u0161umu.<br \/>\nKubernetes p\u0159edstavuje sou\u010dasn\u00fd model v\u00fdvoje a nasazen\u00ed aplikac\u00ed, stejn\u011b jako jejich spr\u00e1vu. Tento modern\u00ed model odd\u011bluje ukl\u00e1d\u00e1n\u00ed dat od v\u00fdpo\u010dt\u016f. Abychom pln\u011b pochopili toto odd\u011blen\u00ed v kontextu Kubernetes, mus\u00edme tak\u00e9 porozum\u011bt tomu, co jsou aplikace pracuj\u00edc\u00ed se zachov\u00e1n\u00edm stavu a bez zachov\u00e1n\u00ed stavu, a jak se k tomu vztahuje ukl\u00e1d\u00e1n\u00ed dat. Pr\u00e1v\u011b zde p\u0159\u00edstup REST API, kter\u00fd pou\u017e\u00edv\u00e1 S3, m\u00e1 z\u0159eteln\u00e9 v\u00fdhody oproti p\u0159\u00edstupu POSIX\/CSI, kter\u00fd je charakteristick\u00fd pro jin\u00e1 \u0159e\u0161en\u00ed.<\/p>\n<p>V tomto \u010dl\u00e1nku se budeme zab\u00fdvat vzory ukl\u00e1d\u00e1n\u00ed dat v Kubernetes a podrobn\u011b se dotkneme debaty o aplikac\u00edch provozovan\u00fdch bez stavu a s ulo\u017een\u00edm stavu, abychom dob\u0159e pochopili, v \u010dem spo\u010d\u00edv\u00e1 rozd\u00edl mezi nimi a pro\u010d je d\u016fle\u017eit\u00fd. V textu budou tak\u00e9 zva\u017eov\u00e1ny aplikace a vzory ukl\u00e1d\u00e1n\u00ed dat pou\u017e\u00edvan\u00e9 v souladu s nejlep\u0161\u00edmi praktikami pr\u00e1ce s kontejnery a Kubernetes.<\/p>\n<h4>Kontejnery bez ukl\u00e1d\u00e1n\u00ed stavu<\/h4>\n<p>\nKontejnery jsou ze sv\u00e9 podstaty lehk\u00e9 a efem\u00e9rn\u00ed. Lze je snadno zastavit, odstranit nebo nasadit na jin\u00e9m uzlu \u2013 na to v\u0161e sta\u010d\u00ed jen n\u011bkolik sekund. V rozs\u00e1hl\u00e9m syst\u00e9mu orchestrace kontejner\u016f se tyto operace odehr\u00e1vaj\u00ed neust\u00e1le a u\u017eivatel\u00e9 si ani nev\u0161imnou t\u011bchto zm\u011bn. Av\u0161ak, p\u0159esuny jsou mo\u017en\u00e9 pouze tehdy, pokud kontejner nem\u00e1 \u017e\u00e1dn\u00e9 z\u00e1vislosti na uzlu, na kter\u00e9m je um\u00edst\u011bn. O takov\u00fdch kontejnerech se \u0159\u00edk\u00e1, \u017ee funguj\u00ed <i>bez ukl\u00e1d\u00e1n\u00ed stavu<\/i>.<\/p>\n<h4>Kontejnery s ukl\u00e1d\u00e1n\u00edm stavu<\/h4>\n<p>\nPokud kontejner ukl\u00e1d\u00e1 data na lok\u00e1ln\u011b p\u0159ipojen\u00e1 za\u0159\u00edzen\u00ed (nebo na blokov\u00e9 za\u0159\u00edzen\u00ed), pak bude t\u0159eba p\u0159esunout datov\u00e9 \u00falo\u017ei\u0161t\u011b, na kter\u00e9m se nach\u00e1z\u00ed, na nov\u00fd uzel spole\u010dn\u011b s kontejnerem \u2013 v p\u0159\u00edpad\u011b selh\u00e1n\u00ed. To je d\u016fle\u017eit\u00e9, proto\u017ee jinak aplikace spu\u0161t\u011bn\u00e1 v kontejneru nebude spr\u00e1vn\u011b fungovat, proto\u017ee mus\u00ed m\u00edt p\u0159\u00edstup k dat\u016fm ulo\u017een\u00fdm na lok\u00e1ln\u00edch m\u00e9di\u00edch. O takov\u00fdch kontejnerech se \u0159\u00edk\u00e1, \u017ee funguj\u00ed <i>s ukl\u00e1d\u00e1n\u00edm stavu<\/i>.<\/p>\n<p>Z \u010dist\u011b technick\u00e9ho hlediska je mo\u017en\u00e9 tak\u00e9 p\u0159esouvat kontejnery s ukl\u00e1d\u00e1n\u00edm stavu na jin\u00e9 uzly. Obvykle je to zaji\u0161t\u011bno pomoc\u00ed distribuovan\u00fdch souborov\u00fdch syst\u00e9m\u016f nebo blokov\u00fdch s\u00ed\u0165ov\u00fdch \u00falo\u017ei\u0161\u0165 dat p\u0159ipojen\u00fdch ke v\u0161em uzl\u016fm, na kter\u00fdch kontejnery b\u011b\u017e\u00ed. T\u00edmto zp\u016fsobem kontejnery z\u00edsk\u00e1vaj\u00ed p\u0159\u00edstup k objem\u016fm pro trval\u00e9 ukl\u00e1d\u00e1n\u00ed dat a informace se ukl\u00e1daj\u00ed na disc\u00edch rozm\u00edst\u011bn\u00fdch po cel\u00e9 s\u00edti. Tuto metodu naz\u00fdv\u00e1m<i>kontejnerov\u00fdm p\u0159\u00edstupem s ukl\u00e1d\u00e1n\u00edm stavu<\/i>a v zbytek \u010dl\u00e1nku ji tak budu naz\u00fdvat pro jednotnost.<\/p>\n<p><img decoding=\"async\" alt=\"Vzorov\u00e9 ukl\u00e1d\u00e1n\u00ed dat v Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/a5546db15801389d58476f50c8c66803.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u0159i typick\u00e9m kontejnerov\u00e9m p\u0159\u00edstupu se zachov\u00e1n\u00edm stavu jsou v\u0161echny pod\u0159\u00edzen\u00e9 aplikac\u00ed p\u0159ipojeny k jedn\u00e9 distribuovan\u00e9 souborov\u00e9 soustav\u011b \u2013 co\u017e vytvo\u0159\u00ed jakousi sd\u00edlenou pam\u011b\u0165, kde se nach\u00e1zej\u00ed v\u0161echna data aplikac\u00ed. I kdy\u017e jsou mo\u017en\u00e9 ur\u010dit\u00e9 variace, je to p\u0159\u00edstup na vysok\u00e9 \u00farovni.<\/p>\n<p>Nyn\u00ed si poj\u010fme vysv\u011btlit, pro\u010d je kontejnerov\u00fd p\u0159\u00edstup se zachov\u00e1n\u00edm stavu v oble\u010dn\u00e9m sv\u011bt\u011b anti-vzorem.<\/p>\n<h4>N\u00e1vrh aplikac\u00ed zam\u011b\u0159en\u00fd na cloud<\/h4>\n<p>\nTradi\u010dn\u011b aplikace pou\u017e\u00edvaly datab\u00e1ze pro strukturovan\u00e9 uchov\u00e1v\u00e1n\u00ed informac\u00ed a m\u00edstn\u00ed disky \u010di distribuovan\u00e9 souborov\u00e9 syst\u00e9my, kam se ukl\u00e1dala v\u0161echna nestrukturovan\u00e1 nebo dokonce polo-strukturovan\u00e1 data. Jak objem nestrukturovan\u00fdch dat rostl, v\u00fdvoj\u00e1\u0159i si uv\u011bdomili, \u017ee POSIX je p\u0159\u00edli\u0161 \"mluvn\u00fd\", spojen\u00fd s v\u00fdznamn\u00fdmi n\u00e1klady a nakonec br\u00e1n\u00ed fungov\u00e1n\u00ed aplikace p\u0159i p\u0159echodu na skute\u010dn\u011b velk\u00e9 m\u011b\u0159\u00edtka.<\/p>\n<p>To v\u0161e p\u0159isp\u011blo k vzniku nov\u00e9ho standardu uchov\u00e1v\u00e1n\u00ed dat, tedy cloudov\u011b orientovan\u00fdch \u00falo\u017ei\u0161\u0165, kter\u00e1 funguj\u00ed p\u0159ev\u00e1\u017en\u011b na z\u00e1klad\u011b REST API a osvobozuj\u00ed aplikaci od n\u00e1ro\u010dn\u00e9ho spravov\u00e1n\u00ed m\u00edstn\u00edho \u00falo\u017ei\u0161t\u011b dat. V takov\u00e9m p\u0159\u00edpad\u011b aplikace fakticky p\u0159ech\u00e1z\u00ed do re\u017eimu bez uchov\u00e1v\u00e1n\u00ed stavu (proto\u017ee stav se nach\u00e1z\u00ed v d\u00e1lkov\u00e9m \u00falo\u017ei\u0161ti). Modern\u00ed aplikace jsou budov\u00e1ny od z\u00e1klad\u016f s p\u0159ihl\u00e9dnut\u00edm k tomuto faktoru. Obvykle je ka\u017ed\u00e1 modern\u00ed aplikace, kter\u00e1 zpracov\u00e1v\u00e1 data jak\u00e9hokoli druhu (logy, metadata, blob atd.) postavena podle cloudov\u011b orientovan\u00e9 paradigmatiky, kde je stav p\u0159esunut do speci\u00e1ln\u011b vyhrazen\u00e9ho softwarov\u00e9ho syst\u00e9mu pro jeho uchov\u00e1v\u00e1n\u00ed. <\/p>\n<p><i><b>Kontejnerov\u00fd p\u0159\u00edstup se zachov\u00e1n\u00edm stavu nut\u00ed celou tuto paradigmu vr\u00e1tit se zp\u011bt k tomu, odkud za\u010dala! <\/b><\/i><\/p>\n<p>P\u0159i pou\u017eit\u00ed rozhran\u00ed POSIX pro ukl\u00e1d\u00e1n\u00ed dat aplikace funguj\u00ed stejn\u011b, jako by ukl\u00e1daly sv\u016fj stav, a t\u00edm se odkl\u00e1n\u011bj\u00ed od nejd\u016fle\u017eit\u011bj\u0161\u00edch postul\u00e1t\u016f cloudov\u011b orientovan\u00e9ho designu, tedy od mo\u017enosti m\u011bnit velikosti pracovn\u00edch tok\u016f aplikace podle p\u0159\u00edchoz\u00ed z\u00e1t\u011b\u017ee, p\u0159esouvat se na nov\u00fd uzel, jakmile aktu\u00e1ln\u00ed uzel sel\u017ee, a tak d\u00e1le.<\/p>\n<p>Pokud se pod\u00edv\u00e1me na tuto situaci bl\u00ed\u017ee, zjist\u00edme, \u017ee p\u0159i v\u00fdb\u011bru \u00falo\u017ei\u0161t\u011b dat se op\u011bt a op\u011bt setk\u00e1v\u00e1me s dilematem \"POSIX kontra REST API\", A TO S DAL\u0160\u00cdM ZES\u00cdLEN\u00cdM PROBL\u00c9M\u016e POSIX zp\u016fsoben\u00fdm distribuovanou povahou prost\u0159ed\u00ed Kubernetes. Zejm\u00e9na,<\/p>\n<ul>\n<li><b>POSIX je zbyte\u010dn\u011b slo\u017eit\u00e9<\/b>: semantika POSIX vy\u017eaduje p\u0159i\u0159adit k ka\u017ed\u00e9 operaci metadata a deskriptory soubor\u016f, kter\u00e9 pom\u00e1haj\u00ed udr\u017eovat stav operace. To vede k v\u00fdznamn\u00fdm n\u00e1klad\u016fm, kter\u00e9 nemaj\u00ed \u017e\u00e1dnou skute\u010dnou hodnotu. API pro ukl\u00e1d\u00e1n\u00ed objekt\u016f, zejm\u00e9na S3 API, se t\u011bchto po\u017eadavk\u016f zbavily, co\u017e umo\u017e\u0148uje aplikaci prov\u00e9st akci a pot\u00e9 \"zapomenout\" na vol\u00e1n\u00ed. Odpov\u011b\u010f syst\u00e9mu \u00falo\u017ei\u0161t\u011b ukazuje, zda byla akce \u00fasp\u011b\u0161n\u011b provedena nebo ne. V p\u0159\u00edpad\u011b ne\u00fasp\u011bchu m\u016f\u017ee aplikace prov\u00e9st opakov\u00e1n\u00ed.<\/li>\n<li><b>S\u00ed\u0165ov\u00e1 omezen\u00ed<\/b>: V distribuovan\u00e9m syst\u00e9mu se p\u0159edpokl\u00e1d\u00e1, \u017ee m\u016f\u017ee existovat \u0159ada aplikac\u00ed, kter\u00e9 se pokou\u0161ej\u00ed zapisovat data na stejn\u00fd p\u0159ipojen\u00fd m\u00e9dia. Proto nejen \u017ee aplikace budou mezi sebou sout\u011b\u017eit o \u0161\u00ed\u0159ku p\u00e1sma (aby poslaly data na m\u00e9dium), samotn\u00fd syst\u00e9m \u00falo\u017ei\u0161t\u011b bude sout\u011b\u017eit o tuto \u0161\u00ed\u0159ku p\u00e1sma, rozes\u00edlaj\u00edc\u00ed data po fyzick\u00fdch disc\u00edch. D\u00edky slo\u017eitosti POSIX se po\u010det s\u00ed\u0165ov\u00fdch vol\u00e1n\u00ed zvy\u0161uje n\u011bkolikr\u00e1t. Na druhou stranu, S3 API poskytuje jasn\u00e9 rozli\u0161en\u00ed s\u00ed\u0165ov\u00fdch vol\u00e1n\u00ed mezi t\u011bmi, kter\u00e1 p\u0159ich\u00e1zej\u00ed z klienta na server, a t\u011bmi, kter\u00e1 se odehr\u00e1vaj\u00ed v r\u00e1mci serveru.<\/li>\n<li><b>Bezpe\u010dnost<\/b>: Model zabezpe\u010den\u00ed POSIX je navr\u017eena pro aktivn\u00ed \u00fa\u010dast u\u017eivatele: administr\u00e1to\u0159i konfiguruj\u00ed konkr\u00e9tn\u00ed \u00farovn\u011b p\u0159\u00edstupu pro ka\u017ed\u00e9ho u\u017eivatele nebo skupinu. Tato paradigma se obt\u00ed\u017en\u011b p\u0159izp\u016fsobuje cloudov\u00e9mu sv\u011btu. Modern\u00ed aplikace z\u00e1vis\u00ed na modelech zabezpe\u010den\u00ed zalo\u017een\u00fdch na API, kde jsou pr\u00e1va p\u0159\u00edstupu definov\u00e1na jako soubor politik, p\u0159id\u011blov\u00e1ny slu\u017eebn\u00ed \u00fa\u010dty, do\u010dasn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje atd.<\/li>\n<li><b>Spravovatelnost<\/b>: Kontejnery se zachov\u00e1n\u00edm stavu nesou ur\u010dit\u00e9 n\u00e1klady spojen\u00e9 s \u0159\u00edzen\u00edm. Jde o synchronizaci paraleln\u00edho p\u0159\u00edstupu k dat\u016fm, zaji\u0161t\u011bn\u00ed konzistence dat, to v\u0161e vy\u017eaduje pe\u010dliv\u00e9 zv\u00e1\u017een\u00ed, jak\u00e9 vzory p\u0159\u00edstupu k dat\u016fm pou\u017e\u00edt. Je nutn\u00e9 instalovat, monitorovat a konfigurovat dal\u0161\u00ed programy, nemluv\u011b o dal\u0161\u00edch \u00fasil\u00ed vynalo\u017een\u00e9m na v\u00fdvoj.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Kontejnerov\u00e9 rozhran\u00ed pro ukl\u00e1d\u00e1n\u00ed dat<\/h4>\n<p>\nZat\u00edmco rozhran\u00ed kontejnerov\u00e9ho \u00falo\u017ei\u0161t\u011b dat (CSI) v\u00fdznamn\u011b pomohlo s roz\u0161\u00ed\u0159en\u00edm \u00farovn\u011b svazk\u016f Kubernetes a \u010d\u00e1ste\u010dn\u011b p\u0159eneslo tuto funkci na extern\u00ed dodavatele \u00falo\u017ei\u0161\u0165, z\u00e1rove\u0148 omylem podporovalo p\u0159esv\u011bd\u010den\u00ed, \u017ee kontejnerov\u00fd p\u0159\u00edstup se zachov\u00e1n\u00edm stavu je doporu\u010den\u00fdm metodou ukl\u00e1d\u00e1n\u00ed dat v Kubernetes.<\/p>\n<p>CSI byl navr\u017een jako standard pro poskytov\u00e1n\u00ed r\u016fzn\u00fdch syst\u00e9m\u016f blokov\u00e9ho a souborov\u00e9ho \u00falo\u017ei\u0161t\u011b pro d\u011bdictv\u00ed aplikace p\u0159i pr\u00e1ci s Kubernetes. Jak bylo uk\u00e1z\u00e1no v tomto \u010dl\u00e1nku, jedin\u00e1 situace, kdy je kontejnerov\u00fd p\u0159\u00edstup se zachov\u00e1n\u00edm stavu (a CSI v jeho sou\u010dasn\u00e9 podob\u011b) rozumn\u00fd \u2013 je, kdy\u017e je samotn\u00e1 aplikace d\u011bdi\u010dn\u00fdm syst\u00e9mem, ve kter\u00e9m nen\u00ed mo\u017en\u00e9 p\u0159idat podporu pro API objektov\u00e9ho \u00falo\u017ei\u0161t\u011b.<\/p>\n<p>Je d\u016fle\u017eit\u00e9 ch\u00e1pat, \u017ee p\u0159i pou\u017e\u00edv\u00e1n\u00ed CSI v jeho sou\u010dasn\u00e9 podob\u011b, tedy montov\u00e1n\u00edm svazk\u016f p\u0159i pr\u00e1ci se sou\u010dasn\u00fdmi aplikacemi, se setk\u00e1me s p\u0159ibli\u017en\u011b stejn\u00fdmi probl\u00e9my, kter\u00e9 se vyskytovaly v syst\u00e9mech, kde bylo ukl\u00e1d\u00e1n\u00ed dat organizov\u00e1no podle stylu POSIX.<\/p>\n<h4>Kvalitn\u011bj\u0161\u00ed p\u0159\u00edstup<\/h4>\n<p>\nV tomto p\u0159\u00edpad\u011b je d\u016fle\u017eit\u00e9 pochopit, \u017ee v\u011bt\u0161ina aplikac\u00ed nen\u00ed prim\u00e1rn\u011b ur\u010dena pro pr\u00e1ci s ukl\u00e1d\u00e1n\u00edm stavu nebo bez n\u011bj. Tento p\u0159\u00edstup z\u00e1vis\u00ed na celkov\u00e9 architektu\u0159e syst\u00e9mu a konkr\u00e9tn\u00edch volb\u00e1ch u\u010din\u011bn\u00fdch p\u0159i n\u00e1vrhu. Poj\u010fme si trochu popov\u00eddat o aplikac\u00edch, kter\u00e9 uchov\u00e1vaj\u00ed stav.<\/p>\n<p>V podstat\u011b lze v\u0161echna data aplikac\u00ed rozd\u011blit do n\u011bkolika \u0161irok\u00fdch kategori\u00ed:<\/p>\n<ul>\n<li>Logov\u00e9 \u00fadaje<\/li>\n<li>\u00dadaje o \u010dasov\u00fdch zna\u010dk\u00e1ch<\/li>\n<li>Transak\u010dn\u00ed \u00fadaje<\/li>\n<li>Metadatov\u00e9 \u00fadaje<\/li>\n<li>Obr\u00e1zky kontejner\u016f<\/li>\n<li>\u00dadaje blob\u016f (velk\u00fdch bin\u00e1rn\u00edch objekt\u016f)<\/li>\n<\/ul>\n<p>\nV\u0161echny tyto typy dat jsou velmi dob\u0159e podporov\u00e1ny na modern\u00edch platform\u00e1ch pro ukl\u00e1d\u00e1n\u00ed dat, a existuje n\u011bkolik cloudov\u011b orientovan\u00fdch platforem, kter\u00e9 jsou p\u0159izp\u016fsobeny pro dod\u00e1vku dat v ka\u017ed\u00e9m z t\u011bchto konkr\u00e9tn\u00edch form\u00e1t\u016f. Nap\u0159\u00edklad transak\u010dn\u00ed \u00fadaje a metadata mohou b\u00fdt v modern\u00ed cloudov\u011b orientovan\u00e9 datab\u00e1zi, jako je CockroachDB, YugaByte atd. Obr\u00e1zky kontejner\u016f nebo \u00fadaje blob\u016f mohou b\u00fdt ulo\u017eeny v dockerov\u00e9m registru zalo\u017een\u00e9m na MinIO. \u00dadaje \u010dasov\u00fdch zna\u010dek mohou b\u00fdt ulo\u017eeny v datab\u00e1zi \u010dasov\u00fdch \u0159ad, nap\u0159\u00edklad InfluxDB atd. Nepodrob\u00edme se zde ka\u017ed\u00e9mu typu dat a odpov\u00eddaj\u00edc\u00edm aplikac\u00edm, ale z\u00e1kladn\u00ed my\u0161lenkou je, \u017ee se vyhneme trval\u00e9mu ukl\u00e1d\u00e1n\u00ed dat zalo\u017een\u00e9mu na m\u00edstn\u00edm p\u0159ipojen\u00ed disk\u016f.<\/p>\n<p><img decoding=\"async\" alt=\"Vzorov\u00e9 ukl\u00e1d\u00e1n\u00ed dat v Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8e39996ef159f09915802549d4e8ecd5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKrom\u011b toho se \u010dasto ukazuje, \u017ee je efektivn\u00ed poskytnout \u00farove\u0148 do\u010dasn\u00e9ho ukl\u00e1d\u00e1n\u00ed, kter\u00e1 slou\u017e\u00ed aplikac\u00edm jako jak\u00fdsi sklad do\u010dasn\u00fdch soubor\u016f, ale aplikace by se na tuto \u00farove\u0148 nem\u011bly spol\u00e9hat jako na zdroj pravdy.<\/p>\n<h4>Ukl\u00e1d\u00e1n\u00ed pro aplikace s uchov\u00e1v\u00e1n\u00edm stavu<\/h4>\n<p>\nZat\u00edmco v mnoha p\u0159\u00edpadech je prosp\u011b\u0161n\u00e9 udr\u017eovat aplikace bez stavu, ty aplikace, kter\u00e9 jsou ur\u010deny k ukl\u00e1d\u00e1n\u00ed dat \u2013 nap\u0159\u00edklad datab\u00e1ze, objektov\u00e9 \u00falo\u017ei\u0161t\u011b, \u00falo\u017ei\u0161t\u011b kl\u00ed\u010d\u016f a hodnot \u2013 by m\u011bly uchov\u00e1vat stav. Poj\u010fme se pod\u00edvat, pro\u010d tyto aplikace nasazuj\u00ed na Kubernetes. Jako p\u0159\u00edklad vezmeme MinIO, ale podobn\u00e9 principy se vztahuj\u00ed i na jak\u00e9koli jin\u00e9 velk\u00e9 cloudov\u011b orientovan\u00e9 syst\u00e9my pro ukl\u00e1d\u00e1n\u00ed dat.<\/p>\n<p>Aplikace orientovan\u00e9 na cloud jsou navr\u017eeny tak, aby maxim\u00e1ln\u011b vyu\u017e\u00edvaly pru\u017enost, kterou kontejnery nab\u00edzej\u00ed. To znamen\u00e1, \u017ee nenavrhuj\u00ed \u017e\u00e1dn\u00e9 p\u0159edpoklady ohledn\u011b prost\u0159ed\u00ed, ve kter\u00e9m budou nasazeny. Nap\u0159\u00edklad v MinIO se pou\u017e\u00edv\u00e1 vnit\u0159n\u00ed mechanismus zbyte\u010dn\u00e9ho k\u00f3dov\u00e1n\u00ed (erasure coding), kter\u00fd zaji\u0161\u0165uje dostate\u010dnou odolnost syst\u00e9mu, aby z\u016fstal funk\u010dn\u00ed i p\u0159i selh\u00e1n\u00ed poloviny disk\u016f. MinIO tak\u00e9 spravuje integritu a bezpe\u010dnost dat pomoc\u00ed vlastn\u00edho hashov\u00e1n\u00ed a \u0161ifrov\u00e1n\u00ed na stran\u011b serveru.<\/p>\n<p>Pro takov\u00e9 aplikace orientovan\u00e9 na cloud jsou m\u00edstn\u00ed trval\u00e9 svazky (PV) nejvhodn\u011bj\u0161\u00edm \u0159e\u0161en\u00edm pro z\u00e1lo\u017en\u00ed \u00falo\u017ei\u0161t\u011b. M\u00edstn\u00ed PV poskytuj\u00ed mo\u017enost ukl\u00e1dat surov\u00e1 data, zat\u00edmco aplikace, kter\u00e9 b\u011b\u017e\u00ed nad t\u011bmito PV, sama shroma\u017e\u010fuj\u00ed informace, kter\u00e9 umo\u017e\u0148uj\u00ed \u0161k\u00e1lov\u00e1n\u00ed dat a \u0159\u00edzen\u00ed rostouc\u00edch po\u017eadavk\u016f na data.<\/p>\n<p>Tento p\u0159\u00edstup je mnohem jednodu\u0161\u0161\u00ed a v\u00fdrazn\u011b l\u00e9pe se \u0161k\u00e1luje ve srovn\u00e1n\u00ed s PV zalo\u017een\u00fdmi na CSI, kter\u00e9 do syst\u00e9mu zav\u00e1d\u011bj\u00ed vlastn\u00ed \u00farovn\u011b spr\u00e1vy dat a redundance; probl\u00e9m je v tom, \u017ee tyto \u00farovn\u011b obvykle konfliktuj\u00ed s aplikacemi navr\u017een\u00fdmi na principu uchov\u00e1n\u00ed stavu.<\/p>\n<h4>Jist\u00fd posun k odd\u011blen\u00ed dat od v\u00fdpo\u010dt\u016f<\/h4>\n<p>\nV tomto \u010dl\u00e1nku jsme hovo\u0159ili o tom, jak se aplikace zam\u011b\u0159uj\u00ed na pr\u00e1ci bez uchov\u00e1v\u00e1n\u00ed stavu, nebo jin\u00fdmi slovy, ukl\u00e1d\u00e1n\u00ed dat je odd\u011bleno od v\u00fdpo\u010dt\u016f nad nimi. Na z\u00e1v\u011br se pod\u00edv\u00e1me na n\u011bkolik skute\u010dn\u00fdch p\u0159\u00edklad\u016f tohoto trendu.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/spark.apache.org\/\">Spark<\/a><\/noindex>, slavn\u00e1 platforma pro anal\u00fdzu dat, tradi\u010dn\u011b byla pou\u017e\u00edv\u00e1na s uchov\u00e1v\u00e1n\u00edm stavu a nasazov\u00e1n\u00edm ve \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 HDFS. Nicm\u00e9n\u011b, s p\u0159echodem Spark do cloudov\u00e9ho orientovan\u00e9ho sv\u011bta, se tato platforma st\u00e1le aktivn\u011bji pou\u017e\u00edv\u00e1 bez uchov\u00e1v\u00e1n\u00ed stavu s vyu\u017eit\u00edm `s3a`. Spark pou\u017e\u00edv\u00e1 s3a k p\u0159enosu stavu do jin\u00fdch syst\u00e9m\u016f, zat\u00edmco samotn\u00e9 kontejnery Spark funguj\u00ed zcela bez uchov\u00e1v\u00e1n\u00ed stavu. Jin\u00e9 velk\u00e9 podniky v oblasti analytiky velk\u00fdch dat, konkr\u00e9tn\u011b, <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> se tak\u00e9 p\u0159ech\u00e1zej\u00ed k pr\u00e1ci s odd\u011blen\u00edm ukl\u00e1d\u00e1n\u00ed dat a v\u00fdpo\u010dt\u016f nad nimi.<\/p>\n<p>Podobn\u00e9 vzory se tak\u00e9 objevuj\u00ed na dal\u0161\u00edch velk\u00fdch analytick\u00fdch platform\u00e1ch, mezi nimi\u017e jsou Presto, Tensorflow to R a Jupyter. Vykl\u00e1d\u00e1n\u00ed stavu do vzd\u00e1len\u00fdch cloudov\u00fdch \u00falo\u017ei\u0161\u0165 dat usnad\u0148uje spr\u00e1vu va\u0161\u00ed aplikace a jej\u00ed \u0161k\u00e1lov\u00e1n\u00ed. Krom\u011b toho to podporuje p\u0159enositelnost aplikace v rozmanit\u00fdch prost\u0159ed\u00edch.<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.3 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\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\/cs\/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\udd47Vzorov\u00e9 \u00falo\u017ei\u0161t\u011b dat v Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/patterny-hraneniya-dannyh-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/71858","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=71858"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/71858\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/71859"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=71858"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=71858"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=71858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}