Auf dieser Seite wird erläutert, wie Sie einen CSI-Speichertreiber (Container Storage Interface) in GKE on Bare Metal-Clustern installieren.
Überblick
Container Storage Interface (CSI) ist eine API mit offenen Standards, die von vielen großen Speicheranbietern unterstützt wird und es Kubernetes ermöglicht, beliebige Speichersysteme für containerisierte Arbeitslasten verfügbar zu machen.
Kubernetes-Volumes werden von anbieterspezifischen Speichertreibern verwaltet, die in der Vergangenheit in Kubernetes-Binärprogrammen 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 Speicherfeatures 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 Standard für den Cluster festlegen oder Ihre Arbeitslasten für die Verwendung der StorageClass konfigurieren (Beispiel StatefulSet).
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 daraus bestehen, Manifeste in Ihren Clustern bereitzustellen. Eine Liste der CSI-Treiber finden Sie in der CSI-Dokumentation.
Für den Produktionsspeicher empfehlen wir die Installation eines CSI-Treibers von einem GDCV-fähigen Speicherpartner.
Treiberinstallation prüfen
Nach der Installation eines CSI-Treibers können Sie die Installation so prüfen:
kubectl get csinodes -o jsonpath='{range .items[*]} \
{.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
CSI-Treiber verwenden
So verwenden Sie einen CSI-Treiber:
Erstellen Sie eine StorageClass von Kubernetes, die im Feld
provisioner
auf den Treiber verweist.Sie haben folgende Möglichkeiten, um Speicher bereitzustellen:
- Verweisen Sie auf die StorageClass in der
volumeClaimTemplates
-Spezifikation für ein StatefulSet-Objekt. - Legen Sie sie als Standard-StorageClass des Clusters fest.
- Verweisen Sie auf die StorageClass in der
Ü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 Speicherklasse nach ihren Attributen benennen, können Sie StorageClasses mit demselben Namen in mehreren Clustern und Umgebungen erstellen und Ihre Anwendungen erhalten in allen Clustern Speicher 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. Im Beispiel wird davon ausgegangen, dass der Treiber bereits im Cluster installiert wurde.
Die folgende einfache Speicherklasse premium-rwo
verwendet den fiktiven CSI-Treiber csi.example.com
als Bereitsteller:
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 StatefulSets.
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 Anbieter csi.example.com
auf, der sich an die Anbieter-API wendet, um ein Volume zu erstellen. Nachdem das Volume bereitgestellt wurde, erstellt Kubernetes automatisch ein PV, das 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: registry.k8s.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: premium-rwo # This field references the existing StorageClass
Nächste Schritte
- Weitere Informationen zu Speicherkonzepten von GKE on Bare Metal
- Standard-StorageClass für den Cluster festlegen