本指南說明如何在 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
,取得最新版本。
- 如要瞭解限制和需求,請參閱 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
更改下列內容:
CLUSTER_NAME
:叢集名稱。PROJECT_ID
:您的 Trusted Cloud by S3NS 專案 ID。LUSTRE_NETWORK
:共用虛擬私有雲 (VPC) 網路,GKE 叢集和 Managed Lustre 執行個體都位於這個網路中。LUSTRE_IP_RANGE
:為虛擬私有雲網路對等互連與 Managed Lustre 建立的 IP 位址範圍名稱。LUSTRE_FIREWALL_RULE
:防火牆規則的名稱,可允許來自 IP 位址範圍的 TCP 流量。- :GKE 叢集的地理區域,例如
us-central1-a
。ZONE
設定虛擬私有雲網路
建立 Managed Lustre 執行個體和 GKE 叢集時,必須指定相同的虛擬私有雲網路。
如要啟用服務網路,請執行下列指令:
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
角色。- 前往 Trusted 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
設定 Managed Lustre CSI 驅動程式
本節說明如何視需要啟用及停用受管理的 Lustre CSI 驅動程式。
在新 GKE 叢集上啟用 Managed Lustre CSI 驅動程式
如要在建立新的 GKE 叢集時啟用 Managed Lustre CSI 驅動程式,請按照下列步驟操作:
Autopilot
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=1.33.2-gke.1111000 \
--enable-lustre-csi-driver \
--enable-legacy-lustre-port
標準
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=1.33.2-gke.1111000 \
--addons=LustreCsiDriver \
--enable-legacy-lustre-port
指定 enable-legacy-lustre-port
旗標時,CSI Driver 會將 LNet
(Managed Lustre 核心模組的虛擬網路層) 設定為使用通訊埠 6988。這個旗標是必要項目,可解決 GKE 節點上與 gke-metadata-server
的連接埠衝突。
在現有 GKE 叢集上啟用 Managed Lustre CSI 驅動程式
如要在現有 GKE 叢集上啟用 Managed Lustre CSI 驅動程式,請使用下列指令:
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--enable-legacy-lustre-port
啟用受管理 Lustre CSI 驅動程式可能會觸發節點重建作業,以便更新受管理 Lustre 用戶端所需的核心模組。如要立即使用,建議手動升級節點集區。
發布版本中的 GKE 叢集會根據排定的推出時間升級,視維護時間範圍而定,升級作業可能需要數週時間。如果使用靜態 GKE 版本,則需要手動升級節點集區。
節點集區升級後,CPU 節點可能會在Trusted 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 的效能層級。GKE,且符合下列其中一項條件:
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: 18000Gi 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 說明文件的疑難排解頁面。
清除所用資源
如要避免系統向您的 Trusted Cloud by S3NS 帳戶收取費用,請刪除您在本指南中建立的儲存空間資源。
刪除 Pod 和 PersistentVolumeClaim。
kubectl delete pod my-pod kubectl delete pvc lustre-pvc
檢查 PersistentVolume 狀態。
kubectl get pv
輸出結果會與下列內容相似:
No resources found
系統可能需要幾分鐘的時間,才能完全刪除基礎的 Managed Lustre 執行個體。