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. Der CSI-Treiber für nichtflüchtigen Speicher von Compute Engine ist in Autopilot-Clustern immer aktiviert und kann nicht deaktiviert oder bearbeitet werden. In Standardclustern müssen Sie den CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine aktivieren.

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

Die Verwendung des CSI-Treibers für nichtflüchtigen Speicher von Compute Engine bietet folgende Vorteile:

  • Dadurch werden das automatische Deployment und die automatische Verwaltung des Treibers für nichtflüchtigen Speicher ohne manuelle Einrichtung aktiviert.
  • Sie können vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEKs) verwenden. 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.
  • Sie können das Klonen von Volumes mit dem CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine in Clustern mit GKE Version 1.22 und höher verwenden. Mit dem Klonen von Volumes können Sie zu einem bestimmten Zeitpunkt ein Duplikat Ihres Volumes erstellen, das mit allen Daten des Quellvolumes ausgestattet ist.
  • Fehlerkorrekturen und Funktionsupdates werden unabhängig von Kubernetes-Nebenversionen eingeführt. Dieser Releasezeitplan führt in der Regel zu einem schnelleren Releaserhythmus.

Hinweise

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit gcloud components update ab.

Voraussetzungen

Um den CSI-Treiber für nichtflüchtigen Speicher von Compute Engine verwenden zu können, Ihre Cluster müssen die folgenden Versionen nutzen:

  • Linux-Cluster: GKE-Version 1.14 oder höher
  • Windows-Cluster: GKE-Version 1.18 oder höher

In Version 1.22 und höher ist die CSI-Migration aktiviert. Vorhandene Volumes, die den Anbieter gce-pd verwenden, werden stattdessen für die Kommunikation über CSI-Treiber migriert. Für eine StorageClass sind keine Änderungen erforderlich. Der Anbieter gce-pd unterstützt weiterhin keine Features wie CMEK oder Volume-Snapshots. Um diese Features zu aktivieren, müssen Sie den Anbieter pd.csi.storage.gke.io in der StorageClass verwenden.

Um den CSI-Treiber für nichtflüchtigen Speicher von Compute Engine mit der Workload Identity-Föderation für GKE zu verwenden, müssen Ihre Standardcluster die folgenden Versionen verwenden:

  • Linux-Cluster: GKE-Version 1.16 oder höher.
  • Windows-Cluster: GKE-Version 1.20.8-gke.900 oder höher.

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

Wenn Sie einen Standard-Cluster mit einer Version erstellen möchten, bei der der CSI-Treiber für nichtflüchtigen Speicher von Compute Engine nicht automatisch aktiviert ist, können Sie das -Google Cloud CLI oder die Google Cloud Console verwenden.

Führen Sie die folgenden Schritte aus, um den Treiber beim Erstellen des Clusters zu aktivieren:

gcloud

gcloud container clusters create CLUSTER-NAME \
    --addons=GcePersistentDiskCsiDriver \
    --cluster-version=VERSION

Dabei gilt:

  • CLUSTER-NAME: Der Name Ihres Clusters.
  • VERSION: 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 Flags finden Sie in der Dokumentation zu gcloud container clusters create.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite „Google Kubernetes Engine“

  2. Klicken Sie auf Erstellen.

  3. Klicken Sie unter Standard auf Konfigurieren.

  4. Konfigurieren Sie den Cluster wie gewünscht.

  5. Klicken Sie im Navigationsbereich unter Cluster auf Features.

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

  7. Klicken Sie auf Erstellen.

Nachdem Sie den CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine aktiviert haben, können Sie den Treiber in Kubernetes-Volumes mit dem Namen des Treibers und Bereitstellers verwenden: pd.csi.storage.gke.io.

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

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

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

gcloud

gcloud container clusters update CLUSTER-NAME \
   --update-addons=GcePersistentDiskCsiDriver=ENABLED

Ersetzen Sie CLUSTER-NAME durch den Namen des vorhandenen Clusters.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie unter Features neben dem Feld CSI-Treiber für nichtflüchtigen Speicher von Compute Engine auf CSI-Treiber für Compute Engine bearbeiten.

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

  5. Klicken Sie auf Änderungen speichern.

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

Sie können den CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine für Standardcluster mithilfe der Google Cloud CLI oder der Google Cloud Console deaktivieren.

Wenn Sie den Treiber deaktivieren, werden alle Pods, die aktuell zum Treiber gehörende PersistentVolumes verwenden, nicht beendet. Alle neuen Pods, die diese PersistentVolumes nutzen möchten, können auch nicht gestartet werden.

Um den Treiber in einem vorhandenen Standard-Cluster zu deaktivieren, führen Sie folgende Schritte aus:

gcloud

