CSI-Treiber für nichtflüchtigen Speicher der Compute Engine verwenden

Google Kubernetes Engine (GKE) bietet eine einfache Möglichkeit zur automatischen Bereitstellung und Verwaltung des CSI-Treibers (Container Storage Interface) für den nichtflüchtigen Speicher in Ihren Clustern.

Die Version des CSI-Treibers für den nichtflüchtigen Speicher von Compute Engine ist an die GKE-Versionsnummern gebunden. Die CSI-Treiberversion für nichtflüchtigen Speicher von Compute Engine ist normalerweise der neueste Treiber, der bei der Veröffentlichung der GKE-Version verfügbar ist. Die Treiber werden automatisch aktualisiert, wenn ein Upgrade des Clusters auf den neuesten GKE-Patch durchgeführt wird.

Vorteile des CSI-Treibers für den nichtflüchtigen Speicher von Compute Engine

Wenn Sie den CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine anstelle des integrierten gcePersistentDisk-Volume-Plug-ins verwenden, profitieren Sie von den folgenden Vorteilen:

  • CSI-Treiber sind die Zukunft der Speichererweiterung in Kubernetes. Kubernetes hat angekündigt, dass die integrierten Volume-Plug-ins voraussichtlich in Version 1.21 aus Kubernetes entfernt werden. Weitere Informationen finden Sie unter Kubernetes-Migration von integrierten Volumes zu CSI-Volumes in der Betaphase. Danach werden alle Volumes, die integrierte Volume-Plug-ins verwenden, über CSI-Treiber kommunizieren.
  • Dadurch wird die automatische Bereitstellung und Verwaltung des Treibers für den nichtflüchtigen Speicher ermöglicht, ohne ihn manuell einrichten oder das integrierte Volume-Plug-in verwenden zu müssen.
  • Es ermöglicht das Bereitstellen zusätzlicher Funktionen von nichtflüchtigen Speichern in GKE. Beispiel:
    • Sie können vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEKs) mit dem CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine verwenden, aber nicht das integrierte Volume-Plug-in. Mit diesen Schlüsseln werden Datenverschlüsselungsschlüssel verschlüsselt, die wiederum Ihre Daten verschlüsseln. Weitere Informationen zu CMEK in GKE finden Sie unter CMEK verwenden.
    • Sie können Volume-Snapshots mit dem CSI-Treiber für nichtflüchtigen Speicher von Compute Engine verwenden. Mit Volume-Snapshots können Sie eine Kopie Ihres Volumes zu einem bestimmten Zeitpunkt erstellen. Mit dieser Kopie können Sie ein Volume auf einen vorherigen Zustand zurücksetzen oder ein neues Volume bereitstellen.
  • Fehlerkorrekturen und Funktionsupdates werden unabhängig von Kubernetes-Nebenversionen eingeführt. Dies führt in der Regel zu einem schnelleren Releaserhythmus.

Voraussetzungen

Wenn Sie den CSI-Treiber für nichtflüchtigen Speicher von Compute Engine verwenden möchten, müssen Sie GKE-Versionen 1.14 oder höher verwenden.

CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine auf einem neuen Cluster aktivieren

Wenn Sie den CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine in neuen Clustern verwenden möchten, aktivieren Sie dieses Feature mit gcloud oder der Google Cloud Console.

gcloud

Standardmäßig ist der CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine nicht aktiviert, wenn Sie einen Cluster erstellen. Führen Sie den folgenden Befehl aus, um den Treiber beim Erstellen des Clusters zu aktivieren:

gcloud beta container clusters create cluster-name \
  --addons=GcePersistentDiskCsiDriver \
  --cluster-version=version

Dabei gilt:

  • cluster-name ist der Name des neuen Clusters.
  • version ist die GKE-Versionsnummer. Sie müssen die Version 1.14 oder höher auswählen, um diese Funktion nutzen zu können.

Eine vollständige Liste der optionalen Flags finden Sie in der Dokumentation zu gcloud container clusters create.

Console

Standardmäßig ist der CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine nicht aktiviert, wenn Sie einen Cluster erstellen. So aktivieren Sie den Treiber bei der Clustererstellung:

  1. Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.

    Zum Google Kubernetes Engine-Menü

  2. Klicken Sie auf Cluster erstellen.

  3. Konfigurieren Sie den Cluster wie gewünscht. Weitere Informationen zu den verschiedenen Clustertypen, die Sie erstellen können, finden Sie unter Clustertypen.

  4. Klicken Sie im Navigationsbereich unter Cluster auf Funktionen.

  5. Klicken Sie auf das Kästchen CSI-Treiber für nichtflüchtigen Speicher von Compute Engine aktivieren.

  6. Klicken Sie auf Erstellen.

Sobald Sie den CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine aktiviert haben, kann der Treiber in Kubernetes-Volumes mit dem Namen des Treibers und des Operators verwendet werden: pd.csi.storage.gke.io.

CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine auf einem vorhandenen Cluster aktivieren

