In dieser Anleitung wird beschrieben, wie Sie ein neues Kubernetes-Volume erstellen, das vom Managed Lustre-CSI-Treiber in GKE mit dynamischer Bereitstellung unterstützt wird. Mit dem Managed Lustre-CSI-Treiber können Sie on demand Speicherplatz mit Managed Lustre-Instanzen erstellen und als Volumes für Ihre zustandsorientierten Arbeitslasten darauf zugreifen.
Multi-NIC-Unterstützung für Hochleistungsnetzwerke
Bei GKE-Clustern mit Version 1.35.2-gke.1842000 oder höher ist der Managed Lustre-CSI-Treiber standardmäßig aktiviert, um alle verfügbaren Netzwerkkarten (NICs) für einen höheren Durchsatz zu verwenden. Dabei wird die Bandbreite aggregiert, indem der TCP-Speichertraffic auf Ihre Netzwerkschnittstellen verteilt wird.
Damit Sie die Unterstützung für multi-NIC verwenden können, müssen Ihre Knoten die folgenden Anforderungen erfüllen:
- Standard-NICs für TCP: Ihre Knoten müssen Standard-NICs wie Google Virtual NIC (gVNIC) oder VirtIO-Net verwenden, um TCP-Speichertraffic zu verarbeiten.
- Gleiche VPC: Alle Standard-NICs müssen sich im selben VPC-Netzwerk befinden.
- RDMA-Überlegungen: An Ihre Knoten können auch RDMA-NICs angehängt sein. Der Managed Lustre-CSI-Treiber verwendet jedoch nur die Standard-NICs für TCP-Speichertraffic.
Wenn Sie die Unterstützung für mehrere NICs deaktivieren möchten, lesen Sie den Abschnitt Multi-NIC für Lustre deaktivieren.
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.4780000oder höher verwendet der Treiber standardmäßig Port988für die Lustre-Kommunikation.Legacy-Port (eingestellt): Verwenden Sie den Port
6988, indem Sie das Flag--enable-legacy-lustre-portan Ihregcloud-Befehle in den folgenden Szenarien anhängen:- Frühere GKE-Versionen: Wenn auf Ihrem GKE-Cluster eine Version vor
1.33.2-gke.4780000ausgeführt wird, umgeht das Flag--enable-legacy-lustre-porteinen Portkonflikt mit demgke-metadata-serverauf GKE-Knoten. - Vorhandene Lustre-Instanzen: Wenn Sie eine Verbindung zu einer vorhandenen Managed Lustre-Instanz herstellen, die mit dem Flag
gke-support-enablederstellt wurde, müssen Sie unabhängig von der Clusterversion weiterhin--enable-legacy-lustre-portin Ihregcloud-Befehle einfügen. Ohne dieses Flag kann Ihr GKE-Cluster die vorhandene Lustre-Instanz nicht bereitstellen.
- Frühere 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.
Hinweis
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 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 dem Befehl
gcloud components updateab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
- Informationen zu Einschränkungen und Anforderungen finden Sie in der Übersicht über CSI-Treiber.
- Achten Sie darauf, den Managed Lustre-CSI-Treiber zu aktivieren. In Standard- und Autopilot-Clustern ist er 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_NAMEist der Name des Clusters.PROJECT_ID: Ihre Projekt-ID in Google Cloud .LUSTRE_NETWORK: Das gemeinsam genutzte VPC-Netzwerk (Virtual Private Cloud), in dem sich sowohl der GKE-Cluster als auch die Managed Lustre-Instanz befinden.LUSTRE_IP_RANGE: der Name des IP-Adressbereichs, der für das VPC-Netzwerk-Peering mit Managed Lustre erstellt wurde.LUSTRE_FIREWALL_RULE: der Name der Firewallregel, die TCP-Traffic aus dem IP-Adressbereich zulässt.ZONE: die geografische Zone Ihres GKE-Cluster, z. B.us-central1-a.CLUSTER_VERSION: die GKE-Clusterversion.
VPC-Netzwerk einrichten
Sie müssen beim Erstellen der Managed Lustre-Instanz und Ihrer GKE-Cluster dasselbe VPC-Netzwerk angeben oder die Verbindung über das Network Connectivity Center herstellen, wenn Sie ein Peering-VPC-Netzwerk verwenden.
Führen Sie den folgenden Befehl aus, um Service Networking zu aktivieren:
gcloud services enable servicenetworking.googleapis.com \ --project=${PROJECT_ID}VPC-Netzwerk erstellen. Wenn Sie das Flag
--mtuauf8896setzen, wird die Leistung um 10 % gesteigert.gcloud compute networks create ${NETWORK_NAME} \ --subnet-mode=auto --project=${PROJECT_ID} \ --mtu=8896Erstellen 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 im vorherigen Schritt erstellten Bereich zugeordnet ist.
CIDR_RANGE=$( gcloud compute addresses describe ${IP_RANGE_NAME} \ --global \ --format="value[separator=/](address, prefixLength)" \ --project=${PROJECT_ID} )Erstellen Sie eine Firewallregel, um TCP-Traffic aus dem von Ihnen erstellten IP-Adressbereich zuzulassen.
gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \ --allow=tcp:988,tcp:6988 \ --network=${NETWORK_NAME} \ --source-ranges=${CIDR_RANGE} \ --project=${PROJECT_ID}Wenn Sie Netzwerk-Peering für Ihr Projekt einrichten möchten, prüfen Sie, ob Sie die erforderlichen IAM-Berechtigungen haben, insbesondere die Rolle
compute.networkAdminoderservicenetworking.networksAdmin.- Rufen Sie die Google Cloud Console > IAM & Verwaltung auf und suchen Sie nach dem Hauptkonto 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
Managed Lustre-CSI-Treiber konfigurieren
In diesem Abschnitt wird beschrieben, wie Sie den Managed Lustre-CSI-Treiber aktivieren und deaktivieren können.
Managed Lustre-CSI-Treiber in einem neuen GKE-Cluster aktivieren
In den folgenden Abschnitten wird beschrieben, wie Sie den Managed Lustre-CSI-Treiber in einem neuen GKE-Cluster aktivieren.
Verwenden Sie den Standardport 988.
Führen Sie den folgenden Befehl aus, um den Managed 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
Verwenden Sie den Legacy-Port 6988.
Führen Sie den folgenden Befehl aus, um den Managed 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
Managed 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.
Verwenden Sie den Standardport 988.
Führen Sie den folgenden Befehl aus, um den Managed Lustre-CSI-Treiber in einem vorhandenen GKE-Cluster mit Version 1.33.2-gke.4780000 oder höher zu aktivieren:
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=ENABLED
Verwenden Sie den Legacy-Port 6988.
Wenn Sie den Managed 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 auf einer Version vor
1.33.2-gke.4780000ausgeführt wird. Wenn Sie diesen Cluster mit einer vorhandenen Managed Lustre-Instanz verbinden möchten, die mit dem Flag
gke-support-enablederstellt wurde.gcloud container clusters update ${CLUSTER_NAME} \ --location=${LOCATION} \ --enable-legacy-lustre-port
Knotenupgrade für vorhandene Cluster erforderlich
Wenn Sie den Managed Lustre-CSI-Treiber auf vorhandenen Clustern aktivieren, kann dies dazu führen, dass Knoten neu erstellt werden, um die erforderlichen Kernelmodule für den Managed Lustre-Client zu aktualisieren. Wenn Sie die sofortige Verfügbarkeit benötigen, empfehlen wir ein manuelles Upgrade Ihrer Knotenpools.
GKE-Cluster in einer Release-Version werden gemäß ihrem geplanten Rollout aktualisiert. Je nach Wartungsfenster kann dies mehrere Wochen dauern. Wenn Sie eine statische GKE-Version verwenden, müssen Sie Ihre Knotenpools manuell aktualisieren.
Bis das Knotenupgrade vollständig abgeschlossen ist, kann es auf Knoten, die auf ein Update warten, zu einer Absturzschleife des CSI-Treiber-Pods kommen. Wenn in den Pod-Logs des CSI-Treibers ein Operation not permitted-Fehler angezeigt wird, ist ein Knotenupgrade oder eine Neuerstellung erforderlich.
Nach dem Upgrade des Knotenpools kann es sein, dass CPU-Knoten in der Google Cloud Console oder der CLI-Ausgabe so angezeigt werden, als würden sie ein GPU-Image verwenden. Dieses Verhalten ist so vorgesehen. Das GPU-Image wird auf CPU-Knoten wiederverwendet, um die Managed Lustre-Kernelmodule sicher zu installieren. Die GPU-Nutzung wird Ihnen nicht in Rechnung gestellt.
(Optional) Knotenpool mit mehreren NICs erstellen
Wenn Sie ein Hochleistungsnetzwerk verwenden möchten, müssen Sie einen Knotenpool mit einem Instanztyp erstellen, der mehrere Netzwerkschnittstellen unterstützt. Die Unterstützung mit mehreren NICs ist standardmäßig auf GKE-Clustern aktiviert, auf denen Version 1.35.2-gke.1842000 oder höher ausgeführt wird. Achten Sie darauf, dass sich Ihre sekundären Netzwerkschnittstellen im selben VPC-Netzwerk wie Ihre primäre Schnittstelle befinden.
Führen Sie dazu diesen Befehl aus:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--machine-type=MACHINE_TYPE \
--enable-gvnic \
--additional-node-network network=NETWORK_NAME,subnetwork=SECONDARY_SUBNET
Ersetzen Sie Folgendes:
NODE_POOL_NAME: Der Name des Knotenpools.CLUSTER_NAME: Der Name Ihres Clusters.LOCATION: die Region oder Zone Ihres Clusters.MACHINE_TYPE: der Maschinentyp für den Knotenpool, z. B.a3-megagpu-8g, der häufig mit mehreren NICs für hohe Leistung verwendet wird. Multi-NIC wird für alle Maschinentypen unterstützt.NETWORK_NAME: der Name des VPC-Netzwerk.SECONDARY_SUBNET: der Name des sekundären Subnetzes.
Multi-NIC für Lustre deaktivieren
Die Unterstützung mit mehreren NICs wird für Hochleistungsarbeitslasten empfohlen, aber in bestimmten Szenarien kann es sinnvoll sein, sie zu deaktivieren. Beispielsweise möchten Sie den Lustre-Traffic möglicherweise nicht auf alle verfügbaren Hardwareschnittstellen verteilen oder Sie müssen Verbindungsprobleme zur Fehlerbehebung auf einen einzelnen Netzwerkpfad beschränken.
Hinweis: Wenn Sie die Unterstützung für mit mehreren NICs auf laufenden Knoten deaktivieren, müssen Sie möglicherweise Ihre Knotenpools neu erstellen oder manuell aktualisieren, damit diese Änderung wirksam wird.
Für einen Cluster
Wenn Sie das Hochleistungsnetzwerk für den gesamten Cluster deaktivieren möchten, verwenden Sie beim Erstellen oder Aktualisieren des Clusters das Flag --disable-multi-nic-lustre. Beispiel:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--disable-multi-nic-lustre
Ersetzen Sie Folgendes:
CLUSTER_NAME: Der Name Ihres Clusters.LOCATION: die Region oder Zone Ihres Clusters.
Für einen Knotenpool
Wenn Sie das Hochleistungsnetzwerk für einen bestimmten Knotenpool deaktivieren möchten, aktualisieren Sie den Knotenpool, um das Label lustre.csi.storage.gke.io/multi-nic auf false zu setzen:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=LOCATION \
--node-labels=lustre.csi.storage.gke.io/multi-nic=false
Ersetzen Sie Folgendes:
NODE_POOL_NAME: Der Name des Knotenpools.CLUSTER_NAME: Der Name Ihres Clusters.LOCATION: die Zone Ihres Clusters.
Managed Lustre-CSI-Treiber deaktivieren
Sie können den Managed Lustre-CSI-Treiber auf einem vorhandenen GKE-Cluster mithilfe 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 Managed Lustre-Kernelmodule.
Neues Volume mit dem Managed Lustre-CSI-Treiber erstellen
In den folgenden Abschnitten wird das typische Verfahren zur Erstellung eines Kubernetes-Volumes beschrieben, das von einer Managed 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 Managed Lustre-CSI-Treiber aktiviert ist, erstellt GKE automatisch eine StorageClass für die Bereitstellung von Managed Lustre-Instanzen. Die StorageClass hängt von der Leistungsstufe von Managed Lustre ab und ist eine der folgenden:
lustre-rwx-125mbps-per-tiblustre-rwx-250mbps-per-tiblustre-rwx-500mbps-per-tiblustre-rwx-1000mbps-per-tib
Die GKE bietet eine Standard-StorageClass für jede unterstützte Managed Lustre-Leistungsstufe. 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.
Im folgenden Beispiel wird gezeigt, 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-aEine vollständige Liste der in der StorageClass unterstützten Felder finden Sie in der Referenzdokumentation zum Managed 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 erfahren Sie, 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-classEine 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-pvcWenden Sie das Manifest auf den Cluster an.
kubectl apply -f my-pod.yamlPrü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 podsDie 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 Gruppeneigentümerschaft des Stammverzeichnisses des bereitgestellten Dateisystems so ändern, dass sie mit einer vom Nutzer angeforderten fsGroup übereinstimmt, die im SecurityContext des Pods angegeben ist. fsGroup ändert die Eigentümerschaft des gesamten bereitgestellten Managed Lustre-Dateisystems nicht rekursiv. Nur das Stammverzeichnis des Bereitstellungspunkts ist betroffen.
Fehlerbehebung
Eine Anleitung zur Fehlerbehebung finden Sie auf der Seite zur Fehlerbehebung in der Managed Lustre-Dokumentation.
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-pvcPrüfen Sie den PersistentVolume-Status.
kubectl get pvDie Ausgabe sieht etwa so aus:
No resources foundEs kann einige Minuten dauern, bis die zugrunde liegende Managed Lustre-Instanz vollständig gelöscht ist.