透過 Managed Lustre CSI 驅動程式,在 GKE 上存取 Managed Lustre 執行個體


本指南說明如何在 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,取得最新版本。

設定環境變數

設定下列環境變數:

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-aZONE

設定虛擬私有雲網路

建立 Managed Lustre 執行個體和 GKE 叢集時,必須指定相同的虛擬私有雲網路。

  1. 如要啟用服務網路,請執行下列指令:

    gcloud services enable servicenetworking.googleapis.com \
        --project=${PROJECT_ID}
    
  2. 建立虛擬私有雲網路。將 --mtu 旗標設為 8896,可提升 10% 的效能。

    gcloud compute networks create ${NETWORK_NAME} \
        --subnet-mode=auto --project=${PROJECT_ID} \
        --mtu=8896
    
  3. 建立 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}
    
  4. 取得與您在上一個步驟中建立的範圍相關聯的 CIDR 範圍。

    CIDR_RANGE=$(
      gcloud compute addresses describe ${IP_RANGE_NAME} \
          --global  \
          --format="value[separator=/](address, prefixLength)" \
          --project=${PROJECT_ID}
    )
    
  5. 建立防火牆規則,允許來自您建立的 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}
    
  6. 如要為專案設定網路對等互連,請確認您具備必要的 IAM 權限,也就是 compute.networkAdminservicenetworking.networksAdmin 角色。

    1. 前往 Trusted Cloud 控制台 >「IAM 與管理」,然後搜尋專案擁有者主體。
    2. 按一下鉛筆圖示,然後點選「+ 新增其他角色」
    3. 選取「Compute Network Admin」或「Service Networking Admin」
    4. 按一下 [儲存]
  7. 連線對等互連。

    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 磁碟區時,通常會執行的程序:

  1. 建立 StorageClass
  2. 使用 PersistentVolumeClaim 存取磁碟區
  3. 建立會耗用磁碟區的工作負載

建立 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:

  1. 將下列資訊清單儲存到名為 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 驅動程式參考說明文件

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

    kubectl apply -f lustre-class.yaml
    

使用 PersistentVolumeClaim 存取 Volume

本節說明如何建立 PersistentVolumeClaim 資源,該資源會參照 Managed Lustre CSI 驅動程式的 StorageClass。

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: lustre-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 18000Gi
      storageClassName: lustre-class
    

    如需 PersistentVolumeClaim 支援的完整欄位清單,請參閱受管理 Lustre CSI 驅動程式參考說明文件

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

    kubectl apply -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
    
  3. 確認 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 帳戶收取費用,請刪除您在本指南中建立的儲存空間資源。

  1. 刪除 Pod 和 PersistentVolumeClaim。

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. 檢查 PersistentVolume 狀態。

    kubectl get pv
    

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

    No resources found
    

    系統可能需要幾分鐘的時間,才能完全刪除基礎的 Managed Lustre 執行個體。

後續步驟