gcloud container clusters update CLUSTER-NAME \
    --update-addons=GcePersistentDiskCsiDriver=DISABLED

Ersetzen Sie CLUSTER-NAME durch den Namen des vorhandenen Clusters.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.

    Zur Seite "Google Kubernetes Engine"

  2. Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.

  3. Klicken Sie unter Features neben dem Feld CSI-Treiber für nichtflüchtigen Speicher von Compute Engine auf CSI-Treiber für Compute Engine bearbeiten.

  4. Entfernen Sie den Haken im Kästchen CSI-Treiber für nichtflüchtigen Speicher von Compute Engine aktivieren.

  5. Klicken Sie auf Änderungen speichern.

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

In den folgenden Abschnitten wird das typische Verfahren zur Verwendung eines Kubernetes-Volumes erläutert, das von einem CSI-Treiber in GKE unterstützt wird. Diese Abschnitte gelten nur für Cluster mit Linux.

StorageClass erstellen

Nachdem Sie den CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine aktiviert haben, installiert GKE die folgenden StorageClasses automatisch:

  • standard-rwo mit abgestimmtem nichtflüchtigem Speicher
  • premium-rwo mit nichtflüchtigem SSD-Speicher

Bei Autopilot-Clustern lautet die Standard-StorageClass standard-rwo. Diese nutzt den CSI-Treiber für nichtflüchtigen Speicher von Compute Engine. Bei Standard-Clustern verwendet die Standard-StorageClass das integrierte Kubernetes-Volume-Plug-in gcePersistentDisk.

Sie finden den Namen der installierten StorageClasses 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-balanced

Sie können im type-Parameter die folgenden nichtflüchtigen Speichertypen angeben:

  • pd-balanced
  • pd-ssd
  • pd-standard
  • pd-extreme (ab GKE-Version 1.26 unterstützt)

Wenn Sie pd-standard oder pd-extreme verwenden, finden Sie unter Nicht unterstützte Maschinentypen weitere Nutzungseinschränkungen.

Wenn Sie die Option pd-extreme verwenden, müssen Sie dem Manifest auch das Feld provisioned-iops-on-create hinzufügen. Dieses Feld muss auf den gleichen Wert gesetzt werden wie der bereitgestellte IOPS-Wert, den Sie beim Erstellen des nichtflüchtigen Speichers angegeben haben.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-extreme-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-extreme
  provisioned-iops-on-create: '10000'

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

Bei der Verwendung von Pods mit PersistentVolumes empfehlen wir die Verwendung eines Workload-Controllers (z. B. Deployment oder StatefulSet). 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

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

In den folgenden Abschnitten wird das typische Verfahren zur Verwendung eines Kubernetes-Volumes erläutert, das von einem CSI-Treiber in GKE unterstützt wird. Diese Abschnitte gelten nur für Cluster mit Windows.

Es müssen folgende Versionen vorhanden sein:

  • Die Clusterversion muss 1.19.7-gke.2000, 1.20.2-gke.2000 oder höher sein.
  • Die Knotenversionen müssen 1.18.12-gke.1203, 1.19.6-gke.800 oder höher sein.

StorageClass erstellen

Das Erstellen einer StorageClass für Windows ist dem für Linux sehr ähnlich. Beachten Sie aber, dass die standardmäßig installierte StorageClass für Windows nicht funktioniert, da sich deren Dateisystemtyp unterscheidet. Der CSI-Treiber für nichtflüchtigen Speicher von Compute Engine erfordert NTFS als Dateisystemtyp.

Sie können beispielsweise eine StorageClass anhand der Datei pd- windows-class.yaml erstellen. Fügen Sie der Parameterliste csi.storage.k8s.io/fstype: NTFS hinzu:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-sc-windows
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-balanced
  csi.storage.k8s.io/fstype: NTFS

PersistentVolumeClaim erstellen

Nach dem Anlegen einer StorageClass für Windows können Sie einen PersistentVolumeClaim erstellen, der auf diese StorageClass verweist:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc-windows
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: pd-sc-windows
  resources:
    requests:
      storage: 6Gi

Pod erstellen, der das Volume verbraucht

Im folgenden Beispiel wird das Volume verwendet, das Sie in der vorherigen Aufgabe erstellt haben:

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  nodeSelector:
    kubernetes.io/os: windows
  containers:
    - name: iis-server
      image: mcr.microsoft.com/windows/servercore/iis
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /var/lib/www/html
        name: mypvc
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        claimName: podpvc-windows
        readOnly: false

CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine mit nicht standardmäßigen Dateisystemtypen verwenden

Der Standarddateisystemtyp für nichtflüchtigen Compute Engine-Speicher in GKE ist ext4. Sie können auch den Speichertyp xfs verwenden, sofern Ihr Knoten-Image dies unterstützt. Unter Unterstützung für Speichertreiber finden Sie eine Liste der unterstützten Treiber nach Knoten-Image.

