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
Ersetzen Sie Folgendes:
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
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie auf add_box Erstellen.
Klicken Sie unter Standard auf Konfigurieren.
Konfigurieren Sie den Cluster wie gewünscht.
Klicken Sie im Navigationsbereich unter Cluster auf Features.
Klicken Sie auf das Kästchen CSI-Treiber für nichtflüchtigen Speicher von Compute Engine aktivieren.
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
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie unter Features neben dem Feld CSI-Treiber für nichtflüchtigen Speicher von Compute Engine auf edit CSI-Treiber für Compute Engine bearbeiten.
Klicken Sie auf das Kästchen CSI-Treiber für den nichtflüchtigen Speicher von Compute Engine aktivieren.
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
Rufen Sie in der Google Cloud Console die Seite Google Kubernetes Engine auf.
Klicken Sie in der Clusterliste auf den Namen des Clusters, den Sie ändern möchten.
Klicken Sie unter Features neben dem Feld CSI-Treiber für nichtflüchtigen Speicher von Compute Engine auf edit CSI-Treiber für Compute Engine bearbeiten.
Entfernen Sie den Haken im Kästchen CSI-Treiber für nichtflüchtigen Speicher von Compute Engine aktivieren.
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 Speicherpremium-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
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
Wenden Sie das Manifest an:
kubectl apply -f pd-xfs-class.yaml
PersistentVolumeClaim erstellen
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
Wenden Sie das Manifest an:
kubectl apply -f pd-xfs-pvc.yaml
Pod erstellen, der das Volume verbraucht
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
Wenden Sie das Manifest an:
kubectl apply -f pd-xfs-pod.yaml
Korrekte Bereitstellung des Volume prüfen
Öffnen Sie eine Shell-Sitzung im Pod:
kubectl exec -it pd-xfs-pod -- /bin/bash
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:
Rufen Sie in der Google Cloud Console die Seite Cloud Logging auf.
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 ProjektsLOCATION
: 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
- Weitere Informationen zur Verwendung der Volume-Erweiterung
- Volume-Snapshots verwenden
- Volumes klonen
- Weitere Informationen zum Treiber auf GitHub