Container Storage Interface-Treiber installieren

Auf dieser Seite wird erläutert, wie Sie einen CSI-Speichertreiber (Container Storage Interface) in lokalen Anthos GKE-Clustern installieren.

Überblick

CSI ist eine offene Standard-API, mit der Kubernetes beliebige Speichersysteme für containerisierte Arbeitslasten verfügbar machen kann. Wenn Sie einen CSI-kompatiblen Speichertreiber in einem GKE On-Prem-Cluster bereitstellen, kann der Cluster direkt eine Verbindung zu einem kompatiblen Speichergerät herstellen, ohne den vSphere Speicher verwenden zu müssen.

Kubernetes-Volumes werden von anbieterspezifischen Speichertreibern verwaltet, die in der Vergangenheit in Kubernetes-Binärdateien kompiliert wurden. Bisher konnten Sie keinen Speichertreiber verwenden, der nicht in Kubernetes enthalten war. Durch die Installation eines CSI-Treibers wird die Unterstützung eines Speichersystems hinzugefügt, das nativ nicht von Kubernetes unterstützt wird. Außerdem ermöglicht CSI die Verwendung moderner Speicherfunktionen wie Snapshots und Größenanpassungen.

Wenn Sie einen CSI-Treiber verwenden möchten, müssen Sie eine StorageClass von Kubernetes erstellen. Sie legen den CSI-Treiber als Bereitsteller für die StorageClass fest. Anschließend können Sie die StorageClass als Standardcluster festlegen oder Ihre Arbeitslasten für die Verwendung der StorageClass konfigurieren (StatefulSet-Beispiel).

Hinweis

Standardmäßig verwendet GKE On-Prem vSphere-Datenspeicher über den integrierten vSphereVolume-Treiber. Darüber hinaus können die integrierten Treiber für NFS und iSCSI vorhandene Volumes an Ihre Arbeitslasten anhängen und bereitstellen.

CSI-Treiber eines Anbieters installieren

Speicheranbieter entwickeln ihre eigenen CSI-Treiber und sind für die Bereitstellung der Installationsanweisungen verantwortlich. In einfachen Fällen kann die Installation nur die Bereitstellung von Manifesten in Ihren Clustern beinhalten. Eine Liste der CSI-Treiber finden Sie in der CSI-Dokumentation.

Prüfen der Treiberinstallation

Nachdem Sie einen CSI-Treiber installiert haben, können Sie die Installation prüfen. Führen Sie je nach der lokalen GKE-Version Ihres Clusters einen der folgenden Befehle aus:

1.2.0-gke.5

kubectl get csinodes \
-o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'

1.1.0-gke.6

kubectl get nodes \
-o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'

CSI-Treiber verwenden

So verwenden Sie einen CSI-Treiber:

  1. Erstellen Sie eine StorageClass von Kubernetes, die im Feld provisioner auf den Treiber verweist.

  2. Sie haben folgende Möglichkeiten, um Speicher bereitzustellen:

Überlegungen zu StorageClasses, die von einem CSI-Treiber unterstützt werden

Beachten Sie beim Erstellen einer StorageClass Folgendes:

  • Die CSI-Treiberdokumentation sollte die treiberspezifischen Parameter enthalten, die Sie für Ihre StorageClass angeben, einschließlich des Bereitstellernamens.
  • Sie sollten die StorageClass nach ihren Attributen benennen und nicht nach dem Namen des spezifischen Treibers oder der Appliance dahinter. Wenn Sie die StorageClass nach ihren Attributen benennen, können Sie StorageClasses mit demselben Namen in mehreren Clustern und Umgebungen erstellen und Ihre Anwendungen erhalten Speicher in mehreren Clustern mit denselben Attributen.

Beispiel: Auf StorageClass in einem StatefulSet verweisen

Im folgenden Beispiel wird gezeigt, wie Sie einen CSI-Treiber in einer StorageClass definieren und dann in einer StatefulSet-Arbeitslast auf die StorageClass verweisen. In diesem Beispiel wird davon ausgegangen, dass der Treiber bereits im Cluster installiert wurde.

Im Folgenden finden Sie eine einfache StorageClass namens premium-rwo, die den fiktiven CSI-Treiber csi.example.com als Bereitsteller verwendet:

fast-sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-rwo
provisioner: csi.example.com # CSI driver
parameters: # You provide vendor-specific parameters to this specification
  type: example-parameter # Be sure to follow the vendor's instructions
  datastore: my-datastore
reclaimPolicy: Retain
allowVolumeExpansion: true

Sie verweisen auf die StorageClass in der volumeClaimTemplates -Spezifikation eines StatefulSet.

Wenn Sie in der Spezifikation volumeClaimTemplates eines StatefulSet auf eine StorageClass verweisen, bietet Kubernetes stabilen Speicher mit PersistentVolumes (PVs). Kubernetes ruft den in der StorageClass definierten Bereitsteller auf, um ein neues Speicher-Volume zu erstellen. In diesem Fall ruft Kubernetes den fiktiven csi.example.com-Anbieter auf, der die API des Anbieters aufruft, um ein Volume zu erstellen. Nachdem das Volume bereitgestellt wurde, erstellt Kubernetes automatisch eine VM, die den Speicher darstellt.

Hier ist ein einfaches StatefulSet, das auf die StorageClass verweist:

statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: fast # This field references the existing StorageClass

Nächste Schritte