使用 Managed Lustre CSI 驅動程式,存取 GKE 上現有的 Managed Lustre 執行個體

本指南說明如何使用 Managed Lustre CSI 驅動程式,連線至現有的 Managed Lustre 執行個體。您就能以可控且可預測的方式,將現有的 Managed Lustre 執行個體做為有狀態工作負載的磁碟區。

支援多個 NIC,提供高效能網路

如果 GKE 叢集執行 1.35.2-gke.1842000 以上版本,系統預設會啟用 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 CSI 驅動程式會使用不同的通訊埠與 Managed Lustre 執行個體通訊,具體取決於 GKE 叢集版本和現有的 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 執行個體。

您可以將新叢集和現有叢集設定為使用預設連接埠 988 或舊版連接埠 6988

事前準備

開始之前,請確認您已完成下列工作:

  • 啟用 Google Cloud Managed Lustre API 和 Google Kubernetes Engine API。
  • 啟用 API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

設定環境變數

設定下列環境變數:

export CLUSTER_NAME=CLUSTER_NAME
export PROJECT_ID=PROJECT_ID
export NETWORK_NAME=LUSTRE_NETWORK
export LOCATION=ZONE

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • PROJECT_ID:您的 Google Cloud 專案 ID
  • LUSTRE_NETWORK:共用虛擬私有雲網路,GKE 叢集和 Managed Lustre 執行個體都位於這個網路中。
  • ZONE:GKE 叢集的地理區域,例如 us-central1-a

設定 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 驅動程式,您可能需要使用舊版通訊埠 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 版本,則需要手動升級節點集區。

在節點升級完全完成前,CSI 驅動程式 Pod 可能會在待更新的節點上發生當機迴圈。如果 CSI 驅動程式 Pod 記錄中顯示 Operation not permitted 錯誤,表示需要升級或重建節點。

節點集區升級後,CPU 節點可能會在 Google Cloud 控制台或 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 驅動程式存取現有的 Managed Lustre 執行個體

如果您已在與 GKE 叢集相同的網路中佈建 Managed Lustre 執行個體,可以按照這些操作說明,靜態佈建參照該執行個體的 PersistentVolume。

以下各節說明使用 Managed Lustre CSI 驅動程式存取現有 Managed Lustre 執行個體的一般程序:

  1. 建立參照 Managed Lustre 執行個體的 PersistentVolume
  2. 使用 PersistentVolumeClaim 存取磁碟區
  3. 建立會耗用磁碟區的工作負載

建立 PersistentVolume

  1. 如要找出 Managed Lustre 執行個體,請執行下列指令。

    gcloud lustre instances list \
        --project=${PROJECT_ID} \
        --location=${LOCATION}
    

    輸出內容應與下列內容類似。請務必先記下 Managed Lustre 執行個體名稱檔案系統mountPoint 欄位,再繼續下一個步驟。

    capacityGib: '9000'
    createTime: '2025-04-28T22:42:11.140825450Z'
    filesystem: testlfs
    gkeSupportEnabled: true
    mountPoint: 10.90.1.4@tcp:/testlfs
    name: projects/my-project/locations/us-central1-a/instances/my-lustre
    network: projects/my-project/global/networks/default
    perUnitStorageThroughput: '1000'
    state: ACTIVE
    updateTime: '2025-04-28T22:51:41.559098631Z'
    
  2. 將下列資訊清單儲存至名為 lustre-pv.yaml 的檔案:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: lustre-pv
    spec:
      storageClassName: "STORAGE_CLASS_NAME"
      capacity:
        storage: 9000Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      claimRef:
        namespace: default
        name: lustre-pvc
      csi:
        driver: lustre.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME"
        volumeAttributes:
          ip: IP_ADDRESS
          filesystem: FILESYSTEM
    

    更改下列內容:

    • storageClassName:StorageClass 的名稱。這個值可以是空字串,但必須符合 PersistentVolumeClaim 的規格。
    • volumeHandle:此卷冊的 ID。
      • PROJECT_ID: Google Cloud 專案 ID。
      • LOCATION:Lustre 執行個體的區域位置。您必須為 Managed Lustre CSI 驅動程式指定支援的區域。
      • INSTANCE_NAME:Lustre 執行個體的名稱。
    • ip:Lustre 執行個體的 IP 位址。您可從先前指令輸出的 mountPoint 欄位取得這項資訊。
    • filesystem:Managed Lustre 執行個體的檔案系統名稱。

    如需 PersistentVolume 物件支援的完整欄位清單,請參閱 Managed Lustre CSI 驅動程式參考文件

  3. 執行下列指令來建立 PersistentVolume:

    kubectl apply -f lustre-pv.yaml
    

