使用 GKE Parallelstore CSI 驅動程式存取現有的 Parallelstore 執行個體


Parallelstore 僅供受邀者使用。如要在 Google Cloud 專案中要求存取 Parallelstore,請與業務代表聯絡。

本指南說明如何透過 靜態佈建,使用 GKE Parallelstore CSI 驅動程式連線至現有的 Parallelstore 執行個體。您可透過這種方式,以可控且可預測的方式,將現有的全代管 Parallelstore 執行個體做為有狀態工作負載的磁碟區。

事前準備

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

  • 啟用 Parallelstore API 和 Google Kubernetes Engine API。
  • 啟用 API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

使用 Parallelstore CSI 驅動程式存取現有的 Parallelstore 執行個體

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

以下各節說明使用 Parallelstore CSI 驅動程式存取現有 Parallelstore 執行個體的典型程序:

  1. 建立參照 Parallelstore 執行個體的 PersistentVolume。
  2. 使用 PersistentVolumeClaim 存取磁碟區
  3. (選用) 設定 Sidecar 容器的資源
  4. 建立會耗用磁碟區的工作負載

建立 PersistentVolume

本節提供範例,說明如何建立參照現有 Parallelstore 執行個體的 PersistentVolume。

  1. 執行下列指令,找出 Parallelstore 執行個體。

    gcloud beta parallelstore instances list \
        --project=PROJECT_ID \
        --location=LOCATION
    

    更改下列內容:

    • PROJECT_ID:專案 ID。 Google Cloud
    • LOCATION:包含叢集的 Compute Engine 可用區。您必須為 Parallelstore CSI 驅動程式指定支援的區域

    輸出內容應如下所示。請務必記下 Parallelstore 執行個體名稱IP 存取點,再繼續執行下一個步驟。

    NAME                                                                                                     capacity  DESCRIPTION  CREATE_TIME                     UPDATE_TIME                     STATE   network  RESERVED_IP_RANGE  ACCESS_POINTS
    projects/my-project/locations/us-central1-a/instances/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563  12000                  2024-03-06T19:18:26.036463730Z  2024-03-06T19:24:44.561441556Z  ACTIVE                              10.51.110.2,10.51.110.4,10.51.110.3
    
  2. 將下列資訊清單儲存到名為 parallelstore-pv.yaml 的檔案:

    Pod mount

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: parallelstore-pv
    spec:
      storageClassName: "STORAGECLASS_NAME"
      capacity:
        storage: STORAGE_SIZE
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: parallelstore.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME/default-pool/default-container"
        volumeAttributes:
          accessPoints: ACCESS_POINTS
          network: NETWORK_NAME
      claimRef:
        name: parallelstore-pvc
        namespace: default
    

    更改下列內容:

    • PROJECT_ID:專案 ID。 Google Cloud
    • LOCATION:Parallelstore 執行個體的區域位置。您必須為 Parallelstore CSI 驅動程式指定支援的區域
    • INSTANCE_NAME:Parallelstore 執行個體的名稱。有效 volumeHandle 值的範例如下:"my-project/us-central1-a/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563/default-pool/default-container".
    • ACCESS_POINTS:Parallelstore 執行個體的存取點,例如 10.51.110.2,10.51.110.4,10.51.110.3
    • NETWORK_NAME:可存取 Parallelstore 執行個體的虛擬私有雲網路。
    • STORAGECLASS_NAME:StorageClass 的名稱。這個值可以是空字串,但必須符合 PersistentVolumeClaim 中的規格。
    • STORAGE_SIZE:儲存空間大小,例如 12000Gi

    如需 PersistentVolume 物件支援的完整欄位清單,請參閱 Parallelstore CSI 參考說明文件

    節點支架

    您可以使用 Parallelstore CSI 驅動程式,直接在節點上掛接磁碟區。節點掛接功能支援 GKE 叢集 1.32.3 以上版本。

    節點層級的掛接可讓節點上的所有 Pod 共用同一個掛接點。共用掛接點可提升可擴充性,因為掛接次數會隨著節點數增加,而不是 Pod 數 (如側車模式)。

    因此,您可以在共用同一個 Parallelstore 執行個體時,執行更多 Pod。

    注意:指定 mountLocality: node 磁碟區屬性即可啟用這項功能。Pod 掛接位置的預設值為 mountLocality: poddfuse CPU、記憶體要求和限制標記僅適用於 mountLocality: node 設定。

    如果設定了要求或限制的值,但未設定另一個值,系統會將兩者都設為相同的值。

    您可以使用 `'0'` 做為值,取消設定任何資源限制。舉例來說,dfuseMemoryLimit: '0' 會移除 dfuse 程序的記憶體限制。
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: parallelstore-pv
    spec:
      storageClassName: "STORAGECLASS_NAME"
      capacity:
        storage: STORAGE_SIZE
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: parallelstore.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME/default-pool/default-container"
        volumeAttributes:
          accessPoints: ACCESS_POINTS
          network: NETWORK_NAME
          mountLocality: node
          dfuseCPURequest: DFUSE_CPU_REQUEST
          dfuseMemoryRequest: DFUSE_MEMORY_REQUEST
          dfuseCPULimit: DFUSE_CPU_LIMIT
          dfuseMemoryLimit: DFUSE_MEMORY_LIMIT
      claimRef:
        name: parallelstore-pvc
        namespace: default
    

    更改下列內容:

    • PROJECT_ID:專案 ID。 Google Cloud
    • LOCATION:Parallelstore 執行個體的區域位置。您必須為 Parallelstore CSI 驅動程式指定支援的區域
    • INSTANCE_NAME:Parallelstore 執行個體的名稱。有效 volumeHandle 值的範例如下:"my-project/us-central1-a/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563/default-pool/default-container".
    • ACCESS_POINTS:Parallelstore 執行個體的存取點,例如 10.51.110.2,10.51.110.4,10.51.110.3
    • NETWORK_NAME:可存取 Parallelstore 執行個體的虛擬私有雲網路。
    • STORAGECLASS_NAME:StorageClass 的名稱。這個值可以是空字串,但必須符合 PersistentVolumeClaim 中的規格。
    • STORAGE_SIZE:儲存空間大小,例如 12000Gi
    • DFUSE_CPU_REQUEST:dfuse 程序的 CPU 要求。預設值為 250m
    • DFUSE_MEMORY_REQUEST:dfuse 程序的記憶體要求。預設值為 512Mi
    • DFUSE_CPU_LIMIT:dfuse 程序的 CPU 限制。預設值為「未設定」。
    • DFUSE_MEMORY_LIMIT:dfuse 程序的記憶體限制。預設值為 10Gi

    如需 PersistentVolume 物件支援的完整欄位清單,請參閱 Parallelstore CSI 參考說明文件

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

    kubectl apply -f parallelstore-pv.yaml
    

