本指南說明如何在 GKE 中,透過動態佈建功能,使用 Managed Lustre CSI 驅動程式建立新的 Kubernetes 磁碟區。您可以使用 Managed Lustre CSI 驅動程式,視需要建立以Managed Lustre 執行個體為基礎的儲存空間,並以磁碟區的形式存取這些儲存空間,用於有狀態的工作負載。
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Cloud Managed Lustre API 和 Google Kubernetes Engine API。 啟用 API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
- 如要瞭解限制和需求,請參閱 CSI 驅動程式總覽。
- 請務必啟用受管理 Lustre CSI 驅動程式。在 Standard 和 Autopilot 叢集中,這項功能預設為停用。
設定環境變數
設定下列環境變數:
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
更改下列內容:
CLUSTER_NAME
:叢集名稱。PROJECT_ID
:您的 Google Cloud 專案 ID。LUSTRE_NETWORK
:共用虛擬私有雲 (VPC) 網路,GKE 叢集和 Managed Lustre 執行個體都位於這個網路中。LUSTRE_IP_RANGE
:為虛擬私有雲網路對等互連與 Managed Lustre 建立的 IP 位址範圍名稱。LUSTRE_FIREWALL_RULE
:防火牆規則的名稱,可允許來自 IP 位址範圍的 TCP 流量。ZONE
:GKE 叢集的地理區域,例如us-central1-a
。CLUSTER_VERSION
:GKE 叢集版本。
設定虛擬私有雲網路
建立 Managed Lustre 執行個體和 GKE 叢集時,您必須指定相同的虛擬私有雲網路,或是使用對等互連的虛擬私有雲網路時,透過 Network Connectivity Center 連線。
如要啟用服務網路,請執行下列指令:
gcloud services enable servicenetworking.googleapis.com \ --project=${PROJECT_ID}
建立虛擬私有雲網路。將
--mtu
旗標設為8896
,可提升 10% 的效能。gcloud compute networks create ${NETWORK_NAME} \ --subnet-mode=auto --project=${PROJECT_ID} \ --mtu=8896
建立 IP 位址範圍。
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}
取得與您在上一個步驟中建立的範圍相關聯的 CIDR 範圍。
CIDR_RANGE=$( gcloud compute addresses describe ${IP_RANGE_NAME} \ --global \ --format="value[separator=/](address, prefixLength)" \ --project=${PROJECT_ID} )
建立防火牆規則,允許來自您建立的 IP 位址範圍的 TCP 流量。
gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \ --allow=tcp:988,tcp:6988 \ --network=${NETWORK_NAME} \ --source-ranges=${CIDR_RANGE} \ --project=${PROJECT_ID}
如要為專案設定網路對等互連,請確認您具備必要的 IAM 權限,具體來說就是
compute.networkAdmin
或servicenetworking.networksAdmin
角色。- 前往 Google Cloud 控制台 >「IAM 與管理」,然後搜尋專案擁有者主體。
- 按一下鉛筆圖示,然後點選「+ 新增其他角色」。
- 選取「Compute Network Admin」或「Service Networking Admin」。
- 按一下 [儲存]。
連線對等互連。
gcloud services vpc-peerings connect \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID} \ --ranges=${IP_RANGE_NAME} \ --service=servicenetworking.googleapis.com
設定受管理 Lustre CSI 驅動程式
本節說明如何視需要啟用及停用 Managed Lustre CSI 驅動程式。
Lustre 通訊埠
GKE Managed Lustre CSI 驅動程式會使用不同的通訊埠與 Managed Lustre 執行個體通訊,具體取決於 GKE 叢集版本和現有的 Managed Lustre 設定。
預設通訊埠 (建議):對於執行
1.33.2-gke.4780000
以上版本的新 GKE 叢集,驅動程式預設會使用通訊埠988
進行 Lustre 通訊。舊版通訊埠:在下列情況下,請使用通訊埠
6988
,並在gcloud
指令中附加--enable-legacy-lustre-port
旗標:- 較舊的 GKE 版本:如果 GKE 叢集執行的版本早於
1.33.2-gke.4780000
,--enable-legacy-lustre-port
旗標可解決 GKE 節點上gke-metadata-server
的連接埠衝突問題。 - 現有 Lustre 執行個體:如果您要連線至使用
gke-support-enabled
旗標建立的現有 Managed Lustre 執行個體,無論叢集版本為何,都必須在gcloud
指令中加入--enable-legacy-lustre-port
。如果沒有這個標記,GKE 叢集就無法掛接現有的 Lustre 執行個體。如要瞭解gke-support-enabled
標記,請參閱「建立執行個體」中的選用標記說明。
- 較舊的 GKE 版本:如果 GKE 叢集執行的版本早於
您可以將新叢集和現有叢集設定為使用預設連接埠 988
或舊版連接埠 6988
。
在新 GKE 叢集上啟用 Managed Lustre CSI 驅動程式
以下各節說明如何在新的 GKE 叢集上啟用 Managed Lustre CSI 驅動程式。
使用預設通訊埠 988
如要在建立執行 1.33.2-gke.4780000
版以上的新 GKE 叢集時啟用 Managed Lustre CSI 驅動程式,請執行下列指令:
Autopilot
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--enable-lustre-csi-driver
標準
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver
使用舊版通訊埠 6988
如要在建立執行 1.33.2-gke.4780000
之前版本的 GKE 叢集時啟用代管 Lustre CSI 驅動程式,請執行下列指令:
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
標準
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver \
--enable-legacy-lustre-port
在現有 GKE 叢集上啟用 Managed Lustre CSI 驅動程式
以下各節說明如何在現有 GKE 叢集上啟用 Managed Lustre CSI 驅動程式。
使用預設通訊埠 988
如要在執行 1.33.2-gke.4780000
以上版本的現有 GKE 叢集上啟用 Managed Lustre CSI 驅動程式,請執行下列指令:
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=ENABLED
使用舊版通訊埠 6988
如要在現有 GKE 叢集上啟用代管 Lustre CSI 驅動程式,您可能需要使用舊版通訊埠 6988
,方法是新增 --enable-legacy-lustre-port
標記。在下列情況中,這個標記是必要條件:
- 如果 GKE 叢集執行的版本早於
1.33.2-gke.4780000
。 如果您打算將這個叢集連線至使用
gke-support-enabled
標記建立的現有 Managed Lustre 執行個體。gcloud container clusters update ${CLUSTER_NAME} \ --location=${LOCATION} \ --enable-legacy-lustre-port
現有叢集必須升級節點
在現有叢集上啟用 Managed Lustre CSI 驅動程式時,系統可能會重新建立節點,以便更新 Managed Lustre 用戶端所需的核心模組。如要立即使用,建議手動升級節點集區。
發布版本中的 GKE 叢集會根據排定的推出時間升級,視維護時間而定,可能需要幾週時間。如果使用靜態 GKE 版本,則需要手動升級節點集區。
節點集區升級後,CPU 節點可能會在Google Cloud 控制台或 CLI 輸出中顯示使用 GPU 映像檔。例如:
config:
imageType: COS_CONTAINERD
nodeImageConfig:
image: gke-1330-gke1552000-cos-121-18867-90-4-c-nvda
這是正常現象。GPU 映像檔會重複用於 CPU 節點,以安全地安裝 Managed Lustre 核心模組。系統不會向您收取 GPU 使用費。
停用 Managed Lustre CSI 驅動程式
您可以使用 Google Cloud CLI,在現有 GKE 叢集上停用 Managed Lustre CSI 驅動程式。
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=DISABLED
停用 CSI 驅動程式後,GKE 會自動重建節點,並解除安裝 Managed Lustre 核心模組。
使用 Managed Lustre CSI 驅動程式建立新磁碟區
下列各節說明在 GKE 中建立由 Managed Lustre 執行個體支援的 Kubernetes 磁碟區時,通常會執行的程序:
建立 StorageClass
啟用代管 Lustre CSI 驅動程式後,GKE 會自動建立 StorageClass,用於佈建代管 Lustre 執行個體。StorageClass 取決於 Managed Lustre 效能層級,可以是下列其中一種:
lustre-rwx-125mbps-per-tib
lustre-rwx-250mbps-per-tib
lustre-rwx-500mbps-per-tib
lustre-rwx-1000mbps-per-tib
GKE 會為每個支援的 Managed Lustre 效能層級提供預設的 StorageClass。這樣一來,您就能使用內建的 StorageClass,不必自行定義,簡化代管 Lustre 執行個體的動態佈建作業。
如果是區域叢集,CSI 驅動程式會在與叢集相同的區域中,佈建 Managed Lustre 執行個體。如果是地區叢集,系統會在地區內的其中一個區域佈建執行個體。
以下範例說明如何建立具有特定拓撲需求的自訂 StorageClass:
將下列資訊清單儲存到名為
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
如需 StorageClass 支援的完整欄位清單,請參閱 Managed Lustre CSI 驅動程式參考說明文件。
執行下列指令來建立 StorageClass:
kubectl apply -f lustre-class.yaml
使用 PersistentVolumeClaim 存取 Volume
本節說明如何建立 PersistentVolumeClaim 資源,該資源會參照 Managed Lustre CSI 驅動程式的 StorageClass。
將下列資訊清單儲存到名為
lustre-pvc.yaml
的檔案:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: lustre-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 9000Gi storageClassName: lustre-class
如需 PersistentVolumeClaim 支援的完整欄位清單,請參閱受管理 Lustre CSI 驅動程式參考說明文件。
執行下列指令來建立 PersistentVolumeClaim:
kubectl apply -f lustre-pvc.yaml
建立工作負載來使用磁碟區
本節提供範例,說明如何建立 Pod,以使用您先前建立的 PersistentVolumeClaim 資源。
多個 Pod 可以共用同一個 PersistentVolumeClaim 資源。
將下列資訊清單儲存至名為
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
將資訊清單套用至叢集。
kubectl apply -f my-pod.yaml
確認 Pod 正在執行。Pod 會在佈建 PersistentVolumeClaim 後執行。這項作業可能需要幾分鐘才能完成。
kubectl get pods
輸出結果會與下列內容相似:
NAME READY STATUS RESTARTS AGE my-pod 1/1 Running 0 11s
搭配使用 fsGroup 與 Managed Lustre 磁碟區
您可以變更已掛接檔案系統的根層級目錄群組擁有權,以符合 Pod SecurityContext 中指定的使用者要求 fsGroup。fsGroup 不會遞迴變更整個已掛接 Managed Lustre 檔案系統的擁有權,只會影響掛接點的根目錄。
疑難排解
如需疑難排解指南,請參閱 Managed Lustre 說明文件的疑難排解頁面。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收費,請刪除您在本指南中建立的儲存空間資源。
刪除 Pod 和 PersistentVolumeClaim。
kubectl delete pod my-pod kubectl delete pvc lustre-pvc
檢查 PersistentVolume 狀態。
kubectl get pv
輸出結果會與下列內容相似:
No resources found
系統可能需要幾分鐘的時間,才能完全刪除基礎的 Managed Lustre 執行個體。