Verwenden Sie gcloud oder die Google Cloud Console, um den CSI-Treiber für nichtflüchtigen Speicher von Compute Engine in vorhandenen Clustern zu aktivieren.

gcloud

Führen Sie den folgenden Befehl aus, um den Treiber auf einem vorhandenen Cluster zu aktivieren:

 gcloud beta container clusters update cluster-name \
  --update-addons=GcePersistentDiskCsiDriver=ENABLED

Ersetzen Sie cluster-name durch den Namen des vorhandenen Clusters.

Console

So aktivieren Sie den Treiber auf einem vorhandenen Cluster:

  1. Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.

    Zum Google Kubernetes Engine-Menü

  2. Klicken Sie auf die Schaltfläche Bearbeiten (Stiftsymbol) des Clusters.

  3. Maximieren Sie Add-ons.

  4. Wählen Sie aus der Drop-down-Liste CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine die Option Aktiviert aus.

  5. Klicken Sie auf Speichern.

CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine deaktivieren

Verwenden Sie gcloud oder die Google Cloud Console, um den CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine zu deaktivieren.

gcloud

Führen Sie den folgenden Befehl aus, um den Treiber auf einem vorhandenen Cluster zu deaktivieren:

gcloud beta container clusters update cluster-name \
--update-addons=GcePersistentDiskCsiDriver=DISABLED

Ersetzen Sie cluster-name durch den Namen des vorhandenen Clusters.

Console

So aktivieren Sie den Treiber auf einem vorhandenen Cluster:

  1. Rufen Sie in der Cloud Console das Kubernetes Engine-Menü auf.

    Zum Google Kubernetes Engine-Menü

  2. Klicken Sie auf die Schaltfläche Bearbeiten (Stiftsymbol) des Clusters.

  3. Maximieren Sie Add-ons.

  4. Wählen Sie aus der Drop-down-Liste CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine die Option Deaktiviert aus.

  5. Klicken Sie auf Speichern.

CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine verwenden

In den folgenden Abschnitten wird das typische Verfahren zur Verwendung eines Kubernetes-Volumes beschrieben, das von einem CSI-Treiber in GKE unterstützt wird.

StorageClass erstellen

Nachdem Sie den CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine aktiviert haben, installiert GKE automatisch eine StorageClass dafür. Der Name der StorageClass lautet standard-rwo. Einige ältere Cluster-Versionen können jedoch einen der folgenden Namen haben:

  • singlewriter-standard
  • standard-singlewriter

Sie finden den Namen der installierten StorageClass mit dem folgenden Befehl:

kubectl get sc

Sie können auch eine andere StorageClass installieren, die den CSI-Treiber für nichtflüchtigen Speicher von Compute Engine verwendet. Geben Sie dazu pd.csi.storage.gke.io im Feld "Bereitsteller" ein.

Sie könnten beispielsweise eine StorageClass anhand der Datei pd-example-class.yaml erstellen:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-ssd

Führen Sie nach dem Erstellen der Datei pd-example-class.yaml den folgenden Befehl aus:

kubectl create -f pd-example-class.yaml

PersistentVolumeClaim erstellen

Sie können einen PersistentVolumeClaim erstellen, der auf die StorageClass des CSI-Treibers für nichtflüchtigen Speicher von Compute Engine verweist. Die folgende Datei namens pvc-example.yaml verwendet die vorinstallierte Speicherklasse standard-rwo:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: standard-rwo
  resources:
    requests:
      storage: 6Gi

Führen Sie nach dem Erstellen des PersistentVolumeClaim-Manifests den folgenden Befehl aus:

kubectl create -f pvc-example.yaml

In der vorinstallierten StorageClass standard-rwo ist volumeBindingMode auf WaitForFirstConsumer festgelegt. Wenn volumeBindingMode auf WaitForFirstConsumer festgelegt ist, wird das PersistentVolume erst bereitgestellt, wenn ein Pod geplant ist, der auf den PersistentVolumeClaim verweist. Wenn volumeBindingMode in der StorageClass auf Immediate festgelegt ist oder ausgelassen wird, wird das durch den nichtflüchtigen Speicher gesicherte PersistentVolume bereitgestellt, nachdem der PersistentVolumeClaim erstellt wurde.

Pod erstellen, der das Volume verbraucht

Wenn Sie Pods mit PersistentVolumes verwenden, sollten Sie einen Workload-Controller (z. B. Deployment oder StatefulSet) einsetzen. Auch wenn Sie normalerweise keinen eigenständigen Pod verwenden würden, wird im folgenden Beispiel der Einfachheit halber ein solcher Pod genutzt.

Im folgenden Beispiel wird das Volume verwendet, das Sie im vorherigen Abschnitt erstellt haben:

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - mountPath: /var/lib/www/html
         name: mypvc
  volumes:
   - name: mypvc
     persistentVolumeClaim:
       claimName: podpvc
       readOnly: false

Nächste Schritte