(選用) 使用不同的掛接選項掛接相同的 Parallelstore 執行個體

注意:這項功能不支援節點掛接

您可以使用不同的掛接選項掛接相同的 Parallelstore 執行個體。 舉例來說,您可以在同一個 Pod 中,掛接啟用快取和停用快取的相同 Parallelstore 執行個體。

如要使用不同的掛接選項掛接相同的 Parallelstore 執行個體,您必須為每個掛接選項建立 PersistentVolume。在 PersistentVolume 物件中,volumeHandle 欄位的語法如下:「PROJECT_ID/LOCATION/INSTANCE_NAME/default-pool/default-container:RANDOM_SUFFIX」,其中 RANDOM_SUFFIX 是您選擇的隨機字串。

例如:"my-project/us-central1-a/pvc-eff1ed02-a8ed-48d2-9902-bd70a2d60563/default-pool/default-container:xyz123"

使用 PersistentVolumeClaim 存取磁碟區

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

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

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

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: parallelstore-pvc
        namespace: default
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: STORAGECLASS_NAME
        resources:
          requests:
            storage: STORAGE_SIZE
    

    更改下列內容:

    • STORAGECLASS_NAME:StorageClass 的名稱。必須與 PersistentVolume 中的規格相符。
    • STORAGE_SIZE:儲存空間大小,例如 12000Gi。必須與 PersistentVolume 中的規格相符。
  2. 執行下列指令來建立 PersistentVolumeClaim:

      kubectl create -f parallelstore-pvc.yaml
    

(選用) 設定補充容器的資源

注意:只有在使用 Pod 掛接位置時,才能為 Sidecar 容器設定資源,也就是 PersistentVolume 中的 mountLocality 磁碟區屬性未設定或設為 pod

建立使用 Parallelstore 支援磁碟區的工作負載 Pod 時,CSI 驅動程式會判斷磁碟區是否以 Parallelstore 執行個體為基礎。

如果驅動程式偵測到磁碟區是以 Parallelstore 為基礎,或是您指定 gke-parallelstore/volumes: "true" 註解,CSI 驅動程式就會自動將名為 gke-parallelstore-sidecar 的 Sidecar 容器插入 Pod。這個 Sidecar 容器會將 Parallelstore 執行個體掛接至工作負載。

