{"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 nello sviluppo del driver CSI in Kubernetes per Yandex.Cloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"La nostra esperienza nello sviluppo del 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 felici di annunciare che l'azienda \u00abFlant\u00bb sta ampliando il proprio contributo 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 passare ai dettagli dell'implementazione, rispondiamo alla domanda su perch\u00e9 sia necessario, quando Yandex dispone gi\u00e0 del 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 farlo?<\/h3>\n<p>\nDall'inizio dell'utilizzo di Kubernetes in produzione (cio\u00e8 gi\u00e0 da diversi anni), all'interno della nostra azienda si \u00e8 sviluppato uno strumento proprio (deckhouse), che, tra l'altro, abbiamo intenzione di rendere presto disponibile come progetto Open Source. Grazie a esso configuriamo e gestiamo in modo uniforme tutti i nostri cluster, e attualmente ne abbiamo gi\u00e0 pi\u00f9 di 100, su configurazioni hardware molto diverse e in tutti i servizi cloud disponibili.<\/p>\n<p>I cluster che utilizzano deckhouse contengono tutti i componenti necessari per il funzionamento: bilanciatori di carico, monitoraggio con grafici intuitivi, metriche e avvisi, autenticazione degli utenti attraverso fornitori esterni per l'accesso a tutte le dashboard e cos\u00ec via. Non ha senso installare un cluster \"potenziato\" in una soluzione gestita, poich\u00e9 spesso ci\u00f2 \u00e8 o impossibile o porter\u00e0 alla necessit\u00e0 di disabilitare met\u00e0 dei componenti.<\/p>\n<p><i><b>NB<\/b>: Questa \u00e8 la nostra esperienza, e \u00e8 piuttosto specifica. Non affermiamo in alcun modo che tutti dovrebbero occuparsi autonomamente del dispiegamento dei cluster Kubernetes anzich\u00e9 utilizzare soluzioni pronte. A proposito, non abbiamo esperienza reale nell'utilizzo di Kubernetes da parte di Yandex e non daremo alcuna valutazione a questo servizio in questo articolo.<\/i><\/p>\n<h3>Che cos'\u00e8 e per chi?<\/h3>\n<p>\nQuindi, abbiamo gi\u00e0 parlato dell'approccio moderno agli storage 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 propri dischi \"cloud\" come Persistent Volume in Kubernetes. Se il fornitore non dispone di tale driver, ma tutte le funzioni necessarie sono comunque fornite tramite API, nulla impedisce di implementare il driver con le proprie forze. Cos\u00ec abbiamo fatto noi 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 un paio di idee dal <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 di <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/api\/how-tos\/api-requests-responses#handling_api_responses\">GCP<\/a><\/noindex>, e di <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/api-design-guide\/concepts\/about-async\">Yandex<\/a><\/noindex> restituiscono l'oggetto <code>Operazione<\/code> per il monitoraggio dello stato delle operazioni prolungate (ad esempio, la creazione di un nuovo disco). Per interagire con l'API di Yandex.Cloud viene utilizzato <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 potrebbe essere utile a chi, per qualche motivo, utilizza la propria installazione di Kubernetes su macchine virtuali di Yandex.Cloud (ma non un cluster gestito) e vorrebbe utilizzare (richiedere) dischi attraverso CSI.<\/p>\n<h2>Implementazione<\/h2>\n<p><\/p>\n<h3>Caratteristiche principali<\/h3>\n<p>\nAttualmente il driver supporta le seguenti funzionalit\u00e0:<\/p>\n<ul>\n<li> Richiesta di dischi in tutte le zone del cluster secondo la topologia dei nodi presenti nel cluster;<\/li>\n<li> Cancellazione 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). Riguardo a come \u00e8 stato necessario modificare il driver per eseguire il ridimensionamento senza problemi, vedere sotto.<\/li>\n<\/ul>\n<p>\nIn futuro si prevede di implementare il supporto per la creazione e la cancellazione di snapshot dei dischi.<\/p>\n<h3>La principale difficolt\u00e0 e la sua risoluzione<\/h3>\n<p>\nL\u2019assenza 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): infatti, in questo caso, \u00e8 necessario che il pod dell'applicazione che utilizza il disco sia fermo, e ci\u00f2 pu\u00f2 causare un'interruzione dell'applicazione.<\/p>\n<p>Secondo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/container-storage-interface\/spec\">della specifica CSI<\/a><\/noindex>, se il controller CSI segnala che sa fare il ridimensionamento dei dischi solo \"in offline\" (<code>VolumeExpansion.OFFLINE<\/code>), il processo di aumento del disco deve avvenire in questo 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 il 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>capacit\u00e0 e<\/code> NodeUnstageVolume <code>\u00e8 stato completato con successo.<\/code> capacit\u00e0, n\u00e9 nodo<\/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> NodeUnpublishVolume <code>capacit\u00e0 e<\/code> NodeUnstageVolume <code>\u00e8 stato completato con successo.<\/code> In sostanza, ci\u00f2 significa che \u00e8 necessario scollegare il disco dalla macchina virtuale prima di aumentarlo.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nTuttavia, sfortunatamente,<\/p>\n<p>le specifiche CSI tramite sidecar non soddisfano questi requisiti: <b>una realizzazione<\/b> Nel contenitore sidecar<\/p>\n<ul>\n<li> csi-attacher <code>, che dovrebbe occuparsi di garantire il giusto intervallo tra i montaggi, la funzionalit\u00e0 non \u00e8 semplicemente implementata durante il ridimensionamento offline. \u00c8 stata avviata una discussione su questo<\/code>, che deve garantire la presenza della giusta intervallo tra i montaggi, poich\u00e9 questa funzionalit\u00e0 non \u00e8 semplicemente implementata nell'opzione di 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> Cos'\u00e8 esattamente un container sidecar in questo contesto? Il plugin CSI non interagisce con l'API di Kubernetes, ma risponde solo alle chiamate gRPC che gli inviano i container sidecar. Questi ultimi <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/sidecar-containers.html\">vengono sviluppati<\/a><\/noindex> dalla comunit\u00e0 Kubernetes.<\/li>\n<\/ul>\n<p>\nNel nostro caso (plugin CSI) l'operazione di aumento del disco appare come segue:<\/p>\n<ol>\n<li> Riceviamo una chiamata gRPC <code>ControllerExpandVolume<\/code>;<\/li>\n<li> Cerchiamo di aumentare il disco nell'API, ma riceviamo un errore di impossibilit\u00e0 di eseguire l'operazione, poich\u00e9 il disco \u00e8 montato;<\/li>\n<li> Salviamo l'identificatore del disco in una mappa contenente i dischi per i quali \u00e8 necessario eseguire l'operazione di aumento. D'ora in poi, per brevit\u00e0, chiameremo questa mappa <code>volumeResizeRequired<\/code>;<\/li>\n<li> Rimuoviamo manualmente il pod che utilizza il disco. Kubernetes lo riavvier\u00e0. Affinch\u00e9 il disco non venga montato (<code>ControllerPublishVolume<\/code>) prima del completamento dell'operazione di aumento al momento del tentativo di montaggio, verifichiamo che il disco sia ancora in <code>volumeResizeRequired<\/code> e restituiamo un errore;<\/li>\n<li> Il driver CSI tenta di eseguire nuovamente l'operazione di resize. Se l'operazione ha successo, rimuoviamo il disco da <code>volumeResizeRequired<\/code>;<\/li>\n<li> Poich\u00e9 l'identificatore del disco non \u00e8 presente in <code>volumeResizeRequired<\/code>, <code>ControllerPublishVolume<\/code> la chiamata ha successo, il disco viene montato, il pod si avvia.<\/li>\n<\/ol>\n<p>\nTutto sembra piuttosto 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 incremento 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  \n  &amp;BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},\n  )\n}<\/code><\/pre>\n<p>\nQuesto pu\u00f2 portare periodicamente a un allungamento dell'operazione di aumento del disco di oltre 15 minuti e, di conseguenza, alla non disponibilit\u00e0 del relativo pod.<\/p>\n<p>L'unica opzione che ci ha permesso di ridurre in modo relativamente semplice e indolore il potenziale tempo di inattivit\u00e0 \u00e8 stata l'uso di una 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 la ridimensionamento offline dei dischi \u00e8 un retaggio che presto scomparir\u00e0 da tutti i fornitori di cloud.<\/p>\n<h2>Come iniziare a utilizzare?<\/h2>\n<p>\nIl driver \u00e8 supportato nelle versioni di Kubernetes 1.15 e successive. Per il funzionamento del driver devono essere soddisfatti i seguenti requisiti:<\/p>\n<ul>\n<li> Bandiera <code>--allow-privileged<\/code> impostato su <code>true<\/code> per il server API e kubelet;<\/li>\n<li> Attivata <code>--feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true<\/code> per il server API e kubelet;<\/li>\n<li> La propagazione dei mount (<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 mount condivisi (shared mounts).<\/li>\n<\/ul>\n<p>\nTutti i passaggi necessari per l'installazione <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver#installing-driver\">sono descritti in README<\/a><\/noindex>. L'installazione comporta la creazione di oggetti in Kubernetes a partire dai manifest.<\/p>\n<p>Per utilizzare il driver avrai bisogno di quanto segue:<\/p>\n<ul>\n<li> Specificare nel 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, il driver CSI utilizza un account di servizio. Nel manifesto Secret devono essere forniti <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.com\/docs\/iam\/concepts\/authorization\/key\">i 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>, su 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 problemi<\/a><\/noindex>, se incontri qualche problema!<\/p>\n<h2>Supporto ulteriore<\/h2>\n<p>\nIn conclusione, ci teniamo a sottolineare che questo driver CSI \u00e8 stato realizzato non per puro desiderio di divertirci a scrivere applicazioni in Go, ma per una necessit\u00e0 urgente all'interno dell'azienda. Non ci sembra sensato mantenere una nostra implementazione, quindi, se Yandex mostra interesse e decide di continuare il supporto per il driver, saremo felici di cedere il repository nelle loro mani.<\/p>\n<p>Inoltre, probabilmente Yandex ha nel suo cluster Kubernetes gestito una propria implementazione del driver CSI, che potrebbe essere resa open source. Questa opzione ci sembra anche favorevole: la comunit\u00e0 potr\u00e0 utilizzare un driver collaudato dal fornitore di servizi, anzich\u00e9 da una societ\u00e0 terza.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLeggi 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 per 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\/\">\u00c8 semplice e conveniente configurare un cluster Kubernetes? Annunciamo l'addon-operator<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">Espandiamo e completiamo 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 5.0.1.1 - 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\/it\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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.\" \/>\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.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}