Auf dieser Seite wird beschrieben, wie ein CSI-Speichertreiber in Google Kubernetes Engine-Standardclustern (GKE) installiert wird. Diese Seite gilt nicht für GKE Autopilot-Cluster, die automatisch den CSI-Treiber für nichtflüchtige Speicher von Compute Engine verwenden.
Wenn Sie den CSI-Treiber für nichtflüchtige Speicher von Compute Engine in Ihrem Standardcluster verwenden, empfehlen wir die automatische Bereitstellung des Treibers, um Ihren Verwaltungsaufwand zu reduzieren.
Übersicht
CSI ist eine offene Standard API, mit der Kubernetes beliebige Speichersysteme für containerisierte Arbeitslasten bereitstellen kann. 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 Speicherfeatures wie Snapshots und Größenanpassungen.
CSI-Treiber eines Anbieters installieren
Andere Speicheranbieter entwickeln eigene CSI-Treiber und sind für die Bereitstellung der Installationsanleitungen 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.
Treiberinstallation prüfen
Nachdem Sie einen CSI-Treiber installiert haben, können Sie die Installation prüfen, indem Sie je nach GKE-Version des Clusters einen der folgenden Befehle ausführen:
1.14+
kubectl get csinodes \ -o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
1.13.x
kubectl get nodes \ -o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'
CSI-Treiber verwenden
So verwenden Sie einen CSI-Treiber:
Erstellen Sie eine StorageClass von Kubernetes, die im Feld
provisioner
auf den Treiber verweist, wenn im Rahmen der Treiberinstallation keine StorageClass für Sie erstellt wird. Einige CSI-Treiber stellen bei der Installation eine StorageClass bereit.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 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. Im 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 StatefulSets.
Wenn Sie in der volumeClaimTemplates
-Spezifikation eines StatefulSets auf eine StorageClass verweisen, bietet Kubernetes einen stabilen Speicher mit PersistentVolumes.
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 PersistentVolume, 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