{"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\/it\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","title":{"rendered":"La nostra esperienza nella sviluppo di un driver CSI in Kubernetes per Yandex.Cloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"La nostra esperienza nella sviluppo di un driver CSI in Kubernetes per Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/86adf77b2ee08c426bf79c5b9b2d3d1e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiamo lieti di annunciare che l'azienda \u00abFlant\u00bb sta contribuendo agli strumenti Open Source per Kubernetes, rilasciando <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">la versione alpha del driver CSI<\/a><\/noindex> (Container Storage Interface) per Yandex.Cloud.<\/p>\n<p>Ma prima di parlare dei dettagli di implementazione, rispondiamo alla domanda: perch\u00e9 \u00e8 necessario, quando Yandex ha gi\u00e0 il servizio <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>Introduzione<\/h2>\n<p><\/p>\n<h3>Perch\u00e9?<\/h3>\n<p>\nAll'interno della nostra azienda, fin dall'inizio dell'uso di Kubernetes in produzione (cio\u00e8 gi\u00e0 da diversi anni), si \u00e8 sviluppato uno strumento proprietario (deckhouse), che, per inciso, intendiamo rendere disponibile come progetto Open Source a breve. Con questo strumento configurando e impostiamo uniformemente tutti i nostri cluster, e attualmente ne abbiamo pi\u00f9 di 100, su varie configurazioni hardware e in tutti i servizi cloud disponibili.<\/p>\n<p>I cluster che utilizzano deckhouse includono tutti i componenti necessari per il funzionamento: bilanciatori, monitoraggio con grafici, metriche e avvisi intuitivi, autenticazione degli utenti tramite fornitori esterni per l'accesso a tutti i dashboard e cos\u00ec via. Non ha senso utilizzare un cluster cos\u00ec \"potenziato\" in una soluzione gestita, poich\u00e9 spesso ci\u00f2 \u00e8 impossibile o comporta la disattivazione della met\u00e0 dei componenti.<\/p>\n<p><i><b>NB<\/b>: Questa \u00e8 la nostra esperienza, che \u00e8 piuttosto specifica. Non affermiamo in alcun modo che tutti dovrebbero occuparsi della distribuzione dei cluster Kubernetes anzich\u00e9 utilizzare soluzioni pronte. A proposito, non abbiamo esperienze reali di utilizzo di Kubernetes di Yandex e non daremo alcuna valutazione di questo servizio in questo articolo.<\/i><\/p>\n<h3>Cos'\u00e8 e per chi?<\/h3>\n<p>\nQuindi, abbiamo gi\u00e0 parlato del moderno approccio ai repository in Kubernetes: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">come funziona il CSI<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">come la comunit\u00e0 \u00e8 arrivata<\/a><\/noindex> a questo approccio.<\/p>\n<p>Attualmente, molti grandi fornitori di servizi cloud hanno sviluppato driver per utilizzare i loro \"dischi cloud\" come Persistent Volume in Kubernetes. Tuttavia, se il fornitore non dispone di un driver del genere, ma tutte le funzionalit\u00e0 necessarie sono fornite tramite API, nulla impedisce di implementare un driver autonomamente. \u00c8 esattamente quello che abbiamo fatto con Yandex.Cloud.<\/p>\n<p>Abbiamo preso come base per lo sviluppo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/digitalocean\/csi-digitalocean\">il driver CSI per il cloud di DigitalOcean<\/a><\/noindex> e alcune idee da <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/gcp-compute-persistent-disk-csi-driver\">driver per GCP<\/a><\/noindex>, poich\u00e9 l'interazione con le API di questi cloud (Google e Yandex) presenta alcune somiglianze. In particolare, le API sia di <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/api\/how-tos\/api-requests-responses#handling_api_responses\">GCP<\/a><\/noindex>che di <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/api-design-guide\/concepts\/about-async\">Yandex<\/a><\/noindex> restituiscono un oggetto <code>Operazione<\/code> per tenere traccia dello stato delle operazioni di lunga durata (ad esempio, la creazione di un nuovo disco). Per interagire con l'API di Yandex.Cloud, si utilizza <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex-cloud\/go-sdk\">Yandex.Cloud Go SDK<\/a><\/noindex>.<\/p>\n<p>Il risultato del lavoro svolto <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">\u00e8 stato pubblicato su GitHub<\/a><\/noindex> e pu\u00f2 essere utile a chi, per qualche motivo, utilizza un'installazione personalizzata di Kubernetes su macchine virtuali di Yandex.Cloud (ma non un cluster gestito pronto all'uso) e desidera utilizzare (richiedere) dischi tramite CSI.<\/p>\n<h2>Implementazione<\/h2>\n<p><\/p>\n<h3>Funzionalit\u00e0 principali<\/h3>\n<p>\nAttualmente, il driver supporta le seguenti funzionalit\u00e0:<\/p>\n<ul>\n<li> Ordine dei dischi in tutte le zone del cluster secondo la topologia dei nodi esistenti nel cluster;<\/li>\n<li> Rimozione dei dischi ordinati in precedenza;<\/li>\n<li> Ridimensionamento offline per i dischi (Yandex.Cloud <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/compute\/operations\/disk-control\/update#change-disk-size\">non supporta<\/a><\/noindex> aumento dei dischi che sono montati sulla macchina virtuale). Per ulteriori informazioni su come \u00e8 stato necessario modificare il driver per eseguire il ridimensionamento in modo il meno possibile doloroso, vedere di seguito.<\/li>\n<\/ul>\n<p>\nIn futuro, \u00e8 previsto implementare il supporto per la creazione e la rimozione di snapshot dei dischi.<\/p>\n<h3>La principale difficolt\u00e0 e la sua soluzione<\/h3>\n<p>\nL'assenza nell'API di Yandex.Cloud della possibilit\u00e0 di aumentare i dischi in tempo reale \u00e8 una limitazione che complica l'operazione di ridimensionamento per PV (Persistent Volume): in questo caso, \u00e8 necessario che il pod dell'applicazione che utilizza il disco sia fermo, il che pu\u00f2 causare un'interruzione dell'applicazione.<\/p>\n<p>Secondo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/container-storage-interface\/spec\">specifiche CSI<\/a><\/noindex>, se il controller CSI comunica che pu\u00f2 eseguire il ridimensionamento dei dischi solo \"offline\" (<code>VolumeExpansion.OFFLINE<\/code>), allora il processo di aumento del disco deve avvenire nel seguente modo:<\/p>\n<blockquote><p>Se il plugin ha solo <code>VolumeExpansion.OFFLINE<\/code> capacit\u00e0 di espansione e il volume \u00e8 attualmente pubblicato o disponibile su un nodo, allora <code>ControllerExpandVolume<\/code> DEVE essere chiamato SOLO dopo che:<\/p>\n<ul>\n<li> Il plugin ha controller <code>PUBLISH_UNPUBLISH_VOLUME<\/code> capacit\u00e0 e <code>ControllerUnpublishVolume<\/code> \u00e8 stato invocato con successo.<\/li>\n<\/ul>\n<p>\nALTRIMENTI<\/p>\n<ul>\n<li> Il plugin NON ha capacit\u00e0 di controller, il plugin ha nodo <code>PUBLISH_UNPUBLISH_VOLUME<\/code> STAGE_UNSTAGE_VOLUME <code>STAGE_UNSTAGE_VOLUME<\/code> capacit\u00e0, e <code>NodeUnstageVolume<\/code> \u00e8 stato completato con successo.<\/li>\n<\/ul>\n<p>\nALTRIMENTI<\/p>\n<ul>\n<li>Il plugin NON ha capacit\u00e0 di controller, il plugin ha nodo <code>PUBLISH_UNPUBLISH_VOLUME<\/code> capacit\u00e0, n\u00e9 nodo <code>STAGE_UNSTAGE_VOLUME<\/code> capacit\u00e0, e <code>NodeUnpublishVolume<\/code> \u00e8 stato completato con successo.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nQuesto significa che \u00e8 necessario scollegare il disco dalla macchina virtuale prima di ingrandirlo.<\/p>\n<p>Tuttavia, sfortunatamente, <b>implementazione<\/b> le specifiche CSI tramite i sidecar non soddisfano questi requisiti:<\/p>\n<ul>\n<li> Nel contenitore sidecar <code>csi-attacher<\/code>, che deve garantire la necessaria pausa tra i montaggi, questa funzionalit\u00e0 non \u00e8 semplicemente realizzata durante il ridimensionamento offline. La discussione su questo \u00e8 stata avviata <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-csi\/external-attacher\/issues\/207\">qui<\/a><\/noindex>.<\/li>\n<li> Che cos'\u00e8 esattamente un contenitore sidecar in questo contesto? Il plugin CSI non interagisce con l'API di Kubernetes, ma risponde solo alle chiamate gRPC che gli inviano i contenitori sidecar. Questi ultimi <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/sidecar-containers.html\">vengono sviluppati<\/a><\/noindex> dalla comunit\u00e0 di Kubernetes.<\/li>\n<\/ul>\n<p>\nNel nostro caso (plugin CSI) l'operazione di ingrandimento del disco appare come segue:<\/p>\n<ol>\n<li> Riceviamo una chiamata gRPC <code>ControllerExpandVolume<\/code>;<\/li>\n<li> Proviamo ad aumentare il disco nell'API, ma riceviamo un errore che indica che l'operazione non pu\u00f2 essere eseguita poich\u00e9 il disco \u00e8 montato;<\/li>\n<li> Salviamo l'identificativo del disco in una mappa contenente i dischi per i quali \u00e8 necessaria l'operazione di ingrandimento. Per brevit\u00e0, ci riferiremo a questa mappa come <code>volumeResizeRequired<\/code>;<\/li>\n<li> Rimuoviamo manualmente il pod che utilizza il disco. Kubernetes lo riavvier\u00e0. Per evitare che il disco venga montato (<code>ControllerPublishVolume<\/code>) prima del completamento dell'operazione di aumento durante il tentativo di montaggio, verifichiamo che questo disco sia ancora in <code>volumeResizeRequired<\/code> e restituiamo un errore;<\/li>\n<li> il driver CSI tenta di rieseguire l'operazione di ridimensionamento. Se l'operazione ha avuto successo, rimuoviamo il disco da <code>volumeResizeRequired<\/code>;<\/li>\n<li> Poich\u00e9 l'identificatore del disco \u00e8 assente in <code>volumeResizeRequired<\/code>, <code>ControllerPublishVolume<\/code> l'operazione riesce, il disco viene montato e il pod viene avviato.<\/li>\n<\/ol>\n<p>\nTutto sembra abbastanza semplice, ma come sempre ci sono insidie. L'aumento dei dischi \u00e8 gestito da <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/external-resizer.html\">external-resizer<\/a><\/noindex>, che in caso di errore durante l'esecuzione dell'operazione <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\">utilizza una coda<\/a><\/noindex> con un aumento esponenziale del tempo di timeout fino a 1000 secondi:<\/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. Questo \u00e8 solo per la velocit\u00e0 di ripetizione e il suo unico fattore complessivo (non per ogni elemento)\n  &amp;BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},\n  )\n}<\/code><\/pre>\n<p>\nQuesto pu\u00f2 causare periodicamente il prolungamento dell'operazione di aumento del disco per 15+ minuti e, di conseguenza, la non disponibilit\u00e0 del pod corrispondente.<\/p>\n<p>L'unica opzione che ci ha permesso di ridurre facilmente e senza problemi il potenziale tempo di inattivit\u00e0 \u00e8 stata l'implementazione della nostra versione di external-resizer con un limite massimo di timeout. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/external-resizer\/blob\/faster-workqueue\/pkg\/controller\/controller.go#L81\">di 5 secondi<\/a><\/noindex>:<\/p>\n<pre><code class=\"go\">workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)<\/code><\/pre>\n<p>\nNon abbiamo ritenuto necessario avviare una discussione urgente e patchare external-resizer, poich\u00e9 il ridimensionamento offline dei dischi \u00e8 un retaggio che presto sparir\u00e0 per tutti i fornitori di cloud.<\/p>\n<h2>Come iniziare a utilizzare?<\/h2>\n<p>\nIl driver \u00e8 supportato in Kubernetes versione 1.15 e superiore. I seguenti requisiti devono essere soddisfatti per il funzionamento del driver:<\/p>\n<ul>\n<li> Flag <code>--allow-privileged<\/code> impostato su <code>true<\/code> per l'API server e kubelet;<\/li>\n<li> Abilitati <code>--feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true<\/code> per l'API server e kubelet;<\/li>\n<li> La propagazione del montaggio (<noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/#mount-propagation\">mount propagation<\/a><\/noindex>) deve essere abilitata nel cluster. Quando si utilizza Docker, il demone deve essere configurato in modo da consentire oggetti di montaggio condivisi (shared mounts).<\/li>\n<\/ul>\n<p>\nTutti i passaggi necessari per l'installazione stessa <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver#installing-driver\">sono descritti nel README<\/a><\/noindex>. L'installazione comporta la creazione di oggetti in Kubernetes da manifesti.<\/p>\n<p>Per far funzionare il driver, avrai bisogno di quanto segue:<\/p>\n<ul>\n<li> Specificare nell'manifesto l'ID della cartella (<code>folder-id<\/code>) di Yandex.Cloud (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/resource-manager\/operations\/folder\/get-id\">vedi la documentazione<\/a><\/noindex>);<\/li>\n<li> Per interagire con l'API di Yandex.Cloud nel driver CSI, viene utilizzato un account di servizio. Nel manifesto Secret \u00e8 necessario fornire <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.com\/docs\/iam\/concepts\/authorization\/key\">le chiavi autorizzate<\/a><\/noindex> dell'account di servizio. Nella documentazione <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/iam\/quickstart-sa\">\u00e8 descritto<\/a><\/noindex>, come creare un account di servizio e ottenere le chiavi.<\/li>\n<\/ul>\n<p>\nIn generale \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">prova<\/a><\/noindex>, e saremo felici di ricevere feedback e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\/issues\">nuovi issues<\/a><\/noindex>, se incontri dei problemi!<\/p>\n<h2>Supporto ulteriore<\/h2>\n<p>\nIn conclusione, vorremmo sottolineare che questo driver CSI \u00e8 stato realizzato non per il puro piacere di scrivere applicazioni in Go, ma per un'esigenza urgente all'interno dell'azienda. Non ci sembra sensato mantenere la nostra implementazione, quindi, se Yandex manifester\u00e0 interesse e decider\u00e0 di continuare a supportare il driver, saremo felici di trasferire il repository a loro.<\/p>\n<p>Inoltre, \u00e8 probabile che Yandex abbia una propria implementazione del driver CSI nel cluster Kubernetes gestito, che potrebbe essere rilasciata in Open Source. Questa opzione per noi \u00e8 vista positivamente: la comunit\u00e0 potr\u00e0 usare un driver collaudato fornito dal fornitore di servizi, piuttosto che da una terza parte.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLeggete anche nel nostro blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">Plugin per volumi di storage in Kubernetes: da Flexvolume a CSI<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">Comprendiamo il Container Storage Interface (in Kubernetes e non solo)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">Creare un cluster Kubernetes \u00e8 semplice e conveniente? Annunciamo l'addon-operator<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">Ampliare e completare Kubernetes (panoramica e video della presentazione)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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\udd47La nostra esperienza nello sviluppo del driver CSI in Kubernetes per Yandex.Cloud | ProHoster","description":"Siamo lieti di annunciare che l'azienda 'Flant' sta contribuendo agli strumenti Open Source per Kubernetes, rilasciando la versione alfa del driver CSI (Container Storage Interface) per Yandex.Cloud. Ma prima di passare ai dettagli dell'implementazione, risponderemo alla domanda: perch\u00e9 \u00e8 necessario, quando Yandex ha gi\u00e0 il servizio Managed Service for Kubernetes? Introduzione Perch\u00e9 \u00e8 necessario? All'interno della nostra azienda, fin da","canonical_url":"https:\/\/prohoster.info\/it\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/40721","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=40721"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/40721\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/40722"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=40721"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=40721"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=40721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}