從 Google Kubernetes Engine 連線至現有的 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 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

使用 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 掛接

    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 說明文件中的「疑難排解」頁面。

後續步驟