{"id":40721,"date":"2020-02-03T14:41:59","date_gmt":"2020-02-03T11:41:59","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka"},"modified":"2020-02-03T14:41:59","modified_gmt":"2020-02-03T11:41:59","slug":"nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","title":{"rendered":"Na\u0161e zku\u0161enosti s v\u00fdvojem CSI ovlada\u010de v Kubernetes pro Yandex.Cloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Na\u0161e zku\u0161enosti s v\u00fdvojem CSI ovlada\u010de v Kubernetes pro Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/86adf77b2ee08c426bf79c5b9b2d3d1e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS pot\u011b\u0161en\u00edm oznamujeme, \u017ee spole\u010dnost \u201eFlant\u201c posiluje sv\u016fj p\u0159\u00edsp\u011bvek k n\u00e1stroj\u016fm Open Source pro Kubernetes vyd\u00e1n\u00edm <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">alfaverze \u0159idi\u010de CSI<\/a><\/noindex> (Container Storage Interface) pro Yandex.Cloud.<\/p>\n<p>Ale p\u0159edt\u00edm, ne\u017e se dostaneme k podrobnostem implementace, odpov\u011bzme na ot\u00e1zku, pro\u010d to vlastn\u011b pot\u0159ebujeme, kdy\u017e m\u00e1 Yandex ji\u017e slu\u017ebu <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/managed-kubernetes\/\">Managed Service for Kubernetes<\/a><\/noindex>.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>\u00davod<\/h2>\n<p><\/p>\n<h3>Pro\u010d to?<\/h3>\n<p>\nUvnit\u0159 na\u0161\u00ed spole\u010dnosti, je\u0161t\u011b od sam\u00e9ho za\u010d\u00e1tku pou\u017e\u00edv\u00e1n\u00ed Kubernetes v produkci (tj. u\u017e n\u011bkolik let), se vyv\u00edj\u00ed vlastn\u00ed n\u00e1stroj (deckhouse), kter\u00fd, mimochodem, pl\u00e1nujeme brzy zp\u0159\u00edstupnit jako projekt Open Source. S jeho pomoc\u00ed jednotn\u011b konfigurujeme a nastavujeme v\u0161echny na\u0161e clustery, a v sou\u010dasn\u00e9 dob\u011b jich m\u00e1me v\u00edce ne\u017e 100, p\u0159i\u010dem\u017e na nejr\u016fzn\u011bj\u0161\u00edch konfigurac\u00edch hardware a ve v\u0161ech dostupn\u00fdch cloudov\u00fdch slu\u017eb\u00e1ch.<\/p>\n<p>Clustery, ve kter\u00fdch se pou\u017e\u00edv\u00e1 deckhouse, obsahuj\u00ed v\u0161echny pot\u0159ebn\u00e9 komponenty pro provoz: vyva\u017eova\u010de zat\u00ed\u017een\u00ed, monitoring s pohodln\u00fdmi grafy, metrikami a upozorn\u011bn\u00edmi, autentizaci u\u017eivatel\u016f prost\u0159ednictv\u00edm extern\u00edch poskytovatel\u016f pro p\u0159\u00edstup ke v\u0161em dashboard\u016fm a tak d\u00e1le. Takov\u00fd \u201evylep\u0161en\u00fd\u201c cluster nem\u00e1 smysl nasazovat v managed \u0159e\u0161en\u00ed, proto\u017ee to \u010dasto nen\u00ed mo\u017en\u00e9, nebo to povede k nutnosti vypnout polovinu komponent\u016f.<\/p>\n<p><i><b>NB<\/b>: Toto je na\u0161e zku\u0161enost a je pom\u011brn\u011b specifick\u00e1. V \u017e\u00e1dn\u00e9m p\u0159\u00edpad\u011b netvrd\u00edme, \u017ee se v\u0161ichni maj\u00ed sami zab\u00fdvat nasazen\u00edm cluster\u016f Kubernetes nam\u00edsto toho, aby vyu\u017e\u00edvali hotov\u00e1 \u0159e\u0161en\u00ed. Mimochodem, re\u00e1lnou zku\u0161enost s pou\u017e\u00edv\u00e1n\u00edm Kubernetes od Yandexu nem\u00e1me a v t\u00e9to \u010dl\u00e1nku nebudeme hodnotit tuto slu\u017ebu.<\/i><\/p>\n<h3>Co to je a pro koho?<\/h3>\n<p>\nTak\u017ee jsme ji\u017e hovo\u0159ili o modern\u00edm p\u0159\u00edstupu k \u00falo\u017ei\u0161t\u00edm v Kubernetes: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">jak funguje CSI<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">jak se komunita dostala<\/a><\/noindex> k takov\u00e9mu p\u0159\u00edstupu.<\/p>\n<p>V sou\u010dasn\u00e9 dob\u011b mnoho velk\u00fdch poskytovatel\u016f cloudov\u00fdch slu\u017eeb vyvinulo ovlada\u010de pro pou\u017eit\u00ed sv\u00fdch \u201ecloudov\u00fdch\u201c disk\u016f jako Persistent Volume v Kubernetes. Pokud v\u0161ak dan\u00fd poskytovatel nem\u00e1 takov\u00fd ovlada\u010d, ale v\u0161echny pot\u0159ebn\u00e9 funkce jsou poskytov\u00e1ny p\u0159es API, nic nebr\u00e1n\u00ed tomu, abychom ovlada\u010d realizovali vlastn\u00edmi silami. A tak se to stalo i s Yandex.Cloud.<\/p>\n<p>Z\u00e1kladem pro v\u00fdvoj jsme vzali <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/digitalocean\/csi-digitalocean\">CSI-driver pro cloud DigitalOcean<\/a><\/noindex> a p\u00e1r my\u0161lenek z <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/gcp-compute-persistent-disk-csi-driver\">driveru pro GCP<\/a><\/noindex>, proto\u017ee interakce s API t\u011bchto cloud\u016f (Google a Yandex) m\u00e1 \u0159adu podobnost\u00ed. P\u0159edev\u0161\u00edm, API maj\u00ed jak <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/api\/how-tos\/api-requests-responses#handling_api_responses\">GCP<\/a><\/noindex>, tak <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/api-design-guide\/concepts\/about-async\">Yandex<\/a><\/noindex> vrac\u00ed objekt <code>Operace<\/code> pro sledov\u00e1n\u00ed stavu dlouhotrvaj\u00edc\u00edch operac\u00ed (nap\u0159\u00edklad vytv\u00e1\u0159en\u00ed nov\u00e9ho disku). Pro interakci s API Yandex.Cloud se pou\u017e\u00edv\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex-cloud\/go-sdk\">Yandex.Cloud Go SDK<\/a><\/noindex>.<\/p>\n<p>V\u00fdsledek vykonan\u00e9 pr\u00e1ce <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">je zve\u0159ejn\u011bn na GitHubu<\/a><\/noindex> a m\u016f\u017ee b\u00fdt u\u017eite\u010dn\u00fd t\u011bm, kte\u0159\u00ed z n\u011bjak\u00e9ho d\u016fvodu pou\u017e\u00edvaj\u00ed vlastn\u00ed instalaci Kubernetes na virtu\u00e1ln\u00edch stroj\u00edch Yandex.Cloud (ale ne hotov\u00fd managed cluster) a cht\u011bli by pou\u017e\u00edvat (objedn\u00e1vat) disky prost\u0159ednictv\u00edm CSI.<\/p>\n<h2>Implementace<\/h2>\n<p><\/p>\n<h3>Hlavn\u00ed funkce<\/h3>\n<p>\nV sou\u010dasn\u00e9 dob\u011b ovlada\u010d podporuje n\u00e1sleduj\u00edc\u00ed funkce:<\/p>\n<ul>\n<li> Objedn\u00e1v\u00e1n\u00ed disk\u016f ve v\u0161ech z\u00f3n\u00e1ch clusteru podle topologie existuj\u00edc\u00edch uzl\u016f v clusteru;<\/li>\n<li> Odstra\u0148ov\u00e1n\u00ed d\u0159\u00edve objednan\u00fdch disk\u016f;<\/li>\n<li> Offline resize pro disky (Yandex.Cloud <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/compute\/operations\/disk-control\/update#change-disk-size\">nepodporuje<\/a><\/noindex> zv\u011bt\u0161ov\u00e1n\u00ed disk\u016f, kter\u00e9 jsou p\u0159ipojeny k virtu\u00e1ln\u00edmu stroji). O tom, jak bylo nutn\u00e9 upravit ovlada\u010d pro co nejbezprobl\u00e9mov\u011bj\u0161\u00ed proveden\u00ed resize, viz n\u00ed\u017ee.<\/li>\n<\/ul>\n<p>\nDo budoucna se pl\u00e1nuje realizace podpory vytv\u00e1\u0159en\u00ed a odstra\u0148ov\u00e1n\u00ed sn\u00edmk\u016f disk\u016f.<\/p>\n<h3>Hlavn\u00ed obt\u00ed\u017e a jej\u00ed p\u0159ekon\u00e1n\u00ed<\/h3>\n<p>\nNedostatek mo\u017enosti zvy\u0161ov\u00e1n\u00ed disk\u016f v re\u00e1ln\u00e9m \u010dase v API Yandex.Cloud \u2014 omezen\u00ed, kter\u00e9 zt\u011b\u017euje operaci resize pro PV (Persistent Volume): v\u017edy\u0165 v takov\u00e9m p\u0159\u00edpad\u011b je nutn\u00e9, aby pod aplikace, kter\u00e1 pou\u017e\u00edv\u00e1 disk, byl zastaven, a to m\u016f\u017ee zp\u016fsobit nefunk\u010dnost aplikace.<\/p>\n<p>Podle <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/container-storage-interface\/spec\">specifikace CSI<\/a><\/noindex>, pokud CSI \u0159adi\u010d hl\u00e1s\u00ed, \u017ee um\u00ed prov\u00e1d\u011bt resize disk\u016f pouze \u201eoffline\u201c (<code>VolumeExpansion.OFFLINE<\/code>), pak proces zvy\u0161ov\u00e1n\u00ed disku mus\u00ed prob\u00edhat takto:<\/p>\n<blockquote><p>Pokud plugin m\u00e1 pouze <code>VolumeExpansion.OFFLINE<\/code> capability pro zv\u011bt\u0161en\u00ed a objem je aktu\u00e1ln\u011b publikov\u00e1n nebo dostupn\u00fd na uzlu, pak <code>ControllerExpandVolume<\/code> MUS\u00cd b\u00fdt vol\u00e1n POUZE po:<\/p>\n<ul>\n<li> Plugin m\u00e1 \u0159adi\u010d <code>PUBLISH_UNPUBLISH_VOLUME<\/code> capability a <code>ControllerUnpublishVolume<\/code> byl \u00fasp\u011b\u0161n\u011b vyvol\u00e1n.<\/li>\n<\/ul>\n<p>\nNEBO<\/p>\n<ul>\n<li> Pokud plugin NEM\u00c1 \u0159adi\u010d <code>PUBLISH_UNPUBLISH_VOLUME<\/code> capability, plugin m\u00e1 uzlov\u00e9 <code>STAGE_UNSTAGE_VOLUME<\/code> capability a <code>NodeUnstageVolume<\/code> byl \u00fasp\u011b\u0161n\u011b dokon\u010den.<\/li>\n<\/ul>\n<p>\nNEBO<\/p>\n<ul>\n<li>Pokud plugin NEM\u00c1 \u0159adi\u010d <code>PUBLISH_UNPUBLISH_VOLUME<\/code> kapacitu, ani uzel <code>STAGE_UNSTAGE_VOLUME<\/code> capability a <code>NodeUnpublishVolume<\/code> byl \u00fasp\u011b\u0161n\u011b dokon\u010den.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nV podstat\u011b to znamen\u00e1, \u017ee je nutn\u00e9 odpojit disk od virtu\u00e1ln\u00edho stroje, ne\u017e ho zv\u011bt\u0161\u00edte.<\/p>\n<p>Bohu\u017eel v\u0161ak, <b>implementace<\/b> specifikace CSI prost\u0159ednictv\u00edm sidecar\u016f neodpov\u00eddaj\u00ed t\u011bmto po\u017eadavk\u016fm:<\/p>\n<ul>\n<li> V sidecar kontejneru <code>csi-attacher<\/code>, kter\u00fd by m\u011bl zaji\u0161\u0165ovat p\u0159\u00edtomnost pot\u0159ebn\u00e9ho intervalu mezi mont\u00e1\u017eemi, nen\u00ed p\u0159i offline-resize jednodu\u0161e tento funk\u010dn\u00ed prvek realizov\u00e1n. Diskusi o tom iniciovali <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-csi\/external-attacher\/issues\/207\">zde<\/a><\/noindex>.<\/li>\n<li> Co vlastn\u011b znamen\u00e1 sidecar kontejner v tomto kontextu? Samotn\u00fd CSI plugin se nezab\u00fdv\u00e1 interakc\u00ed s Kubernetes API, ale pouze reaguje na gRPC vol\u00e1n\u00ed, kter\u00e1 mu pos\u00edlaj\u00ed sidecar kontejnery. Tyto <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/sidecar-containers.html\">jsou vyv\u00edjeny<\/a><\/noindex> komunity Kubernetes.<\/li>\n<\/ul>\n<p>\nV na\u0161em p\u0159\u00edpad\u011b (CSI plugin) operace zv\u011bt\u0161en\u00ed disku vypad\u00e1 takto:<\/p>\n<ol>\n<li> Z\u00edsk\u00e1v\u00e1me gRPC vol\u00e1n\u00ed <code>ControllerExpandVolume<\/code>;<\/li>\n<li> Sna\u017e\u00edme se zv\u011bt\u0161it disk v API, ale obdr\u017e\u00edme chybu o nemo\u017enosti prov\u00e9st operaci, proto\u017ee disk je p\u0159ipojen;<\/li>\n<li> Ukl\u00e1d\u00e1me identifik\u00e1tor disku do mapy, kter\u00e1 obsahuje disky, pro kter\u00e9 je t\u0159eba prov\u00e9st operaci zv\u011bt\u0161en\u00ed. D\u00e1le pro stru\u010dnost budeme tuto mapu naz\u00fdvat <code>volumeResizeRequired<\/code>;<\/li>\n<li> Ru\u010dn\u00edm zp\u016fsobem odstra\u0148ujeme pod, kter\u00fd pou\u017e\u00edv\u00e1 disk. Kubernetes ho p\u0159itom restartuje. Aby disk nebyl p\u0159ipojen (<code>ControllerPublishVolume<\/code>) p\u0159ed dokon\u010den\u00edm operace zv\u011bt\u0161en\u00ed p\u0159i pokusu o p\u0159ipojen\u00ed, kontrolujeme, \u017ee tento disk je st\u00e1le v <code>volumeResizeRequired<\/code> a vrac\u00edme chybu;<\/li>\n<li> CSI ovlada\u010d se znovu pokou\u0161\u00ed prov\u00e9st operaci resize. Pokud je operace \u00fasp\u011b\u0161n\u00e1, odstran\u00edme disk z <code>volumeResizeRequired<\/code>;<\/li>\n<li> Jeliko\u017e identifik\u00e1tor disku nen\u00ed p\u0159\u00edtomen v <code>volumeResizeRequired<\/code>, <code>ControllerPublishVolume<\/code> proch\u00e1z\u00ed \u00fasp\u011b\u0161n\u011b, disk se p\u0159ipojuje, pod se spou\u0161t\u00ed.<\/li>\n<\/ol>\n<p>\nV\u0161e vypad\u00e1 docela jednodu\u0161e, ale jako v\u017edy jsou tu skryt\u00e9 \u00faskal\u00ed. Zv\u011bt\u0161en\u00ed disk\u016f zaji\u0161\u0165uje <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/external-resizer.html\">external-resizer<\/a><\/noindex>, kter\u00fd v p\u0159\u00edpad\u011b chyby p\u0159i prov\u00e1d\u011bn\u00ed operace <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-csi\/external-resizer\/blob\/master\/vendor\/k8s.io\/client-go\/util\/workqueue\/default_rate_limiters.go#L41\">pou\u017e\u00edv\u00e1 frontu<\/a><\/noindex> s exponenci\u00e1ln\u011b se zvy\u0161uj\u00edc\u00edmi \u010dasov\u00fdmi limity a\u017e 1000 sekund:<\/p>\n<pre><code class=\"go\">func DefaultControllerRateLimiter() RateLimiter {\n  return NewMaxOfRateLimiter(\n  NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second),\n  \t\/\/ 10 qps, 100 velikost bucketu. Toto je pouze pro rychlost opakov\u00e1n\u00ed a je to jen celkov\u00fd faktor (ne na polo\u017eku)\n  &amp;BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},\n  )\n}<\/code><\/pre>\n<p>\nTo m\u016f\u017ee ob\u010das zp\u016fsobit, \u017ee operace zv\u011bt\u0161en\u00ed disku se protahuje na v\u00edce ne\u017e 15 minut a t\u00edm doch\u00e1z\u00ed k nedostupnosti odpov\u00eddaj\u00edc\u00edho podu.<\/p>\n<p>Jedinou mo\u017enost\u00ed, kter\u00e1 n\u00e1m dostate\u010dn\u011b snadno a bezbolestn\u011b umo\u017enila sn\u00ed\u017eit potenci\u00e1ln\u00ed dobu prostoj\u016f, bylo pou\u017eit\u00ed na\u0161\u00ed verze external-resizer s maxim\u00e1ln\u00edm limitem \u010dasov\u00e9ho limitu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/external-resizer\/blob\/faster-workqueue\/pkg\/controller\/controller.go#L81\">na 5 sekund<\/a><\/noindex>:<\/p>\n<pre><code class=\"go\">workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)<\/code><\/pre>\n<p>\nNehodlali jsme urgentn\u011b iniciovat diskusi a patchovat external-resizer, proto\u017ee offline resizing disk\u016f je atavismus, kter\u00fd brzy vymiz\u00ed u v\u0161ech poskytovatel\u016f cloudu.<\/p>\n<h2>Jak za\u010d\u00edt pou\u017e\u00edvat?<\/h2>\n<p>\nOvlada\u010d je podporov\u00e1n v Kubernetes verzi 1.15 a v\u00fd\u0161e. Pro funkci ovlada\u010de mus\u00ed b\u00fdt spln\u011bny n\u00e1sleduj\u00edc\u00ed po\u017eadavky:<\/p>\n<ul>\n<li> P\u0159ep\u00edna\u010d <code>--allow-privileged<\/code> nastaven na hodnotu <code>true<\/code> pro API server a kubelet;<\/li>\n<li> Zapnuto <code>--feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true<\/code> pro API server a kubelet;<\/li>\n<li> \u0160\u00ed\u0159en\u00ed montov\u00e1n\u00ed (<noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/#mount-propagation\">mount propagation<\/a><\/noindex>) mus\u00ed b\u00fdt povoleno v clusteru. P\u0159i pou\u017eit\u00ed Dockeru mus\u00ed b\u00fdt d\u00e9mon nakonfigurov\u00e1n tak, aby bylo povoleno sd\u00edlen\u00e9 montov\u00e1n\u00ed (shared mounts).<\/li>\n<\/ul>\n<p>\nV\u0161echny pot\u0159ebn\u00e9 kroky pro samotnou instalaci <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver#installing-driver\">jsou pops\u00e1ny v README<\/a><\/noindex>. Instalace zahrnuje vytv\u00e1\u0159en\u00ed objekt\u016f v Kubernetes z manifest\u016f.<\/p>\n<p>Pro provoz ovlada\u010de budete pot\u0159ebovat n\u00e1sleduj\u00edc\u00ed:<\/p>\n<ul>\n<li> Uveden\u00ed identifik\u00e1toru adres\u00e1\u0159e v manifestu (<code>folder-id<\/code>) Yandex.Cloud (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/resource-manager\/operations\/folder\/get-id\">viz dokumentaci<\/a><\/noindex>);<\/li>\n<li> Pro interakci s API Yandex.Cloud v CSI ovlada\u010di se pou\u017e\u00edv\u00e1 servisn\u00ed \u00fa\u010det. V manifestu Secret je t\u0159eba p\u0159edat <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.com\/docs\/iam\/concepts\/authorization\/key\">autorizovan\u00e9 kl\u00ed\u010de<\/a><\/noindex> od servisn\u00edho \u00fa\u010dtu. V dokumentaci <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/iam\/quickstart-sa\">je pops\u00e1no<\/a><\/noindex>, jak vytvo\u0159it servisn\u00ed \u00fa\u010det a z\u00edskat kl\u00ed\u010de.<\/li>\n<\/ul>\n<p>\nObecn\u011b \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">zkuste<\/a><\/noindex>, a budeme r\u00e1di za zp\u011btnou vazbu a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\/issues\">nov\u00e9 probl\u00e9my<\/a><\/noindex>, pokud naraz\u00edte na n\u011bjak\u00e9 probl\u00e9my!<\/p>\n<h2>Dal\u0161\u00ed podpora<\/h2>\n<p>\nNa z\u00e1v\u011br bychom r\u00e1di zd\u016fraznili, \u017ee tento CSI ovlada\u010d jsme implementovali ne z velk\u00e9 touhy zab\u00fdvat se v\u00fdvojem aplikac\u00ed v Go, ale z nal\u00e9hav\u00e9 pot\u0159eby uvnit\u0159 spole\u010dnosti. Nep\u0159ijde n\u00e1m rozumn\u00e9 udr\u017eovat vlastn\u00ed implementaci, proto pokud Yandex projev\u00ed z\u00e1jem a rozhodne se pokra\u010dovat v podpo\u0159e ovlada\u010de, r\u00e1di p\u0159ed\u00e1me repozit\u00e1\u0159 do jejich spr\u00e1vy.<\/p>\n<p>Krom\u011b toho m\u00e1 Yandex pravd\u011bpodobn\u011b ve spravovan\u00e9m clusteru Kubernetes vlastn\u00ed implementaci CSI ovlada\u010de, kter\u00fd lze vydat jako Open Source. Takov\u00e1 mo\u017enost se n\u00e1m tak\u00e9 jev\u00ed jako p\u0159\u00edzniv\u00e1 \u2014 komunita by mohla vyu\u017e\u00edvat osv\u011bd\u010den\u00fd ovlada\u010d od poskytovatele slu\u017eeb, nikoli od t\u0159et\u00ed strany.<\/p>\n<h2>P.S.<\/h2>\n<p>\nP\u0159e\u010dt\u011bte si tak\u00e9 n\u00e1\u0161 blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">Pluginy \u00falo\u017ei\u0161t\u011b pro Kubernetes: od Flexvolume k CSI<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">Rozum\u00edme Container Storage Interface (v Kubernetes a nejen tam)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">P\u0159\u00edprava Kubernetes clusteru je jednoduch\u00e1 a pohodln\u00e1? Annonce addon-operator<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">Roz\u0161i\u0159ujeme a dopl\u0148ujeme Kubernetes (p\u0159ehled a video z p\u0159edn\u00e1\u0161ky)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/486190\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0434\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u00ab\u0424\u043b\u0430\u043d\u0442\u00bb \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 Open Source-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f Kubernetes, \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0432 \u0430\u043b\u044c\u0444\u0430-\u0432\u0435\u0440\u0441\u0438\u044e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 CSI (Container Storage Interface) \u0434\u043b\u044f \u042f\u043d\u0434\u0435\u043a\u0441.\u041e\u0431\u043b\u0430\u043a\u0430. \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0434\u0435\u0442\u0430\u043b\u044f\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u0442\u0432\u0435\u0442\u0438\u043c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0443 \u042f\u043d\u0434\u0435\u043a\u0441\u0430 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0430 Managed Service for Kubernetes. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e? \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0435\u0449\u0451 \u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":40722,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-40721","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0434\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f.\" \/>\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\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka\" \/>\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\u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 CSI-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0432 Kubernetes \u0434\u043b\u044f \u042f\u043d\u0434\u0435\u043a\u0441.\u041e\u0431\u043b\u0430\u043a\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0434\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka\" \/>\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-03T11:41:59+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-03T11:41:59+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\udd47Na\u0161e zku\u0161enost s v\u00fdvojem CSI ovlada\u010de v Kubernetes pro Yandex.Cloud | ProHoster","description":"S pot\u011b\u0161en\u00edm oznamujeme, \u017ee spole\u010dnost.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","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\u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 CSI-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0432 Kubernetes \u0434\u043b\u044f \u042f\u043d\u0434\u0435\u043a\u0441.\u041e\u0431\u043b\u0430\u043a\u0430 | ProHoster","og:description":"\u0420\u0430\u0434\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f.","og:url":"https:\/\/prohoster.info\/cs\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","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-03T11:41:59+00:00","article:modified_time":"2020-02-03T11:41:59+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"40721","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-03-01 00:32:40","updated":"2022-09-30 15:42:14","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\/40721","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=40721"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/40721\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/40722"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=40721"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=40721"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=40721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}