使用 PersistentVolumeClaim 存取磁碟區

您可以建立參照 Managed Lustre CSI 驅動程式 StorageClass 的 PersistentVolumeClaim 資源。

下列資訊清單檔案範例說明如何在ReadWriteMany 存取模式 中建立 PersistentVolumeClaim,並參照您先前建立的 StorageClass。

  1. 將下列資訊清單儲存至名為 lustre-pvc.yaml 的檔案:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: lustre-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: "STORAGE_CLASS_NAME"
      volumeName: lustre-pv
      resources:
        requests:
          storage: STORAGE_SIZE
    

    STORAGE_SIZE 替換成儲存空間大小,例如 9000Gi。必須與 PersistentVolume 中的規格相符。

  2. 執行下列指令來建立 PersistentVolumeClaim:

    kubectl create -f lustre-pvc.yaml
    

建立會耗用磁碟區的工作負載

本節說明如何建立 Pod,以使用您先前建立的 PersistentVolumeClaim 資源。

多個 Pod 可以共用同一個 PersistentVolumeClaim 資源。

  1. 將下列資訊清單儲存至名為 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
    
  2. 執行下列指令,將資訊清單套用至叢集:

    kubectl apply -f my-pod.yaml
    

    Pod 會等到 GKE 佈建 PersistentVolumeClaim 後,才會開始執行。這項作業可能需要幾分鐘才能完成。

  3. 請確認 Pod 正在執行中:

    kubectl get pods
    

    Pod 可能需要幾分鐘才會達到 Running 狀態。

    輸出結果會與下列內容相似:

    NAME           READY   STATUS    RESTARTS   AGE
    my-pod         1/1     Running   0          11s
    

搭配 Managed Lustre 磁碟區使用 fsGroup

您可以變更已掛接檔案系統的根層級目錄群組擁有權,以符合 Pod SecurityContext 中指定的使用者要求 fsGroup。

疑難排解

如需疑難排解指南,請參閱 Managed Lustre 說明文件中的「疑難排解頁面」。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收費,請刪除您在本指南中建立的儲存空間資源。

  1. 刪除 Pod 和 PersistentVolumeClaim。

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. 檢查 PersistentVolume 狀態。刪除 Pod 和 PersistentVolumeClaim 後,PersistentVolume 應會回報「已發布」狀態:

    kubectl get pv
    

    輸出結果會與下列內容相似:

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                 STORAGECLASS   REASON   AGE
    lustre-pv   9000Gi      RWX            Retain        Released   default/preprov-pvc                           2m28s
    
  3. 重複使用 PersistentVolume。如要重複使用 PersistentVolume,請移除聲明參照 (claimRef):

    kubectl patch pv lustre-pv --type json -p '[{"op": "remove", "path": "/spec/claimRef"}]'
    

    PersistentVolume 現在應會回報「Available」狀態,表示已準備好繫結至新的 PersistentVolumeClaim。檢查 PersistentVolume 狀態:

    kubectl get pv
    

    輸出結果會與下列內容相似:

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    lustre-pv   9000Gi      RWX           Retain         Available                                   19m
    
  4. 如果不再需要 PersistentVolume,請將其刪除。如果不再需要 PersistentVolume,請刪除:

    kubectl delete pv lustre-pv
    

    刪除 PersistentVolume 不會移除基礎 Managed Lustre 執行個體。

後續步驟