{"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\/fr\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","title":{"rendered":"Notre exp\u00e9rience dans le d\u00e9veloppement de pilotes CSI dans Kubernetes pour Yandex.Cloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Notre exp\u00e9rience dans le d\u00e9veloppement de pilotes CSI dans Kubernetes pour Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/86adf77b2ee08c426bf79c5b9b2d3d1e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNous sommes heureux d'annoncer que la soci\u00e9t\u00e9 \u00ab Flant \u00bb renforce sa contribution aux outils Open Source pour Kubernetes en lan\u00e7ant <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">la version alpha du pilote CSI<\/a><\/noindex> (Container Storage Interface) pour Yandex.Cloud.<\/p>\n<p>Mais avant de passer aux d\u00e9tails de mise en \u0153uvre, r\u00e9pondons \u00e0 la question de l'utilit\u00e9 de cela, \u00e9tant donn\u00e9 que Yandex propose d\u00e9j\u00e0 le service <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>Introduction<\/h2>\n<p><\/p>\n<h3>Pourquoi faire cela ?<\/h3>\n<p>\nAu sein de notre entreprise, depuis le tout d\u00e9but de l'exploitation de Kubernetes en production (c'est-\u00e0-dire depuis plusieurs ann\u00e9es), nous d\u00e9veloppons notre propre outil (deckhouse), que nous pr\u00e9voyons \u00e9galement de rendre disponible prochainement en tant que projet Open Source. Gr\u00e2ce \u00e0 cela, nous configurons et param\u00e9trons uniform\u00e9ment tous nos clusters, et actuellement, nous en avons d\u00e9j\u00e0 plus de 100, sur des configurations mat\u00e9rielles tr\u00e8s diverses et dans tous les services cloud disponibles.<\/p>\n<p>Les clusters utilisant deckhouse comportent tous les composants n\u00e9cessaires au bon fonctionnement : \u00e9quilibrages de charge, surveillance avec des graphiques, des m\u00e9triques et des alertes pratiques, authentification des utilisateurs via des fournisseurs externes pour acc\u00e9der \u00e0 tous les dashboards, etc. Un cluster aussi \u00ab avanc\u00e9 \u00bb n'a pas de sens \u00e0 d\u00e9ployer dans une solution g\u00e9r\u00e9e, car cela est souvent soit impossible, soit n\u00e9cessite de d\u00e9sactiver la moiti\u00e9 des composants.<\/p>\n<p><i><b>NB<\/b>: C'est notre exp\u00e9rience, qui est assez sp\u00e9cifique. Nous ne pr\u00e9tendons en aucun cas que tout le monde devrait d\u00e9ployer des clusters Kubernetes par leurs propres moyens au lieu d'utiliser des solutions toutes faites. \u00c0 propos, nous n'avons pas d'exp\u00e9rience r\u00e9elle d'exploitation de Kubernetes de la part de Yandex et nous ne donnerons pas d'\u00e9valuation de ce service dans cet article.<\/i><\/p>\n<h3>Qu'est-ce que c'est et pour qui ?<\/h3>\n<p>\nDonc, nous avons d\u00e9j\u00e0 parl\u00e9 de l'approche moderne des stockages dans Kubernetes : <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">comment fonctionne le CSI<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">comment la communaut\u00e9 est arriv\u00e9e<\/a><\/noindex> \u00e0 cette approche.<\/p>\n<p>Actuellement, de nombreux grands fournisseurs de services cloud ont d\u00e9velopp\u00e9 des pilotes pour utiliser leurs disques \u00ab cloud \u00bb comme Persistent Volume dans Kubernetes. Si le fournisseur n'a pas de tel pilote mais que toutes les fonctionnalit\u00e9s n\u00e9cessaires sont disponibles via une API, rien n'emp\u00eache de d\u00e9velopper un pilote par leurs propres moyens. C'est ce que nous avons fait avec Yandex.Cloud.<\/p>\n<p>Nous avons pris comme base pour le d\u00e9veloppement <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/digitalocean\/csi-digitalocean\">le pilote CSI pour le cloud DigitalOcean<\/a><\/noindex> et quelques id\u00e9es du <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/gcp-compute-persistent-disk-csi-driver\">pilote pour GCP<\/a><\/noindex>, car l'interaction avec les API de ces clouds (Google et Yandex) pr\u00e9sente plusieurs similitudes. En particulier, l'API de <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/api\/how-tos\/api-requests-responses#handling_api_responses\">GCP<\/a><\/noindex>, et celle de <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/api-design-guide\/concepts\/about-async\">Yandex<\/a><\/noindex> retourne l'objet <code>Op\u00e9ration<\/code> pour suivre l'\u00e9tat des op\u00e9rations longues (par exemple, la cr\u00e9ation d'un nouveau disque). Pour interagir avec l'API de Yandex.Cloud, le SDK <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex-cloud\/go-sdk\">Yandex.Cloud Go SDK<\/a><\/noindex>.<\/p>\n<p>Le r\u00e9sultat du travail effectu\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">est publi\u00e9 sur GitHub<\/a><\/noindex> et peut \u00eatre utile \u00e0 ceux qui, pour une raison quelconque, utilisent leur propre installation de Kubernetes sur des machines virtuelles de Yandex.Cloud (mais pas un cluster g\u00e9r\u00e9) et souhaiteraient utiliser (commander) des disques via CSI.<\/p>\n<h2>Mise en \u0153uvre<\/h2>\n<p><\/p>\n<h3>Fonctionnalit\u00e9s principales<\/h3>\n<p>\nActuellement, le pilote prend en charge les fonctionnalit\u00e9s suivantes :<\/p>\n<ul>\n<li> Commande de disques dans toutes les zones du cluster selon la topologie des n\u0153uds pr\u00e9sents dans le cluster ;<\/li>\n<li> Suppression des disques command\u00e9s auparavant ;<\/li>\n<li> Redimensionnement hors ligne pour les disques (Yandex.Cloud <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/compute\/operations\/disk-control\/update#change-disk-size\">ne prend pas en charge<\/a><\/noindex> augmentation des disques qui sont mont\u00e9s sur la machine virtuelle). Pour savoir comment le pilote a d\u00fb \u00eatre modifi\u00e9 afin de r\u00e9aliser le redimensionnement de mani\u00e8re aussi indolore que possible, voir ci-dessous.<\/li>\n<\/ul>\n<p>\n\u00c0 l'avenir, nous pr\u00e9voyons d'impl\u00e9menter la prise en charge de la cr\u00e9ation et de la suppression de snapshots de disques.<\/p>\n<h3>La principale difficult\u00e9 et sa surmont\u00e9e<\/h3>\n<p>\nL'absence dans l'API de Yandex.Cloud de la possibilit\u00e9 d'augmenter les disques en temps r\u00e9el \u2014 une limitation qui complique l'op\u00e9ration de redimensionnement pour PV (Volume Persistant) : car dans ce cas, il est n\u00e9cessaire que le pod d'application utilisant le disque soit arr\u00eat\u00e9, ce qui peut entra\u00eener un temps d'arr\u00eat de l'application.<\/p>\n<p>Selon <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/container-storage-interface\/spec\">de la sp\u00e9cification CSI<\/a><\/noindex>, si le contr\u00f4leur CSI indique qu'il peut effectuer le redimensionnement des disques uniquement \u00ab hors ligne \u00bb (<code>VolumeExpansion.OFFLINE<\/code>), le processus d'augmentation du disque doit \u00eatre le suivant :<\/p>\n<blockquote><p>Si le plugin n'a que <code>VolumeExpansion.OFFLINE<\/code> capacit\u00e9 d'expansion et que le volume est actuellement publi\u00e9 ou disponible sur un n\u0153ud, alors <code>ControllerExpandVolume<\/code> DOIT \u00eatre appel\u00e9 UNIQUEMENT apr\u00e8s l'une des conditions suivantes :<\/p>\n<ul>\n<li> Le plugin a un contr\u00f4leur <code>capacit\u00e9 PUBLISH_UNPUBLISH_VOLUME et<\/code> ControllerUnpublishVolume <code>a \u00e9t\u00e9 invoqu\u00e9 avec succ\u00e8s.<\/code> OU ALORS<\/li>\n<\/ul>\n<p>\nLe plugin n'a PAS de capacit\u00e9 de contr\u00f4leur, le plugin a un n\u0153ud<\/p>\n<ul>\n<li> capacit\u00e9 STAGE_UNSTAGE_VOLUME, et <code>capacit\u00e9 PUBLISH_UNPUBLISH_VOLUME et<\/code> NodeUnstageVolume <code>a \u00e9t\u00e9 termin\u00e9 avec succ\u00e8s.<\/code> capacit\u00e9, ni n\u0153ud <code>NodeUnpublishVolume<\/code> a \u00e9t\u00e9 termin\u00e9 avec succ\u00e8s.<\/li>\n<\/ul>\n<p>\nLe plugin n'a PAS de capacit\u00e9 de contr\u00f4leur, le plugin a un n\u0153ud<\/p>\n<ul>\n<li>capacit\u00e9 STAGE_UNSTAGE_VOLUME, et <code>capacit\u00e9 PUBLISH_UNPUBLISH_VOLUME et<\/code> En substance, cela signifie la n\u00e9cessit\u00e9 de d\u00e9tacher le disque de la machine virtuelle avant de l'augmenter. <code>a \u00e9t\u00e9 termin\u00e9 avec succ\u00e8s.<\/code> capacit\u00e9, ni n\u0153ud <code>Cependant, malheureusement,<\/code> les sp\u00e9cifications CSI via des sidecars ne r\u00e9pondent pas \u00e0 ces exigences :<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nDans le conteneur sidecar<\/p>\n<p>csi-attacher <b>impl\u00e9mentation<\/b> , qui est suppos\u00e9 assurer la pr\u00e9sence du bon intervalle entre les montages, cette fonctionnalit\u00e9 n'est tout simplement pas r\u00e9alis\u00e9e lors du redimensionnement hors ligne. Cette discussion a \u00e9t\u00e9 lanc\u00e9e<\/p>\n<ul>\n<li> Dans le conteneur sidecar <code>csi-attacher<\/code>, qui est cens\u00e9 garantir l'espace n\u00e9cessaire entre les montages, cette fonctionnalit\u00e9 n'est tout simplement pas impl\u00e9ment\u00e9e lors du redimensionnement hors ligne. La discussion \u00e0 ce sujet a \u00e9t\u00e9 initi\u00e9e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-csi\/external-attacher\/issues\/207\">ici<\/a><\/noindex>.<\/li>\n<li> Qu'est-ce qu'un conteneur sidecar dans ce contexte ? Le plugin CSI ne s'occupe pas de l'interaction avec l'API Kubernetes, mais r\u00e9agit uniquement aux appels gRPC que lui envoient les conteneurs sidecar. Ces derniers <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/sidecar-containers.html\">sont d\u00e9velopp\u00e9s<\/a><\/noindex> sont communautaires Kubernetes.<\/li>\n<\/ul>\n<p>\nDans notre cas (plugin CSI), l'op\u00e9ration d'augmentation du disque se pr\u00e9sente comme suit :<\/p>\n<ol>\n<li> Nous recevons un appel gRPC <code>ControllerExpandVolume<\/code>;<\/li>\n<li> Nous essayons d'augmenter le disque via l'API, mais nous recevons une erreur indiquant qu'il n'est pas possible d'ex\u00e9cuter l'op\u00e9ration, car le disque est mont\u00e9 ;<\/li>\n<li> Nous sauvegardons l'identifiant du disque dans une map contenant les disques pour lesquels l'op\u00e9ration d'augmentation doit \u00eatre effectu\u00e9e. Afin de simplifier, nous appellerons cette map <code>volumeResizeRequired<\/code>;<\/li>\n<li> Nous supprimons manuellement le pod qui utilise le disque. Kubernetes le red\u00e9marrera alors. Pour nous assurer que le disque n'est pas mont\u00e9 (<code>ControllerPublishVolume<\/code>) avant la fin de l'op\u00e9ration d'augmentation lors de la tentative de montage, nous v\u00e9rifions que ce disque est toujours dans <code>volumeResizeRequired<\/code> et nous retournons une erreur ;<\/li>\n<li> Le driver CSI essaie de r\u00e9ex\u00e9cuter l'op\u00e9ration de redimensionnement. Si l'op\u00e9ration r\u00e9ussit, nous supprimons le disque de <code>volumeResizeRequired<\/code>;<\/li>\n<li> Comme l'identifiant du disque est absent dans <code>volumeResizeRequired<\/code>, <code>ControllerPublishVolume<\/code> r\u00e9ussit, le disque est mont\u00e9, le pod red\u00e9marre.<\/li>\n<\/ol>\n<p>\nTout cela semble assez simple, mais comme toujours, il y a des pi\u00e8ges. L'augmentation des disques est g\u00e9r\u00e9e par <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/external-resizer.html\">external-resizer<\/a><\/noindex>, qui, en cas d'erreur lors de l'ex\u00e9cution de l'op\u00e9ration <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\">utilise une file d'attente<\/a><\/noindex> avec un temps d'attente exponentiel jusqu'\u00e0 1000 secondes :<\/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. C'est seulement pour la vitesse de r\u00e9essaie et c'est juste le facteur global (pas par \u00e9l\u00e9ment)\n  &amp;BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},\n  )\n}<\/code><\/pre>\n<p>\nCela peut occasionnellement faire en sorte que l'op\u00e9ration d'augmentation de disque s'\u00e9tale sur 15 minutes ou plus, entra\u00eenant ainsi l'indisponibilit\u00e9 du pod correspondant.<\/p>\n<p>La seule option qui nous a permis de r\u00e9duire facilement et sans douleur le temps d'arr\u00eat potentiel a \u00e9t\u00e9 d'utiliser notre propre version de external-resizer avec une limite d'attente maximale de <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/external-resizer\/blob\/faster-workqueue\/pkg\/controller\/controller.go#L81\">5 secondes<\/a><\/noindex>:<\/p>\n<pre><code class=\"go\">workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)<\/code><\/pre>\n<p>\nNous n'avons pas jug\u00e9 n\u00e9cessaire de d\u00e9clencher de mani\u00e8re urgente une discussion ou de patcher external-resizer, car le redimensionnement hors ligne des disques est un vestige qui dispara\u00eetra bient\u00f4t chez tous les fournisseurs de cloud.<\/p>\n<h2>Comment commencer \u00e0 utiliser ?<\/h2>\n<p>\nLe driver est support\u00e9 dans Kubernetes version 1.15 et sup\u00e9rieure. Pour que le driver fonctionne, les exigences suivantes doivent \u00eatre remplies :<\/p>\n<ul>\n<li> Drapeau <code>--allow-privileged<\/code> d\u00e9fini sur <code>true<\/code> pour l'API du serveur et kubelet ;<\/li>\n<li> Activ\u00e9 <code>--feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true<\/code> pour l'API du serveur et kubelet ;<\/li>\n<li> La propagation de montage (<noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/#mount-propagation\">mount propagation<\/a><\/noindex>) doit \u00eatre activ\u00e9e dans le cluster. Lors de l'utilisation de Docker, le d\u00e9mon doit \u00eatre configur\u00e9 pour autoriser les objets de montage partag\u00e9s (shared mounts).<\/li>\n<\/ul>\n<p>\nTous les \u00e9tapes n\u00e9cessaires \u00e0 l'installation proprement dite <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver#installing-driver\">sont d\u00e9crites dans le README<\/a><\/noindex>. L'installation consiste \u00e0 cr\u00e9er des objets dans Kubernetes \u00e0 partir de manifests.<\/p>\n<p>Pour que le pilote fonctionne, vous aurez besoin de :<\/p>\n<ul>\n<li> Indiquer dans le manifeste l'identifiant de r\u00e9pertoire (<code>folder-id<\/code>) de Yandex.Cloud (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/resource-manager\/operations\/folder\/get-id\">voir la documentation<\/a><\/noindex>);<\/li>\n<li> . Pour interagir avec l'API de Yandex.Cloud dans le pilote CSI, un compte de service est utilis\u00e9. Dans le manifeste Secret, il est n\u00e9cessaire de transmettre <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.com\/docs\/iam\/concepts\/authorization\/key\">les cl\u00e9s d'autorisation<\/a><\/noindex> du compte de service. Dans la documentation <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/iam\/quickstart-sa\">est d\u00e9crit<\/a><\/noindex>, il est expliqu\u00e9 comment cr\u00e9er un compte de service et obtenir des cl\u00e9s.<\/li>\n<\/ul>\n<p>\nEn g\u00e9n\u00e9ral \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">essayez<\/a><\/noindex>, et nous serons ravis de recevoir des retours et <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\/issues\">de nouveaux probl\u00e8mes<\/a><\/noindex>, si vous rencontrez des soucis !<\/p>\n<h2>Support ult\u00e9rieur<\/h2>\n<p>\nEn guise de conclusion, nous tenons \u00e0 souligner que ce pilote CSI a \u00e9t\u00e9 d\u00e9velopp\u00e9 non par un grand d\u00e9sir de s'amuser \u00e0 \u00e9crire des applications en Go, mais par une n\u00e9cessit\u00e9 pressante au sein de l'entreprise. Nous ne consid\u00e9rons pas qu'il soit judicieux de maintenir notre propre impl\u00e9mentation, donc si Yandex montre de l'int\u00e9r\u00eat et d\u00e9cide de continuer \u00e0 soutenir le pilote, nous transmettrons volontiers le d\u00e9p\u00f4t \u00e0 leur disposition.<\/p>\n<p>De plus, il est probable que Yandex ait sa propre impl\u00e9mentation du pilote CSI dans son cluster Kubernetes manag\u00e9, qu'il pourrait publier en Open Source. Ce d\u00e9veloppement nous semble \u00e9galement favorable \u2014 la communaut\u00e9 pourrait utiliser un pilote \u00e9prouv\u00e9 du fournisseur de services, et non d'une soci\u00e9t\u00e9 tierce.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLisez aussi dans notre blog :<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">Plugins de volumes pour le stockage dans Kubernetes : de Flexvolume \u00e0 CSI<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">Comprendre l'Interface de Stockage des Conteneurs (dans Kubernetes et au-del\u00e0)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">Pr\u00e9parer un cluster Kubernetes est-il simple et pratique ? Nous annon\u00e7ons l'addon-operator<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">\u00c9largir et compl\u00e9ter Kubernetes (aper\u00e7u et vid\u00e9o de la pr\u00e9sentation)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source : <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.2 - 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\/fr\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Notre exp\u00e9rience de d\u00e9veloppement du pilote CSI dans Kubernetes pour Yandex.Cloud | ProHoster","description":"Nous sommes heureux d'annoncer que l'entreprise.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/40721","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=40721"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/40721\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/40722"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=40721"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=40721"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=40721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}