{"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\/et\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","title":{"rendered":"Meie kogemus CSI-draiveri arendamisel Kuberneteses Yandex.Cloudile","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Meie kogemus CSI-draiveri arendamisel Kuberneteses Yandex.Cloudile\" src=\"\/wp-content\/uploads\/2020\/02\/86adf77b2ee08c426bf79c5b9b2d3d1e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMeil on hea meel teatada, et ettev\u00f5te \u00abFlant\u00bb suurendab oma panust Kubernetes'e avatud l\u00e4htekoodiga t\u00f6\u00f6riistadesse, vabastades <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">CSI draiveri alpha versiooni<\/a><\/noindex> (Container Storage Interface) Yandex Cloud'ile.<\/p>\n<p>Aga enne, kui l\u00e4heme rakendamise \u00fcksikasjade juurde, vastame k\u00fcsimusele, miks see \u00fcldse vajalik on, kui Yandex'il on juba teenus <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>Sissejuhatus<\/h2>\n<p><\/p>\n<h3>Miks see on vajalik?<\/h3>\n<p>\nK\u00e4esoleva ettev\u00f5tte sees, alates Kubernetes'e tootmisest meie poolt (st juba mitu aastat), on arenenud meie enda t\u00f6\u00f6riist (deckhouse), mille me plaanime peagi avatud l\u00e4htekoodiga projektiks muuta. Selle abil konfigureerime ja seadistame me k\u00f5ik oma klastrid \u00fchtlaselt, ja praegu on neid juba \u00fcle 100, erinevates riistvarakonfiguratsioonides ja k\u00f5igis pakutavates pilveteenustes.<\/p>\n<p>Deckhouse'i kasutavad klastrid sisaldavad k\u00f5iki vajalikke komponente t\u00f6\u00f6ks: koormuse tasakaalustajad, mugava graafikuga j\u00e4lgimine, m\u00f5\u00f5dikud ja hoiatused, autentimine v\u00e4liste pakkujate kaudu juurdep\u00e4\u00e4suks k\u00f5igile juhtpaneelidele ja nii edasi. Sellise \"t\u00e4iustatud\" klastriga ei ole m\u00f5tet kasutada hallatud lahendust, kuna sageli pole seda kas v\u00f5imalik v\u00f5i see n\u00f5uab poole komponentide v\u00e4lja l\u00fclitamist.<\/p>\n<p><i><b>NB<\/b>: See on meie kogemus ja see on \u00fcsna spetsiifiline. Me ei v\u00e4ida sugugi, et iga\u00fchel tasuks ise tegeleda Kubernetes'e klastrite k\u00e4ivitamisega, selle asemel et kasutada valmislahendusi. \u00dctleme nii, et meil ei ole reaalset kogemust Yandexi Kubernetes'e kasutamisega ning me ei anna selle teenuse kohta selles artiklis mingit hinnangut.<\/i><\/p>\n<h3>Mis see on ja kellele see on m\u00f5eldud?<\/h3>\n<p>\nNii et me oleme juba r\u00e4\u00e4kinud kaasaegsetest l\u00e4henemistest Kubernetes'e salvestustes: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">kuidas CSI t\u00f6\u00f6tab<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">kuidas kogukond j\u00f5udis<\/a><\/noindex> sellise l\u00e4henemiseni.<\/p>\n<p>Praegu on paljud suured pilveteenuste pakkujad v\u00e4lja t\u00f6\u00f6tanud draivereid, et kasutada oma \"pilve\" kettaid kui Persistent Volume Kuberneteses. Kui sellist draiverit pakkujal ei ole, kuid k\u00f5ik vajalikud funktsioonid on saadaval API kaudu, siis ei ole midagi takistamas oma draiveri loomist. Meie puhul tegime just sedasi Yandex.Cloudiga.<\/p>\n<p>Arenduse aluseks v\u00f5tsime <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/digitalocean\/csi-digitalocean\">CSI-draiveri DigitalOceanile<\/a><\/noindex> ja paar ideed <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/gcp-compute-persistent-disk-csi-driver\">GCP-draiverist<\/a><\/noindex>, sest nende pilvede (Google ja Yandex) API-de vahel on mitmeid sarnasusi. Eelk\u00f5ige tagastavad API-d nii <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/api\/how-tos\/api-requests-responses#handling_api_responses\">GCP<\/a><\/noindex>kui ka <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/api-design-guide\/concepts\/about-async\">Yandex<\/a><\/noindex> objekti <code>Operation<\/code> pikemate operatsioonide oleku j\u00e4lgimiseks (n\u00e4iteks uue ketta loomine). Yandex.Cloud API-ga suhtlemiseks kasutatakse <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex-cloud\/go-sdk\">Yandex.Cloud Go SDK-d<\/a><\/noindex>.<\/p>\n<p>Tehtud t\u00f6\u00f6 tulemus <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">on avaldatud GitHubis<\/a><\/noindex> ja v\u00f5ib olla kasulik neile, kes mingil p\u00f5hjusel kasutavad oma Kubernetes'i installeerimist Yandex.Cloudi virtuaalmasinatel (kuid mitte valmis hallatud klastrit) ja soovivad kasutada (tellida) kettaid CSI kaudu.<\/p>\n<h2>Rakendus<\/h2>\n<p><\/p>\n<h3>Peamised funktsioonid<\/h3>\n<p>\nPraegu toetab draiver j\u00e4rgmisi funktsioone:<\/p>\n<ul>\n<li> Kettad tellimine k\u00f5igis klastritsoonides vastavalt klastris olevate s\u00f5lmede topoloogiale;<\/li>\n<li> Varem tellitud ketaste eemaldamine;<\/li>\n<li> Ketaste offline-m\u00f5\u00f5tmete muutmine (Yandex. Cloud <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/compute\/operations\/disk-control\/update#change-disk-size\">tugi<\/a><\/noindex> ketaste suurendamine, mis on kinnitatud virtuaalmasinale). Kuidas tuli draiverit t\u00e4iustada, et v\u00f5imalikult valutult m\u00f5\u00f5tmeid muuta, vt allpool.<\/li>\n<\/ul>\n<p>\nTulevikus on plaanis rakendada diskisnapshotide loomise ja kustutamise toetust.<\/p>\n<h3>Peamine keerukus ja selle \u00fcletamine<\/h3>\n<p>\nYandex. Cloud API-s puudub reaalajas ketaste suurendamise v\u00f5imalus \u2014 piirang, mis raskendab PV (Persistent Volume) m\u00f5\u00f5tmete muutmise operatsiooni: sel juhul peab rakenduse pod, mis kasutab ketast, olema peatatud, mis v\u00f5ib p\u00f5hjustada rakenduse seiskumist.<\/p>\n<p>Vastavalt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/container-storage-interface\/spec\">CSI spetsifikatsioonid<\/a><\/noindex>, kui CSI-kontroller teatab, et suudab suurendada kettaid ainult \"offline\" (<code>VolumeExpansion.OFFLINE<\/code>), siis peab ketta suurendamise protsess toimuma j\u00e4rgmiselt:<\/p>\n<blockquote><p>Kui pistikprogramm omab ainult <code>VolumeExpansion.OFFLINE<\/code> suurendamise v\u00f5imalust ja maht on hetkel avalikustatud v\u00f5i node'il saadaval, siis <code>ControllerExpandVolume<\/code> PEAB olema kutsutud AINULT p\u00e4rast j\u00e4rgmist:<\/p>\n<ul>\n<li> Pistikprogrammil on kontroller <code>PUBLISH_UNPUBLISH_VOLUME<\/code> v\u00f5ime ja <code>ControllerUnpublishVolume<\/code> on edukalt k\u00e4ivitatud.<\/li>\n<\/ul>\n<p>\nV\u00f5i<\/p>\n<ul>\n<li> Pistikprogrammil ei ole kontrolleri <code>PUBLISH_UNPUBLISH_VOLUME<\/code> v\u00f5imet, pistikprogrammil on node'i <code>STAGE_UNSTAGE_VOLUME<\/code> v\u00f5ime ja <code>NodeUnstageVolume<\/code> on arvutatud edukalt.<\/li>\n<\/ul>\n<p>\nV\u00f5i<\/p>\n<ul>\n<li>Pistikprogrammil ei ole kontrolleri <code>PUBLISH_UNPUBLISH_VOLUME<\/code> v\u00f5ime, ega s\u00f5lm <code>STAGE_UNSTAGE_VOLUME<\/code> v\u00f5ime ja <code>NodeUnpublishVolume<\/code> on l\u00f5petatud edukalt.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nSee t\u00e4hendab, et enne ketta suurendamist tuleb see virtuaalsest masinast eemaldada.<\/p>\n<p>Kahjuks aga <b>teostamine<\/b> CSI spetsifikatsiooni rakendamine sidecar\u2019ide kaudu ei vasta nendele n\u00f5uetele:<\/p>\n<ul>\n<li> Sidecar-konteineris <code>csi-attacher<\/code>, mis peaks tagama vajaliku ajavahemiku montaa\u017eide vahel, ei ole offline-suurendamise korral see funktsionaalsus lihtsalt olemas. Arutelu selle \u00fcle on algatanud <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-csi\/external-attacher\/issues\/207\">siit<\/a><\/noindex>.<\/li>\n<li> Mis on \u00fcldse sidecar-konteiner antud kontekstis? Isegi CSI-plugin ei tegele interaktsiooniga Kubernetes API-ga, vaid reageerib ainult gRPC-k\u00f5nedele, mida saadavad talle sidecar-konteinerid. Viimased <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/sidecar-containers.html\">arendatakse<\/a><\/noindex> Kubernetes'i kogukonna poolt.<\/li>\n<\/ul>\n<p>\nMeie (CSI-plugin) olukorras n\u00e4eb ketta suurendamise operatsioon v\u00e4lja selline:<\/p>\n<ol>\n<li> Saame gRPC-k\u00f5ne <code>ControllerExpandVolume<\/code>;<\/li>\n<li> P\u00fc\u00fcdleme ketta suurendamise poole API-s, kuid saame vea, et operatsiooni ei saa teostada, kuna disk on monteeritud;<\/li>\n<li> Salvestame ketta identifikaatori kaardile, mis sisaldab diskide loendit, mille jaoks tuleb suurendamise operatsioon l\u00e4bi viia. Edaspidi nimetame seda kaarti <code>volumeResizeRequired<\/code>;<\/li>\n<li> K\u00e4sitsi eemaldame pod'i, mis kasutab ketast. Kubernetes k\u00e4ivitab selle uuesti. Et k\u00f5vaketas ei j\u00f5uaks monteeruda (<code>ControllerPublishVolume<\/code>) enne, kui suurendamise protsess on l\u00f5pule j\u00f5udnud montaa\u017ei katsetamisel, kontrollime, et see k\u00f5vaketas on endiselt <code>volumeResizeRequired<\/code> ja tagastame veateate;<\/li>\n<li> CSI-draiver p\u00fc\u00fcab suurendamise toimingut uuesti teostada. Kui toiming on edukas, eemaldame ketta <code>volumeResizeRequired<\/code>;<\/li>\n<li> Kuna ketta ID puudub <code>volumeResizeRequired<\/code>, <code>ControllerPublishVolume<\/code> l\u00e4biviimine on edukas, ketas monteeritakse, pod k\u00e4ivitub.<\/li>\n<\/ol>\n<p>\nK\u00f5ik tundub piisavalt lihtne, kuid nagu alati, on ka varjatud ohte. Ketaste suurendamist teostab <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/external-resizer.html\">external-resizer<\/a><\/noindex>, mis veateate korral toimingu teostamisel <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\">kasutab j\u00e4rjekorda<\/a><\/noindex> \u00e4ge, millel on eksponentsiaalne aja piirangu suurenemine kuni 1000 sekundit:<\/p>\n<pre><code class=\"go\">func DefaultControllerRateLimiter() RateLimiter {\n  return NewMaxOfRateLimiter(\n  NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second),\n  \/\/ 10 qps, 100 bucket size.  This is only for retry speed and its only the overall factor (not per item)\n  &amp;BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},\n  )\n}<\/code><\/pre>\n<p>\nSee v\u00f5ib perioodiliselt p\u00f5hjustada, et ketta suurendamise operatsioon venib 15+ minutiks, muutes seega vastava pod'i k\u00e4tte saamata.<\/p>\n<p>Ainus variant, mis v\u00f5imaldas meil piisavalt lihtsalt ja valutult v\u00e4hendada v\u00f5imaliku seisaku aega, oli oma versiooni external-resizer kasutamine maksimaalse ajapiiranguga <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/external-resizer\/blob\/faster-workqueue\/pkg\/controller\/controller.go#L81\">5 sekundit<\/a><\/noindex>:<\/p>\n<pre><code class=\"go\">workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)<\/code><\/pre>\n<p>\nMe ei pidanud vajalikuks \u00e4kitselt arutelu algatada ja external-resizerit parandama, kuna offline diskide \u00fcmberm\u00f5\u00f5tmine on reliikvia, mis varsti kaob k\u00f5igilt pilveteenuse pakkujalt.<\/p>\n<h2>Kuidas alustada kasutamist?<\/h2>\n<p>\nJuhtimist toetatakse Kubernetes versioonis 1.15 ja k\u00f5rgem. Juhtimise t\u00f6\u00f6tamiseks tuleb j\u00e4rgida j\u00e4rgmisi n\u00f5udeid:<\/p>\n<ul>\n<li> Lipp <code>--allow-privileged<\/code> seadistatud v\u00e4\u00e4rtuseks <code>true<\/code> API-serveri ja kubelet'i jaoks;<\/li>\n<li> K\u00e4ivitatud <code>--feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true<\/code> API-serveri ja kubelet'i jaoks;<\/li>\n<li> Mountimise levik (<noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/#mount-propagation\">mount propagation<\/a><\/noindex>) peab olema klastris lubatud. Dockerit kasutades peab daemon olema konfigureeritud nii, et jagatud mount'id oleksid lubatud.<\/li>\n<\/ul>\n<p>\nK\u00f5ik vajalikud sammud paigaldamise kohta <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver#installing-driver\">on toodud README's.<\/a><\/noindex>Installeerimine h\u00f5lmab objektide loomist Kuberneteses manifestide p\u00f5hjal.<\/p>\n<p>Juhtimise jaoks on teil vaja j\u00e4rgmist:<\/p>\n<ul>\n<li> M\u00e4\u00e4rake manifeestis katalooge identiteet (<code>folder-id<\/code>) Yandex Cloud (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/resource-manager\/operations\/folder\/get-id\">vt. dokumentatsioon<\/a><\/noindex>);<\/li>\n<li> Yandex Cloud API-ga suhtlemiseks kasutatakse CSI-draiveris teenusekontot. Manifeedis Secrets peate edastama <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.com\/docs\/iam\/concepts\/authorization\/key\">autorizatsiooniv\u00f5tmed<\/a><\/noindex> teenusekontolt. Dokumentatsioonis <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/iam\/quickstart-sa\">detailsemalt<\/a><\/noindex>, kuidas luua teenusekonto ja saada v\u00f5tmed.<\/li>\n<\/ul>\n<p>\n\u00dcldiselt \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">proovige<\/a><\/noindex>, ja me ootame head tagasisidet ja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\/issues\">uusi probleeme<\/a><\/noindex>, kui peaksite silmitsi seisma probleemidega!<\/p>\n<h2>Edasine tugi<\/h2>\n<p>\nKokkuv\u00f5tteks tahaksime m\u00e4rkida, et seda CSI-draiverit ei ole me ellu viinud \u00fcksnes suures soovist rakenduste arendamisega tegeleda, vaid ettev\u00f5ttes sisemise terava vajaduse t\u00f5ttu. Oma rakenduse toetamist ei pea me m\u00f5istlikuks, seega, kui Yandex peaks n\u00e4itama huvi ja otsustama draiveri toe j\u00e4tkuvuse, siis anname hea meelega hoidla nende k\u00e4sutusse.<\/p>\n<p>Lisaks on ilmselt Yandexi managed Kubernetes klastris oma CSI draiveri rakendus, mille saab avada Open Source'iks. Selline suund tundub meile samuti soodne \u2014 kogukond saab kasutada teenusepakkujast kontrollitud draiverit, mitte kolmanda osapoole firma oma.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLugege ka meie blogist:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">Kubernetesi mahutite pluginate haldus: Flexvolume'ist CSI-ni<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">M\u00f5istame Container Storage Interface'i (Kubernetes'is ja mitte ainult)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">Kubernetes-kl\u00f5ster on lihtne ja mugav seadistada? Tutvustame addon-operatorit<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">Kubernetesi laiendamine ja t\u00e4iendamine (\u00fclevaade ja video ettekandest)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Allikas: <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 4.9.10 - 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 \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\" \/>\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\/et\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47Meie kogemus CSI-draiveri arendamisel Kubernetes jaoks Yandex.Cloud'is | ProHoster","description":"Meil on hea meel teatada, et ettev\u00f5te \u201eFlant\u201d t\u00e4iendab oma panust Open Source t\u00f6\u00f6riistadesse Kubernetes jaoks, vabastades Yandex.Cloud'i jaoks CSI (Container Storage Interface) draiveri alfa versiooni. Enne kui l\u00e4heme elluviimise \u00fcksikasjade juurde, vastame k\u00fcsimusele, miks see \u00fcldse vajalik on, kui Yandexil on juba Managed Service for Kubernetes teenus. Sissejuhatus Miks see on vajalik? Meie ettev\u00f5ttes, juba","canonical_url":"https:\/\/prohoster.info\/et\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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 \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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/40721","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=40721"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/40721\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/40722"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=40721"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=40721"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=40721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}