根據預設,系統會為 Sidecar 容器設定下列資源要求,且未設定資源限制:

  • 250 mCPU
  • 512 MiB 記憶體
  • 10 MiB 臨時儲存空間

如要覆寫這些值,您可以選擇指定註解 gke-parallelstore/[cpu-request|memory-request|cpu-limit|memory-limit|ephemeral-storage-request],如以下範例所示:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    gke-parallelstore/volumes: "true"
    gke-parallelstore/cpu-request: 500m
    gke-parallelstore/memory-request: 1Gi
    gke-parallelstore/ephemeral-storage-request: 500Mi
    gke-parallelstore/cpu-limit: 1000m
    gke-parallelstore/memory-limit: 2Gi
    gke-parallelstore/ephemeral-storage-limit: 1Gi

決定要分配多少資源時,請考量下列事項:

  • 如果設定了其中一個要求或限制值,但未設定另一個值,GKE 會將兩者都設為相同的值。
  • 如果工作負載需要更高的輸送量,請為 Sidecar 容器分配更多 CPU。CPU 不足會導致 I/O 節流。
  • 您可以使用 "0" 做為值,取消設定標準叢集的所有資源限制;例如,gke-parallelstore/memory-limit: "0" 會移除 Sidecar 容器的記憶體限制。如果您無法決定工作負載所需的資源量,並希望讓 Sidecar 消耗節點上的所有可用資源,這項功能就非常實用。gke-parallelstore-sidecar

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

本節提供範例,說明如何建立會耗用您先前建立的 PersistentVolumeClaim 資源的 Pod。

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

  1. 將下列資訊清單儲存至名為 my-pod.yaml 的檔案。

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: nginx
          image: nginx
          volumeMounts:
            - name: parallelstore-volume
              mountPath: /data
        volumes:
        - name: parallelstore-volume
          persistentVolumeClaim:
            claimName: parallelstore-pvc
    
  2. 執行下列指令,將資訊清單套用至叢集:

      kubectl apply -f my-pod.yaml
    

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

管理 Parallelstore CSI 驅動程式

本節說明如何視需要啟用及停用 Parallelstore CSI 驅動程式。

在新叢集上啟用 Parallelstore CSI 驅動程式

如要在建立新的 Standard 叢集時啟用 Parallelstore CSI 驅動程式,請使用 Google Cloud CLI 執行下列指令:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --network=NETWORK_NAME \
    --addons=ParallelstoreCsiDriver \
    --cluster-version=VERSION

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • LOCATION:包含叢集的 Compute Engine 可用區。您必須為 Parallelstore CSI 驅動程式指定支援的區域
  • NETWORK_NAME:您在「設定虛擬私有雲網路」中建立的虛擬私有雲網路名稱。
  • VERSION:GKE 版本號碼。 如要使用這項功能,請務必指定支援的版本號碼,例如 GKE 1.29 以上版本。或者,您也可以使用 --release-channel 旗標並指定發布管道

在現有叢集上啟用 Parallelstore CSI 驅動程式

如要在現有的 GKE Standard 叢集上啟用驅動程式,請使用 Google Cloud CLI 執行下列指令:

gcloud container clusters update CLUSTER_NAME \
  --location=LOCATION \
  --update-addons=ParallelstoreCsiDriver=ENABLED

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • LOCATION:包含叢集的 Compute Engine 可用區。您必須為 Parallelstore CSI 驅動程式指定支援的區域

確認 GKE 叢集是在「設定虛擬私有雲網路」中設定的相同虛擬私有雲網路中執行。如要驗證 GKE 叢集的虛擬私有雲網路,請在Google Cloud 控制台中或透過 gcloud container clusters describe $(CLUSTER) --format="value(networkConfig.network)" --location=$(LOCATION) 指令檢查。

停用 Parallelstore CSI 驅動程式

您可以使用 Google Cloud CLI,在現有的 Autopilot 或標準叢集上停用 Parallelstore CSI 驅動程式。

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --update-addons=ParallelstoreCsiDriver=DISABLED

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • LOCATION:包含叢集的 Compute Engine 可用區。您必須為 Parallelstore CSI 驅動程式指定支援的區域

搭配 Parallelstore 磁碟區使用 fsGroup

Parallelstore CSI 驅動程式支援變更所掛接檔案系統根層級目錄的群組擁有權,以符合 Pod SecurityContext 中指定的使用者要求 fsGroup。這項功能僅適用於 GKE 叢集 1.29.5 以上版本,或 1.30.1 以上版本。

疑難排解

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

後續步驟