{"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\/de\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","title":{"rendered":"Unsere Erfahrungen bei der Entwicklung des CSI-Treibers in Kubernetes f\u00fcr Yandex.Cloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Unsere Erfahrungen bei der Entwicklung des CSI-Treibers in Kubernetes f\u00fcr Yandex.Cloud\" src=\"\/wp-content\/uploads\/2020\/02\/86adf77b2ee08c426bf79c5b9b2d3d1e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir freuen uns, bekannt zu geben, dass das Unternehmen \u201eFlant\u201c seinen Beitrag zu Open Source-Tools f\u00fcr Kubernetes mit der Ver\u00f6ffentlichung von <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">der Alpha-Version des CSI-Treibers<\/a><\/noindex> (Container Storage Interface) f\u00fcr Yandex.Cloud erweitert.<\/p>\n<p>Aber bevor wir zu den Details der Implementierung kommen, beantworten wir die Frage, warum das \u00fcberhaupt notwendig ist, wo Yandex bereits einen Dienst hat, <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>Einf\u00fchrung<\/h2>\n<p><\/p>\n<h3>Warum das?<\/h3>\n<p>\nInnerhalb unseres Unternehmens entwickelt sich seit Beginn der Produktion (also seit mehreren Jahren) ein eigenes Tool (Deckhouse), das wir \u00fcbrigens auch bald als Open Source-Projekt verf\u00fcgbar machen m\u00f6chten. Damit konfigurieren und verwalten wir unsere Cluster einheitlich, und derzeit haben wir bereits \u00fcber 100 Cluster, die auf den unterschiedlichsten Hardware-Konfigurationen und in allen verf\u00fcgbaren Cloud-Diensten laufen.<\/p>\n<p>Cluster, die Deckhouse verwenden, enthalten alle notwendigen Komponenten f\u00fcr den Betrieb: Loadbalancer, Monitoring mit \u00fcbersichtlichen Grafiken, Metriken und Alerts, sowie die Authentifizierung von Benutzern \u00fcber externe Anbieter f\u00fcr den Zugang zu allen Dashboards und vieles mehr. Ein derart \"aufger\u00fcsteter\" Cluster eignet sich nicht f\u00fcr eine verwaltete L\u00f6sung, da dies oft entweder unm\u00f6glich ist oder dazu f\u00fchrt, dass die H\u00e4lfte der Komponenten deaktiviert werden muss.<\/p>\n<p><i><b>NB<\/b>: Das ist unsere Erfahrung, und sie ist ziemlich spezifisch. Wir behaupten keineswegs, dass jeder selbstst\u00e4ndig Kubernetes-Cluster aufbauen sollte, anstatt auf vorhandene L\u00f6sungen zur\u00fcckzugreifen. \u00dcbrigens haben wir keine praktischen Erfahrungen mit Kubernetes von Yandex und werden in diesem Artikel keine Bewertung dieses Dienstes abgeben.<\/i><\/p>\n<h3>Was ist das und f\u00fcr wen ist es gedacht?<\/h3>\n<p>\nWir haben bereits \u00fcber den modernen Ansatz f\u00fcr Speicher in Kubernetes gesprochen: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">wie CSI funktioniert<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">wie die Community zu diesem Ansatz kam.<\/a><\/noindex> zu solch einem Ansatz.<\/p>\n<p>Derzeit haben viele gro\u00dfe Cloud-Anbieter Treiber entwickelt, um ihre \"Cloud\"-Festplatten als Persistent Volume in Kubernetes zu nutzen. Wenn ein Anbieter jedoch keinen solchen Treiber hat, aber alle erforderlichen Funktionen \u00fcber eine API bereitstellt, steht nichts im Wege, einen eigenen Treiber zu implementieren. Genau das haben wir mit Yandex.Cloud erreicht.<\/p>\n<p>Als Grundlage f\u00fcr die Entwicklung haben wir <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/digitalocean\/csi-digitalocean\">den CSI-Treiber f\u00fcr die Cloud von DigitalOcean<\/a><\/noindex> und ein paar Ideen aus <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/gcp-compute-persistent-disk-csi-driver\">dem Treiber f\u00fcr GCP<\/a><\/noindex>, da die Interaktion mit den APIs dieser Clouds (Google und Yandex) einige Gemeinsamkeiten aufweist. Insbesondere geben die APIs sowohl von <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/api\/how-tos\/api-requests-responses#handling_api_responses\">GCP<\/a><\/noindex>Yandex <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/api-design-guide\/concepts\/about-async\">als auch von<\/a><\/noindex> Yandex <code>Operation<\/code> ein Objekt zur\u00fcck, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yandex-cloud\/go-sdk\">um den Status langwieriger Vorg\u00e4nge (z. B. die Erstellung einer neuen Festplatte) zu verfolgen. F\u00fcr die Interaktion mit der API von Yandex.Cloud wird das<\/a><\/noindex>.<\/p>\n<p>Yandex.Cloud Go SDK <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">verwendet.<\/a><\/noindex> Das Ergebnis der geleisteten Arbeit<\/p>\n<h2>Implementierung<\/h2>\n<p><\/p>\n<h3>Grundlegende Funktionen<\/h3>\n<p>\nwurde auf GitHub ver\u00f6ffentlicht<\/p>\n<ul>\n<li> und k\u00f6nnte n\u00fctzlich sein f\u00fcr diejenigen, die aus bestimmten Gr\u00fcnden eine eigene Kubernetes-Installation auf virtuellen Maschinen in Yandex.Cloud verwenden (aber keinen fertigen verwalteten Cluster) und Festplatten \u00fcber CSI nutzen m\u00f6chten. Aktuell unterst\u00fctzt der Treiber folgende Funktionen:<\/li>\n<li> L\u00f6schung zuvor bestellter Festplatten;<\/li>\n<li> Offline-Gr\u00f6\u00dfe f\u00fcr Festplatten (Yandex.Cloud, <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/compute\/operations\/disk-control\/update#change-disk-size\">unterst\u00fctzt nicht<\/a><\/noindex> Erh\u00f6hung von Festplatten, die mit der virtuellen Maschine verbunden sind). Wie es erforderlich war, den Treiber anzupassen, um das Resize so schmerzlos wie m\u00f6glich durchzuf\u00fchren, erfahren Sie unten.<\/li>\n<\/ul>\n<p>\nZuk\u00fcnftig planen wir die Unterst\u00fctzung f\u00fcr die Erstellung und L\u00f6schung von Festplattensnapshots.<\/p>\n<h3>Die Hauptschwierigkeit und deren \u00dcberwindung<\/h3>\n<p>\nDas Fehlen der M\u00f6glichkeit im Yandex.Cloud-API, Festplatten in Echtzeit zu vergr\u00f6\u00dfern \u2013 eine Einschr\u00e4nkung, die den Resize-Vorgang f\u00fcr PV (Persistent Volume) erschwert: In diesem Fall muss das Pod der Anwendung, die die Festplatte verwendet, gestoppt werden, was zu einem Ausfall der Anwendung f\u00fchren kann.<\/p>\n<p>Laut <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/container-storage-interface\/spec\">der CSI-Spezifikation<\/a><\/noindex>, wenn der CSI-Controller angibt, dass er Resize nur \u201eoffline\u201c durchf\u00fchren kann (<code>VolumeExpansion.OFFLINE<\/code>), muss der Prozess der Festplattenerweiterung folgenderma\u00dfen ablaufen:<\/p>\n<blockquote><p>Wenn das Plugin nur <code>VolumeExpansion.OFFLINE<\/code> Erweiterungskapazit\u00e4t hat und das Volume derzeit ver\u00f6ffentlicht oder auf einem Knoten verf\u00fcgbar ist, dann <code>ControllerExpandVolume<\/code> muss NUR nachfolgend aufgerufen werden:<\/p>\n<ul>\n<li> Das Plugin hat Controller- <code>PUBLISH_UNPUBLISH_VOLUME<\/code> F\u00e4higkeit und <code>ControllerUnpublishVolume<\/code> wurde erfolgreich aufgerufen.<\/li>\n<\/ul>\n<p>\nODER<\/p>\n<ul>\n<li> Das Plugin hat KEINE Controller- <code>PUBLISH_UNPUBLISH_VOLUME<\/code> F\u00e4higkeit, das Plugin hat Knoten- <code>STAGE_UNSTAGE_VOLUME<\/code> F\u00e4higkeit und <code>NodeUnstageVolume<\/code> wurde erfolgreich abgeschlossen.<\/li>\n<\/ul>\n<p>\nODER<\/p>\n<ul>\n<li>Das Plugin hat KEINE Controller- <code>PUBLISH_UNPUBLISH_VOLUME<\/code> F\u00e4higkeit, noch Knoten <code>STAGE_UNSTAGE_VOLUME<\/code> F\u00e4higkeit und <code>NodeUnpublishVolume<\/code> wurde erfolgreich abgeschlossen.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nDas bedeutet, dass es notwendig ist, die Festplatte von der virtuellen Maschine zu trennen, bevor Sie sie vergr\u00f6\u00dfern.<\/p>\n<p>Leider ist das <b>eine Umsetzung<\/b> die CSI-Spezifikationen \u00fcber Sidecars erf\u00fcllen nicht diese Anforderungen:<\/p>\n<ul>\n<li> Im Sidecar-Container <code>csi-attacher<\/code>, der f\u00fcr die Gew\u00e4hrleistung des erforderlichen Abstands zwischen den Montagen verantwortlich sein sollte, wurde die Funktionalit\u00e4t bei einer Offline-Gr\u00f6\u00dfe einfach nicht implementiert. Diese Diskussion wurde von <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-csi\/external-attacher\/issues\/207\">hier<\/a><\/noindex>.<\/li>\n<li> Was ist \u00fcberhaupt ein Sidecar-Container in diesem Kontext? Der CSI-Plugin selbst interagiert nicht mit der Kubernetes-API, sondern reagiert lediglich auf die gRPC-Aufrufe, die von den Sidecar-Containern an ihn gesendet werden. Letztere <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/sidecar-containers.html\">werden<\/a><\/noindex> von der Kubernetes-Gemeinschaft.<\/li>\n<\/ul>\n<p>\nIn unserem Fall (CSI-Plugin) sieht die Operation zur Vergr\u00f6\u00dferung der Festplatte wie folgt aus:<\/p>\n<ol>\n<li> Wir erhalten den gRPC-Aufruf <code>ControllerExpandVolume<\/code>;<\/li>\n<li> Wir versuchen, die Festplatte \u00fcber die API zu vergr\u00f6\u00dfern, erhalten jedoch einen Fehler, dass die Operation nicht ausgef\u00fchrt werden kann, da die Festplatte montiert ist;<\/li>\n<li> Wir speichern die Festplatten-ID in einer Map, die die Festplatten enth\u00e4lt, f\u00fcr die die Vergr\u00f6\u00dferungsoperation durchgef\u00fchrt werden muss. Weiterhin werden wir diese Map als <code>volumeResizeRequired<\/code>;<\/li>\n<li> Manuell entfernen wir das Pod, das die Festplatte verwendet. Kubernetes wird es in der Folge neu starten. Um zu verhindern, dass die Festplatte bereits gemountet wird (<code>ControllerPublishVolume<\/code>) vor Abschluss der Vergr\u00f6\u00dferungsoperation beim Mountversuch, \u00fcberpr\u00fcfen wir, ob die Festplatte noch in <code>volumeResizeRequired<\/code> und geben einen Fehler zur\u00fcck;<\/li>\n<li> Der CSI-Treiber versucht, die Resize-Operation erneut auszuf\u00fchren. Erfolgt die Operation erfolgreich, entfernen wir die Festplatte aus dem <code>volumeResizeRequired<\/code>;<\/li>\n<li> Da die Festplatten-ID in <code>volumeResizeRequired<\/code>, <code>ControllerPublishVolume<\/code> vorhanden ist, wird die Operation erfolgreich durchgef\u00fchrt, die Festplatte wird gemountet und das Pod wird gestartet.<\/li>\n<\/ol>\n<p>\nDas klingt alles recht einfach, aber wie immer gibt es Haken. Die Vergr\u00f6\u00dferung der Festplatten wird von der <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/external-resizer.html\">external-resizer<\/a><\/noindex>\u00fcbernommen, die im Falle eines Fehlers bei der Durchf\u00fchrung der Operation <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\">eine Warteschlange nutzt<\/a><\/noindex> mit exponentiellem Timeout-Anstieg auf bis zu 1000 Sekunden:<\/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. Dies ist nur f\u00fcr die Wiederholgeschwindigkeit und ist nur der Gesamtfaktor (nicht pro Element)\n  &amp;BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},\n  )\n}<\/code><\/pre>\n<p>\nDies kann gelegentlich dazu f\u00fchren, dass die Diskvergr\u00f6\u00dferungsoperation sich \u00fcber 15 Minuten oder mehr ausdehnt, was zu einer Nichtverf\u00fcgbarkeit des entsprechenden Pods f\u00fchrt.<\/p>\n<p>Die einzige M\u00f6glichkeit, die uns geholfen hat, die potenzielle Ausfallzeit einfach und schmerzfrei zu reduzieren, war die Nutzung unserer eigenen Version des external-resizers mit einer maximalen Zeit\u00fcberschreitung. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/external-resizer\/blob\/faster-workqueue\/pkg\/controller\/controller.go#L81\">in 5 Sekunden<\/a><\/noindex>:<\/p>\n<pre><code class=\"go\">workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)<\/code><\/pre>\n<p>\nWir hielten es nicht f\u00fcr notwendig, sofort eine Diskussion zu beginnen und den external-resizer zu patchen, denn das Offline-Resize von Festplatten ist ein Relikt, das bald bei allen Cloud-Anbietern verschwinden wird.<\/p>\n<h2>Wie starte ich?<\/h2>\n<p>\nDer Treiber wird in Kubernetes Version 1.15 und h\u00f6her unterst\u00fctzt. Folgende Anforderungen m\u00fcssen erf\u00fcllt sein:<\/p>\n<ul>\n<li> Flagge <code>--allow-privileged<\/code> muss auf <code>true<\/code> f\u00fcr den API-Server und kubelet gesetzt sein;<\/li>\n<li> Die Funktionalit\u00e4ten <code>--feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true<\/code> f\u00fcr den API-Server und kubelet gesetzt sein;<\/li>\n<li> Die Montageverbreitung (<noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/#mount-propagation\">mount propagation<\/a><\/noindex>) muss im Cluster aktiviert sein. Bei Verwendung von Docker muss der Daemon so konfiguriert sein, dass shared mounts erlaubt sind.<\/li>\n<\/ul>\n<p>\nAlle notwendigen Schritte f\u00fcr die Installation selbst <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver#installing-driver\">sind im README<\/a><\/noindex>. Die Installation besteht darin, Objekte in Kubernetes aus Manifests zu erstellen.<\/p>\n<p>F\u00fcr den Betrieb des Treibers ben\u00f6tigen Sie Folgendes:<\/p>\n<ul>\n<li> Geben Sie in das Manifest die Katalog-ID ein (<code>folder-id<\/code>) von Yandex.Cloud (<noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/resource-manager\/operations\/folder\/get-id\">siehe Dokumentation<\/a><\/noindex>);<\/li>\n<li> F\u00fcr die Interaktion mit der Yandex.Cloud API wird im CSI-Treiber ein Dienstkonto verwendet. Im Secret-Manifest m\u00fcssen Sie <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.com\/docs\/iam\/concepts\/authorization\/key\">autorisierte Schl\u00fcssel<\/a><\/noindex> vom Dienstkonto \u00fcbergeben. In der Dokumentation <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.yandex.ru\/docs\/iam\/quickstart-sa\">beschrieben<\/a><\/noindex>, wie man ein Dienstkonto erstellt und Schl\u00fcssel erh\u00e4lt.<\/li>\n<\/ul>\n<p>\nIm Gro\u00dfen und Ganzen \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\">probieren Sie es aus.<\/a><\/noindex>, und wir freuen uns \u00fcber Ihr Feedback sowie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/yandex-csi-driver\/issues\">neue Issues<\/a><\/noindex>, falls Sie auf irgendwelche Probleme sto\u00dfen!<\/p>\n<h2>Weitere Unterst\u00fctzung<\/h2>\n<p>\nZusammenfassend m\u00f6chten wir betonen, dass wir diesen CSI-Treiber nicht aus einer gro\u00dfen Lust auf das Programmieren von Anwendungen in Go entwickelt haben, sondern aus einem dringenden Bedarf innerhalb des Unternehmens. Es erscheint uns nicht sinnvoll, unsere eigene Implementierung zu unterst\u00fctzen, daher werden wir, wenn Yandex Interesse zeigt und die Unterst\u00fctzung des Treibers fortsetzen m\u00f6chte, das Repository gerne in deren H\u00e4nde \u00fcbergeben.<\/p>\n<p>Dar\u00fcber hinaus hat Yandex wahrscheinlich eine eigene Implementierung des CSI-Treibers im verwalteten Kubernetes-Cluster, die als Open Source ver\u00f6ffentlicht werden k\u00f6nnte. Eine solche Entwicklungsrichtung erscheint uns ebenfalls vorteilhaft \u2013 die Community k\u00f6nnte den bew\u00e4hrten Treiber des Dienstanbieters nutzen, anstatt von einem Drittanbieter.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLesen Sie auch in unserem Blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">Volumes-Plugins f\u00fcr Speicher in Kubernetes: von Flexvolume zu CSI<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">Wir verstehen das Container Storage Interface (in Kubernetes und dar\u00fcber hinaus)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">Kubernetes-Cluster einfach und bequem vorbereiten? Wir stellen den Addon-Operator vor.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/455543\/\">Erweiterung und Erg\u00e4nzung von Kubernetes (\u00dcberblick und Video-Pr\u00e4sentation)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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\udd47Unsere Erfahrung in der Entwicklung des CSI-Treibers in Kubernetes f\u00fcr Yandex.Cloud | ProHoster","description":"Wir freuen uns, bekanntzugeben, dass das Unternehmen \u201eFlant\u201c seinen Beitrag zu Open Source-Tools f\u00fcr Kubernetes erweitert und die Alpha-Version des CSI (Container Storage Interface)-Trebers f\u00fcr Yandex.Cloud ver\u00f6ffentlicht hat. Bevor wir jedoch zu den Implementierungsdetails \u00fcbergehen, wollen wir die Frage beantworten, warum dies \u00fcberhaupt notwendig ist, wenn Yandex bereits einen Managed Service for Kubernetes anbietet. Einleitung: Warum ist das wichtig?","canonical_url":"https:\/\/prohoster.info\/de\/blog\/nash-opyt-razrabotki-csi-drajvera-v-kubernetes-dlya-yandeks-oblaka","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/40721","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=40721"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/40721\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/40722"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=40721"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=40721"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=40721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}