Das folgende Beispiel zeigt, wie Sie xfs als Standarddateisystemtyp anstelle von ext4 mit dem CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine verwenden.

StorageClass erstellen

  1. Speichern Sie dieses Manifest als YAML-Datei mit dem Namen pd-xfs-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: xfs-class
    provisioner: pd.csi.storage.gke.io
    parameters:
      type: pd-balanced
      csi.storage.k8s.io/fstype: xfs
    volumeBindingMode: WaitForFirstConsumer
    
  2. Wenden Sie das Manifest an:

    kubectl apply -f pd-xfs-class.yaml
    

PersistentVolumeClaim erstellen

  1. Speichern Sie das folgende Manifest als pd-xfs-pvc.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: xfs-pvc
    spec:
      storageClassName: xfs-class
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  2. Wenden Sie das Manifest an:

    kubectl apply -f pd-xfs-pvc.yaml
    

Pod erstellen, der das Volume verbraucht

  1. Speichern Sie das folgende Manifest als pd-xfs-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pd-xfs-pod
    spec:
      containers:
      - name: cloud-sdk
        image: google/cloud-sdk:slim
        args: ["sleep","3600"]
        volumeMounts:
        - mountPath: /xfs
          name: xfs-volume
      volumes:
      - name: xfs-volume
        persistentVolumeClaim:
          claimName: xfs-pvc
    
  2. Wenden Sie das Manifest an:

    kubectl apply -f pd-xfs-pod.yaml
    

Korrekte Bereitstellung des Volume prüfen

  1. Öffnen Sie eine Shell-Sitzung im Pod:

    kubectl exec -it pd-xfs-pod -- /bin/bash
    
  2. Suchen Sie nach xfs-Partitionen:

    df -aTh --type=xfs
    

    Die Ausgabe sollte in etwa so aussehen:

    Filesystem     Type  Size  Used Avail Use% Mounted on
    /dev/sdb       xfs    30G   63M   30G   1% /xfs
    

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

In Cloud Logging haben Sie die Möglichkeit, Ereignisse aufzurufen, die sich auf den Compute Engine-CSI-Treiber für nichtflüchtigen Speicher beziehen. Logs können Ihnen bei der Fehlerbehebung helfen.

Weitere Informationen zu Cloud Logging finden Sie unter GKE-Logs ansehen.

Führen Sie die folgenden Schritte aus, um Logs für den CSI-Treiber für nichtflüchtigen Speicher von Compute Engine aufzurufen:

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Logging auf.

    Zu Cloud Logging

  2. Führen Sie die folgende Abfrage aus:

     resource.type="k8s_container"
     resource.labels.project_id="PROJECT_ID"
     resource.labels.location="LOCATION"
     resource.labels.cluster_name="CLUSTER_NAME"
     resource.labels.namespace_name="kube-system"
     resource.labels.container_name="gce-pd-driver"
    

    Dabei gilt:

    • PROJECT_ID: Name Ihres Projekts
    • LOCATION: Die Compute Engine-Region oder -Zone des Clusters.
    • CLUSTER_NAME: Der Name Ihres Clusters.

Bekannte Probleme

Nicht unterstützte Maschinentypen

Wenn Sie die Maschinenfamilie der C3-Serie verwenden, wird der nichtflüchtige Speichertyp pd-standard nicht unterstützt.

Wenn Sie versuchen, einen Pod auf einem Computer auszuführen, und der Pod einen nicht unterstützten nichtflüchtigen Speichertyp verwendet, wird eine Warnmeldung wie die folgende auf dem Pod ausgegeben:

AttachVolume.Attach failed for volume "pvc-d7397693-5097-4a70-9df0-b10204611053" : rpc error: code = Internal desc = unknown Attach error: failed when waiting for zonal op: operation operation-1681408439910-5f93b68c8803d-6606e4ed-b96be2e7 failed (UNSUPPORTED_OPERATION): [pd-standard] features are not compatible for creating instance.

Wenn Ihr Cluster mehrere Knotenpools mit unterschiedlichen Maschinenfamilien hat, können Sie mit Knotenmarkierungen und Knotenaffinität begrenzen, wo die Arbeitslasten geplant werden können. Mit diesem Ansatz können Sie beispielsweise eine Arbeitslast mit pd-standard daran hindern, auf einer nicht unterstützten Maschinenfamilie ausgeführt zu werden.

Wenn Sie den nichtflüchtigen Speichertyp pd-extreme verwenden, müssen Sie dafür sorgen, dass Ihr Laufwerk an eine VM-Instanz mit einer geeigneten Maschinenform angehängt ist. Weitere Informationen finden Sie unter Unterstützung von Maschinenformen.

Nächste Schritte