本指南說明如何在 GKE 中,使用動態佈建功能,建立由 Managed Lustre CSI 驅動程式支援的新 Kubernetes 磁碟區。Managed Lustre CSI 驅動程式可讓您隨選建立由 Managed Lustre 執行個體支援的儲存空間,並以磁碟區形式存取,用於有狀態工作負載。
支援多 NIC,可提供高效能網路
對於執行 1.35.2-gke.1842000 以上版本的 GKE 叢集,系統預設會啟用 Managed Lustre CSI 驅動程式,以使用所有可用的網路介面卡 (NIC),進而提高輸送量。這項支援功能會將 TCP 儲存空間流量分散到各個網路介面,藉此彙整頻寬。
如要使用多 NIC 支援功能,節點必須符合下列需求:
- TCP 的標準 NIC:節點必須使用標準 NIC (例如 Google 虛擬 NIC (gVNIC) 或 VirtIO-Net),才能處理 TCP 儲存空間流量。
- 相同虛擬私有雲:所有標準 NIC 都必須位於同一個虛擬私有雲網路。
- RDMA 注意事項:節點也可以附加 RDMA NIC,但 Managed Lustre CSI 驅動程式只會使用標準 NIC 處理 TCP 儲存空間流量。
如要停用多 NIC 支援,請參閱「停用 Lustre 的多 NIC」。
Lustre 通訊埠
視 GKE 叢集版本和現有的 Managed Lustre 設定而定,GKE Managed Lustre CSI 驅動程式會使用不同的通訊埠與 Managed Lustre 執行個體通訊。
預設通訊埠 (建議):對於執行
1.33.2-gke.4780000以上版本的新 GKE 叢集,驅動程式預設會使用通訊埠988進行 Lustre 通訊。舊版通訊埠 (已淘汰):在下列情況中,將
--enable-legacy-lustre-port旗標附加至gcloud指令,即可使用通訊埠6988:- 較早的 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 版本:如果 GKE 叢集執行的版本早於
您可以將新叢集和現有叢集設為使用預設通訊埠 988 或舊版通訊埠 6988。
事前準備
開始之前,請確認您已執行下列工作:
- 啟用 Google Cloud Managed Lustre API 和 Google Kubernetes Engine API。 啟用 API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。
- 如要瞭解限制和規定,請參閱「CSI 驅動程式總覽」。
- 請務必啟用 Managed 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:您的 Cloud de Confiance by S3NS 專案 ID。LUSTRE_NETWORK:GKE 叢集和 Managed Lustre 執行個體所在的共用虛擬私有雲 (VPC) 網路。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角色。- 前往 Cloud de Confiance 控制台 >「IAM & Admin」(IAM 與管理),然後搜尋專案擁有者主體。
- 按一下鉛筆圖示,然後點選「+ 新增其他角色」。
- 選取「Compute 網路管理員」或「Service Networking 管理員」。
- 按一下 [儲存]。
連結對接。
gcloud services vpc-peerings connect \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID} \ --ranges=${IP_RANGE_NAME} \ --service=servicenetworking.googleapis.com
設定 Managed Lustre CSI 驅動程式
本節說明如何啟用及停用 Managed Lustre CSI 驅動程式。
在新的 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 叢集時,啟用 Managed 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 叢集啟用 Managed Lustre CSI 驅動程式,您可能需要新增 --enable-legacy-lustre-port 旗標,才能使用舊版通訊埠 6988。在下列情況下,必須使用這個旗標:
- 如果 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 版本,則須手動升級節點集區。
在節點升級完全完成前,CSI 驅動程式 Pod 可能會在待更新的節點上發生當機迴圈。如果 CSI 驅動程式 Pod 記錄中顯示 Operation not permitted 錯誤,表示必須升級或重新建立節點。
節點集區升級後,CPU 節點在 Cloud de Confiance 控制台或 CLI 輸出內容中,可能會顯示為使用 GPU 映像檔。這是正常現象。GPU 映像檔會在 CPU 節點上重複使用,以便安全安裝 Managed Lustre 核心模組。使用 GPU 不會產生費用。
(選用) 建立多 NIC 節點集區
如要使用高效能網路,您必須建立節點集區,並使用支援多個網路介面的執行個體類型。搭載 1.35.2-gke.1842000 以上版本的 GKE 叢集預設會啟用多 NIC 支援功能。確認次要網路介面與主要介面位於同一個虛擬私有雲網路。
執行下列指令:
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
更改下列內容:
NODE_POOL_NAME:節點集區的名稱。CLUSTER_NAME:叢集名稱。LOCATION:叢集所在的區域或可用區。MACHINE_TYPE:節點集區的機型,例如a3-megagpu-8g,通常與多 NIC 搭配使用,以提高效能。任何機型都支援多 NIC。NETWORK_NAME:虛擬私有雲網路名稱。SECONDARY_SUBNET:次要子網路的名稱。
停用 Lustre 的多 NIC
雖然建議為高效能工作負載啟用多 NIC 支援,但您可能需要在特定情況下停用這項功能。舉例來說,您可能不想將 Lustre 流量分散到所有可用的硬體介面,或是需要將連線能力問題隔離到單一網路路徑,以便進行疑難排解。
注意:如果在執行中的節點上停用多 NIC 支援,可能需要重新建立或手動升級節點集區,這項變更才會生效。
叢集
如要為整個叢集停用高效能網路,請在建立或更新叢集時使用 --disable-multi-nic-lustre 旗標。例如:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--disable-multi-nic-lustre
更改下列內容:
CLUSTER_NAME:叢集名稱。LOCATION:叢集所在的區域或可用區。
節點集區
如要停用特定節點集區的高效能網路,請更新節點集區,將 lustre.csi.storage.gke.io/multi-nic 標籤設為 false:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=LOCATION \
--node-labels=lustre.csi.storage.gke.io/multi-nic=false
更改下列內容:
NODE_POOL_NAME:節點集區的名稱。CLUSTER_NAME:叢集名稱。LOCATION:叢集所在的可用區。
停用 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
啟用 Managed Lustre CSI 驅動程式後,GKE 會自動建立 StorageClass,用於佈建 Managed Lustre 執行個體。StorageClass 取決於 Managed Lustre 效能級別,且為下列其中一項:
lustre-rwx-125mbps-per-tiblustre-rwx-250mbps-per-tiblustre-rwx-500mbps-per-tiblustre-rwx-1000mbps-per-tib
GKE 為每個支援的 Managed Lustre 效能級別提供預設 StorageClass。這樣一來,您就能使用內建的 StorageClass,不必自行定義,簡化 Managed 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 支援的完整欄位清單,請參閱Managed 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 正在執行。佈建 PersistentVolumeClaim 後,Pod 就會執行。這項作業可能需要幾分鐘才能完成。
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 說明文件的「疑難排解頁面」。
清除所用資源
為避免系統向您的 Cloud de Confiance by S3NS 帳戶收取費用,請刪除您在本指南中建立的儲存空間資源。
刪除 Pod 和 PersistentVolumeClaim。
kubectl delete pod my-pod kubectl delete pvc lustre-pvc查看 PersistentVolume 狀態。
kubectl get pv輸出結果會與下列內容相似:
No resources found系統可能需要幾分鐘的時間,才能完全刪除基礎的 Managed Lustre 執行個體。