In dieser Anleitung wird beschrieben, wie Sie in GKE mit dynamischer Bereitstellung ein neues Kubernetes-Volume erstellen, das vom Managed Lustre-CSI-Treiber unterstützt wird. Mit dem verwalteten Lustre-CSI-Treiber können Sie on demand Speicherplatz mit verwalteten Lustre-Instanzen erstellen und als Volumes für Ihre zustandsorientierten Arbeitslasten darauf zugreifen.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Cloud Managed Lustre API und die Google Kubernetes Engine API. APIs aktivieren
- Wenn Sie die Google Cloud CLI für diesen Task 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 dem Befehl
gcloud components update
ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
- Informationen zu Einschränkungen und Anforderungen finden Sie in der CSI-Treiberübersicht.
- Aktivieren Sie den verwalteten Lustre-CSI-Treiber. Sie ist in Standard- und Autopilot-Clustern standardmäßig deaktiviert.
Umgebungsvariablen einrichten
Richten Sie die folgenden Umgebungsvariablen ein:
export CLUSTER_NAME=CLUSTER_NAME
export PROJECT_ID=PROJECT_ID
export NETWORK_NAME=LUSTRE_NETWORK
export IP_RANGE_NAME=LUSTRE_IP_RANGE
export FIREWALL_RULE_NAME=LUSTRE_FIREWALL_RULE
export LOCATION=ZONE
export CLUSTER_VERSION=CLUSTER_VERSION
Ersetzen Sie Folgendes:
CLUSTER_NAME
ist der Name des Clusters.PROJECT_ID
: Ihre Google Cloud Projekt-ID.LUSTRE_NETWORK
: Das freigegebene VPC-Netzwerk (Virtual Private Cloud), in dem sich sowohl der GKE-Cluster als auch die verwaltete Lustre-Instanz befinden.LUSTRE_IP_RANGE
: Der Name des IP-Adressbereichs, der für VPC-Network-Peering mit Managed Lustre erstellt wurde.LUSTRE_FIREWALL_RULE
: der Name der Firewallregel, mit der TCP-Traffic aus dem IP-Adressbereich zugelassen wird.ZONE
: die geografische Zone Ihres GKE-Cluster, z. B.us-central1-a
.CLUSTER_VERSION
: die GKE-Clusterversion.
VPC-Netzwerk einrichten
Sie müssen dasselbe VPC-Netzwerk angeben, wenn Sie die verwaltete Lustre-Instanz und Ihre GKE-Cluster erstellen. Wenn Sie ein per Peering verbundenes VPC-Netzwerk verwenden, müssen Sie die Verbindung über Network Connectivity Center herstellen.
Führen Sie den folgenden Befehl aus, um das Dienstnetzwerk zu aktivieren:
gcloud services enable servicenetworking.googleapis.com \ --project=${PROJECT_ID}
VPC-Netzwerk erstellen. Wenn Sie das Flag
--mtu
auf8896
festlegen, ergibt sich eine Leistungssteigerung von 10 %.gcloud compute networks create ${NETWORK_NAME} \ --subnet-mode=auto --project=${PROJECT_ID} \ --mtu=8896
Erstellen Sie einen IP-Adressbereich.
gcloud compute addresses create ${IP_RANGE_NAME} \ --global \ --purpose=VPC_PEERING \ --prefix-length=20 \ --description="Managed Lustre VPC Peering" \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID}
Rufen Sie den CIDR-Bereich ab, der dem Bereich zugeordnet ist, den Sie im vorherigen Schritt erstellt haben.
CIDR_RANGE=$( gcloud compute addresses describe ${IP_RANGE_NAME} \ --global \ --format="value[separator=/](address, prefixLength)" \ --project=${PROJECT_ID} )
Erstellen Sie eine Firewallregel, die den TCP-Traffic aus dem von Ihnen erstellten IP-Adressbereich zulässt.
gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \ --allow=tcp:988,tcp:6988 \ --network=${NETWORK_NAME} \ --source-ranges=${CIDR_RANGE} \ --project=${PROJECT_ID}
Prüfen Sie, ob Sie die erforderlichen IAM-Berechtigungen für das Einrichten von Netzwerk-Peering für Ihr Projekt haben, insbesondere die Rolle
compute.networkAdmin
oderservicenetworking.networksAdmin
.- Rufen Sie die Google Cloud Console > IAM & Verwaltung auf und suchen Sie nach dem Prinzipal des Projektinhabers.
- Klicken Sie auf das Stiftsymbol und dann auf + WEITERE ROLLE HINZUFÜGEN.
- Wählen Sie Compute-Netzwerkadministrator oder Service Networking-Administrator aus.
- Klicken Sie auf Speichern.
Stellen Sie die Peering-Verbindung her.
gcloud services vpc-peerings connect \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID} \ --ranges=${IP_RANGE_NAME} \ --service=servicenetworking.googleapis.com
Verwalteten Lustre-CSI-Treiber konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie den verwalteten Lustre-CSI-Treiber bei Bedarf aktivieren und deaktivieren können.
Lustre-Kommunikationsports
Der GKE Managed Lustre-CSI-Treiber verwendet je nach GKE-Clusterversion und vorhandenen Managed Lustre-Konfigurationen unterschiedliche Ports für die Kommunikation mit Managed Lustre-Instanzen.
Standardport (empfohlen): Bei neuen GKE-Clustern mit Version
1.33.2-gke.4780000
oder höher verwendet der Treiber standardmäßig Port988
für die Lustre-Kommunikation.Legacy-Port:Verwenden Sie Port
6988
, indem Sie das Flag--enable-legacy-lustre-port
an Ihregcloud
-Befehle anhängen, wenn einer der folgenden Fälle eintritt:- Ältere GKE-Versionen:Wenn auf Ihrem GKE-Cluster eine Version vor
1.33.2-gke.4780000
ausgeführt wird, umgeht das Flag--enable-legacy-lustre-port
einen Portkonflikt mitgke-metadata-server
auf GKE-Knoten. - Vorhandene Lustre-Instanzen:Wenn Sie eine Verbindung zu einer vorhandenen Managed Lustre-Instanz herstellen, die mit dem Flag
gke-support-enabled
erstellt wurde, müssen Sie--enable-legacy-lustre-port
weiterhin in Ihregcloud
-Befehle einfügen, unabhängig von Ihrer Clusterversion. Ohne dieses Flag kann in Ihrem GKE-Cluster die vorhandene Lustre-Instanz nicht eingebunden werden. Informationen zum Flaggke-support-enabled
finden Sie in der Beschreibung der optionalen Flags unter Instanz erstellen.
- Ältere GKE-Versionen:Wenn auf Ihrem GKE-Cluster eine Version vor
Sie können die neuen und vorhandenen Cluster so konfigurieren, dass entweder der Standardport 988
oder der Legacy-Port 6988
verwendet wird.
Verwalteten Lustre-CSI-Treiber auf einem neuen GKE-Cluster aktivieren
In den folgenden Abschnitten wird beschrieben, wie Sie den Managed Lustre CSI-Treiber in einem neuen GKE-Cluster aktivieren.
Standardport 988
verwenden
Führen Sie den folgenden Befehl aus, um den verwalteten Lustre-CSI-Treiber zu aktivieren, wenn Sie einen neuen GKE-Cluster mit Version 1.33.2-gke.4780000
oder höher erstellen:
Autopilot
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--enable-lustre-csi-driver
Standard
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver
Den alten Port 6988
verwenden
Führen Sie den folgenden Befehl aus, um den verwalteten Lustre-CSI-Treiber zu aktivieren, wenn Sie einen neuen GKE-Cluster erstellen, auf dem eine Version vor 1.33.2-gke.4780000
ausgeführt wird:
Autopilot
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--enable-lustre-csi-driver \
--enable-legacy-lustre-port
Standard
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver \
--enable-legacy-lustre-port
Verwalteten Lustre-CSI-Treiber auf vorhandenen GKE-Clustern aktivieren
In den folgenden Abschnitten wird beschrieben, wie Sie den Managed Lustre CSI-Treiber in vorhandenen GKE-Clustern aktivieren.
Standardport 988
verwenden
Führen Sie den folgenden Befehl aus, um den verwalteten Lustre-CSI-Treiber auf einem vorhandenen GKE-Cluster zu aktivieren, auf dem Version 1.33.2-gke.4780000
oder höher ausgeführt wird:
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=ENABLED
Den alten Port 6988
verwenden
Wenn Sie den verwalteten Lustre-CSI-Treiber in einem vorhandenen GKE-Cluster aktivieren möchten, müssen Sie möglicherweise den Legacy-Port 6988
verwenden, indem Sie das Flag --enable-legacy-lustre-port
hinzufügen. Dieses Flag ist in den folgenden Szenarien erforderlich:
- Wenn Ihr GKE-Cluster eine ältere Version als
1.33.2-gke.4780000
verwendet. Wenn Sie diesen Cluster mit einer vorhandenen Managed Lustre-Instanz verbinden möchten, die mit dem Flag
gke-support-enabled
erstellt wurde.gcloud container clusters update ${CLUSTER_NAME} \ --location=${LOCATION} \ --enable-legacy-lustre-port
Knotenupgrade für vorhandene Cluster erforderlich
Wenn Sie den verwalteten Lustre-CSI-Treiber auf vorhandenen Clustern aktivieren, kann dies dazu führen, dass Knoten neu erstellt werden, um die erforderlichen Kernelmodule für den verwalteten Lustre-Client zu aktualisieren. Für eine sofortige Verfügbarkeit empfehlen wir, Ihre Knotenpools manuell zu aktualisieren.
GKE-Cluster in einer Release-Version werden gemäß dem geplanten Rollout aktualisiert. Das kann je nach Wartungszeitraum mehrere Wochen dauern. Wenn Sie eine statische GKE-Version verwenden, müssen Sie Ihre Knotenpools manuell aktualisieren.
Nach dem Upgrade des Knotenpools wird für CPU-Knoten in derGoogle Cloud -Konsole oder in der CLI-Ausgabe möglicherweise ein GPU-Image angezeigt. Beispiel:
config:
imageType: COS_CONTAINERD
nodeImageConfig:
image: gke-1330-gke1552000-cos-121-18867-90-4-c-nvda
Dieses Verhalten ist so vorgesehen. Das GPU-Image wird auf CPU-Knoten wiederverwendet, um die Managed Lustre-Kernelmodule sicher zu installieren. Ihnen wird die GPU-Nutzung nicht in Rechnung gestellt.
Managed Lustre-CSI-Treiber deaktivieren
Sie können den Managed Lustre-CSI-Treiber in einem vorhandenen GKE-Cluster mit der Google Cloud CLI deaktivieren.
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=DISABLED
Nachdem der CSI-Treiber deaktiviert wurde, erstellt GKE Ihre Knoten automatisch neu und deinstalliert die verwalteten Lustre-Kernelmodule.
Mit dem Managed Lustre-CSI-Treiber ein neues Volume erstellen
In den folgenden Abschnitten wird das typische Verfahren zum Erstellen eines Kubernetes-Volumes beschrieben, das von einer verwalteten Lustre-Instanz in GKE unterstützt wird:
- StorageClass erstellen
- Greifen Sie mit einem PersistentVolumeClaim auf das Volume zu.
- Erstellen Sie eine Arbeitslast, die das Volume verbraucht.
StorageClass erstellen
Wenn der verwaltete Lustre-CSI-Treiber aktiviert ist, erstellt GKE automatisch eine StorageClass für die Bereitstellung von verwalteten Lustre-Instanzen. Die StorageClass hängt von der Leistungsstufe von Managed Lustre ab und ist eine der folgenden:
lustre-rwx-125mbps-per-tib
lustre-rwx-250mbps-per-tib
lustre-rwx-500mbps-per-tib
lustre-rwx-1000mbps-per-tib
GKE bietet für jede unterstützte Leistungsstufe von Managed Lustre eine Standard-StorageClass. Dies vereinfacht die dynamische Bereitstellung von Managed Lustre-Instanzen, da Sie die integrierten StorageClasses verwenden können, ohne eigene definieren zu müssen.
Bei zonalen Clustern stellt der CSI-Treiber Managed Lustre-Instanzen in derselben Zone wie der Cluster bereit. Bei regionalen Clustern wird die Instanz in einer der Zonen innerhalb der Region bereitgestellt.
Das folgende Beispiel zeigt, wie Sie eine benutzerdefinierte StorageClass mit bestimmten Topologieanforderungen erstellen:
Speichern Sie folgendes Manifest in einer Datei mit dem Namen
lustre-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: lustre-class provisioner: lustre.csi.storage.gke.io volumeBindingMode: Immediate reclaimPolicy: Delete parameters: perUnitStorageThroughput: "1000" network: LUSTRE_NETWORK allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - us-central1-a
Eine vollständige Liste der in der StorageClass unterstützten Felder finden Sie in der Referenzdokumentation zum verwalteten Lustre-CSI-Treiber.
Erstellen Sie die StorageClass mit dem folgenden Befehl:
kubectl apply -f lustre-class.yaml
Mit einem PersistentVolumeClaim auf das Volume zugreifen
In diesem Abschnitt wird beschrieben, wie Sie eine PersistentVolumeClaim-Ressource erstellen, die auf die StorageClass des Managed Lustre-CSI-Treibers verweist.
Speichern Sie folgendes Manifest in einer Datei mit dem Namen
lustre-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: lustre-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 9000Gi storageClassName: lustre-class
Eine vollständige Liste der Felder, die im PersistentVolumeClaim unterstützt werden, finden Sie in der Referenzdokumentation zum Managed Lustre-CSI-Treiber.
Erstellen Sie den PersistentVolumeClaim mit dem folgenden Befehl:
kubectl apply -f lustre-pvc.yaml
Arbeitslast erstellen, die das Volume verbraucht
In diesem Abschnitt wird ein Beispiel für das Erstellen eines Pods gezeigt, der die zuvor erstellte PersistentVolumeClaim-Ressource nutzt.
Eine PersistentVolumeClaim-Ressource kann von mehreren Pods verwendet werden.
Speichern Sie folgendes Manifest in einer Datei mit dem Namen
my-pod.yaml
.apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx image: nginx volumeMounts: - name: lustre-volume mountPath: /data volumes: - name: lustre-volume persistentVolumeClaim: claimName: lustre-pvc
Wenden Sie das Manifest auf den Cluster an.
kubectl apply -f my-pod.yaml
Prüfen Sie, ob der Pod ausgeführt wird. Der Pod wird ausgeführt, nachdem der PersistentVolumeClaim bereitgestellt wurde. Dieser Vorgang kann einige Minuten dauern.
kubectl get pods
Die Ausgabe sieht etwa so aus:
NAME READY STATUS RESTARTS AGE my-pod 1/1 Running 0 11s
fsGroup mit Managed Lustre-Volumes verwenden
Sie können die Gruppenzugehörigkeit des Verzeichnisses auf Stammebene des eingebundenen Dateisystems so ändern, dass sie einer vom Nutzer angeforderten fsGroup entspricht, die im SecurityContext des Pods angegeben ist. fsGroup ändert die Zugehörigkeit des gesamten eingebundenen Managed Lustre-Dateisystems nicht rekursiv, sondern nur das Stammverzeichnis des Mount-Points.
Fehlerbehebung
Eine Anleitung zur Fehlerbehebung finden Sie in der Managed Lustre-Dokumentation auf der Seite zur Fehlerbehebung.
Bereinigen
Löschen Sie die in dieser Anleitung erstellten Speicherressourcen, damit Ihrem Google Cloud Konto keine Gebühren in Rechnung gestellt werden.
Löschen Sie den Pod und den PersistentVolumeClaim.
kubectl delete pod my-pod kubectl delete pvc lustre-pvc
Prüfen Sie den PersistentVolume-Status.
kubectl get pv
Die Ausgabe sieht etwa so aus:
No resources found
Es kann einige Minuten dauern, bis die zugrunde liegende verwaltete Lustre-Instanz vollständig gelöscht ist.