透過 Filestore CSI 驅動程式存取 Filestore 執行個體

Filestore CSI 驅動程式是搭配 Google Kubernetes Engine (GKE) 使用 Filestore 執行個體的主要方式。Filestore CSI 驅動程式提供全代管體驗,由開放原始碼 Google Cloud Filestore CSI 驅動程式提供技術支援。

Filestore CSI 驅動程式版本與 Kubernetes 子版本號碼相關聯。Filestore CSI 驅動程式版本通常是 Kubernetes 子版本發布時可用的最新驅動程式。叢集升級至最新 GKE 修補程式時,驅動程式會自動更新。

優點

Filestore CSI 驅動程式具備下列優點:

  • 您可以透過 Kubernetes API (kubectl) 存取全代管 NFS 儲存空間。

  • 您可以使用 GKE Filestore CSI 驅動程式,動態佈建 PersistentVolume。

  • 您可以搭配使用磁碟區快照和 GKE Filestore CSI 驅動程式。CSI 磁碟區快照可用於建立 Filestore 備份。

    Filestore 備份會建立檔案共用區的差異副本,包括所有檔案資料和中繼資料,並與執行個體分開儲存。這個副本只能還原至新的 Filestore 執行個體。不支援還原至現有的 Filestore 執行個體。您可以在磁碟區快照類別中新增 type:backup 欄位,使用 CSI 磁碟區快照 API 觸發 Filestore 備份。

  • 您可以搭配使用磁碟區擴充和 GKE Filestore CSI 驅動程式。磁碟區擴充功能可讓您調整磁碟區容量。

  • 如要存取現有的 Filestore 執行個體,請在 Kubernetes 工作負載中使用預先佈建的 Filestore 執行個體。您也可以動態建立或刪除 Filestore 執行個體,並透過 StorageClass 或部署作業在 Kubernetes 工作負載中使用這些執行個體。

  • 支援 GKE 適用的 Filestore 多共用區。這項功能可讓您建立 Filestore 執行個體,並在任意數量的 GKE 叢集中,同時為該執行個體分配多個較小的 NFS 掛接 PersistentVolume。

  • 支援獨立效能調度。您可以在執行階段動態擴充 Filestore 效能 (IOPS),不受儲存空間容量影響,且不會中斷服務。

需求條件

  • 如要使用 Filestore CSI 驅動程式,叢集必須符合下列規定:

    • 所需的 GKE 版本取決於 Filestore 服務級別和您要使用的功能。請參閱「支援的服務級別、通訊協定和 GKE 版本」表格,瞭解支援的組合。
    • Filestore CSI 驅動程式僅支援使用 Linux 節點的叢集。不支援 Windows Server 節點。
    • 執行個體大小下限為 1 TiB。

    詳情請參閱「服務級別」。

支援的服務級別、通訊協定和 GKE 版本

下表列出 Filestore 服務級別、通訊協定和最低必要 GKE 版本的支援組合,以便與 Filestore CSI 驅動程式搭配使用。

服務級別 共用類型 NFSv3 的 GKE 最低版本 NFSv4.1 的 GKE 最低版本
Enterprise 單一分享、多重分享 1.25 1.33 (僅限單一分享)
可用區 (1 TiB 至 9.75 TiB) 單一分享 1.31 1.33
可用區 (10 TiB 至 100 TiB) 單一分享 1.27 1.33
區域性 (1 TiB - 9.75 TiB) 單一分享 1.33.4-gke.1172000 1.33.4-gke.1172000
區域性 (10 TiB - 100 TiB) 單一分享 1.33.4-gke.1172000 1.33.4-gke.1172000
基本傳統硬碟 (100 GiB 至 63.9 TiB) 單一分享 1.33 不支援
基本傳統硬碟 單一分享 1.21 不支援
基本固態硬碟 單一分享 1.21 不支援

Filestore 預設會在 Filestore 執行個體上使用 NFSv3 檔案系統通訊協定,並支援任何與 NFSv3 相容的用戶端。

事前準備

開始之前,請確認您已執行下列工作:

  • 啟用 Cloud Filestore API 和 Google Kubernetes Engine API。
  • 啟用 API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。
  • 確認您已有 Autopilot 或 Standard 叢集。如需建立,請建立 Autopilot 叢集。Autopilot 叢集預設會啟用 Filestore CSI 驅動程式。

  • 如要在 Shared VPC 虛擬私有雲網路使用 Filestore,請參閱「搭配使用 Filestore 與 Shared VPC」中的其他設定操作說明。

在 Standard 叢集啟用 Filestore CSI 驅動程式

在 Google Kubernetes Engine 1.36.3 以上版本中,GKE 預設會為所有新的 Standard 和 Autopilot 叢集啟用 Filestore CSI 驅動程式。

如要在現有的 Standard 叢集啟用驅動程式,請完成下列步驟:

gcloud

gcloud container clusters update CLUSTER_NAME \
   --update-addons=GcpFilestoreCsiDriver=ENABLED

將 CLUSTER_NAME 替換為現有叢集的名稱。

控制台

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 在「Features」(功能) 下方,按一下「Filestore CSI driver」(Filestore CSI 驅動程式) 欄位旁的 「Edit Filestore CSI driver」(編輯 Filestore CSI 驅動程式)。

  4. 勾選「Enable Filestore CSI driver」(啟用 Filestore CSI 驅動程式) 核取方塊。

  5. 按一下 [儲存變更]。

如要在 Shared VPC 虛擬私有雲網路使用 Filestore,請參閱「在具有 Shared VPC 虛擬私有雲網路的新叢集上啟用 Filestore CSI 驅動程式」。

啟用 Filestore CSI 驅動程式後,您可以使用驅動程式和佈建工具名稱 filestore.csi.storage.gke.io,在 Kubernetes 磁碟區中使用該驅動程式。

停用 Filestore CSI 驅動程式

您可以使用 Google Cloud CLI 或 Google Cloud 控制台,在現有的 Autopilot 或 Standard 叢集上停用 Filestore CSI 驅動程式。

gcloud

gcloud container clusters update CLUSTER_NAME \
    --update-addons=GcpFilestoreCsiDriver=DISABLED \
    --region REGION

替換下列值:

  • CLUSTER_NAME:現有叢集的名稱。
  • REGION:叢集所在的區域 (例如 us-central1)。

控制台

  1. 在 Google Cloud 控制台中,前往「Google Kubernetes Engine」選單。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 在「Features」(功能) 下方,按一下「Filestore CSI driver」(Filestore CSI 驅動程式) 欄位旁的 「Edit Filestore CSI driver」(編輯 Filestore CSI 驅動程式)。

  4. 取消勾選「Enable Filestore CSI driver」(啟用 Filestore CSI 驅動程式) 核取方塊。

  5. 按一下 [儲存變更]。

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

本節說明在 GKE 中,使用 Kubernetes 磁碟區透過 Filestore CSI 驅動程式存取現有 Filestore 執行個體的一般程序:

建立 PersistentVolume 和 PersistentVolumeClaim 來存取執行個體

  1. 建立資訊清單檔案,並命名為 preprov-filestore.yaml,如下列範例所示:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: PV_NAME
    spec:
      storageClassName: ""
      capacity:
        storage: 1Ti
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      csi:
        driver: filestore.csi.storage.gke.io
        volumeHandle: "modeInstance/FILESTORE_INSTANCE_LOCATION/FILESTORE_INSTANCE_NAME/FILESTORE_SHARE_NAME"
        volumeAttributes:
          ip: FILESTORE_INSTANCE_IP
          volume: FILESTORE_SHARE_NAME
          protocol: FILESYSTEM_PROTOCOL
      claimRef:
        name: PVC_NAME
        namespace: NAMESPACE
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: PVC_NAME
      namespace: NAMESPACE
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: "" # Set to an empty value to prevent assigning a default StorageClass
      resources:
        requests:
          storage: 1Ti
    

    如要將 PersistentVolumeClaim 繫結至現有的靜態 PersistentVolume,您必須在 PersistentVolumeClaim 規格中,將 storageClassName 欄位設為空字串 ("") 值。這項設定可防止存取模式感知預設系統將預設 StorageClass 指派給宣告。詳情請參閱「預設 StorageClass 指派」。

  2. 如要根據 preprov-filestore.yaml 資訊清單檔案建立 PersistentVolumeClaim 和 PersistentVolume 資源,請執行下列指令:

    kubectl apply -f preprov-filestore.yaml
    

如要指定 NFSv4.1 檔案系統通訊協定,請在 PersistentVolume 物件的 volumeAttributes 欄位中,將 protocol 欄位設為 NFS_V4_1。如要使用 NFSv3 檔案系統通訊協定,請將 protocol 欄位設為 NFS_V3,或省略 protocol 欄位。

接著,請建立使用該磁碟區的 Deployment。

使用 Filestore CSI 驅動程式建立磁碟區

下列各節說明在 GKE 中,使用由 Filestore CSI 驅動程式支援的 Kubernetes 磁碟區的一般程序:

建立 StorageClass

啟用 Filestore CSI 驅動程式後,GKE 會自動安裝下列 StorageClasses,用於佈建 Filestore 執行個體:

每個 StorageClass 僅適用於在各自支援的 GKE 版本號碼中執行的 GKE 叢集。如需各服務級別支援的版本清單,請參閱「需求條件」。

您可以執行下列指令,找出已安裝的 StorageClass 名稱:

kubectl get sc

您也可以在 provisioner 欄位中新增 filestore.csi.storage.gke.io,安裝使用 Filestore CSI 驅動程式的其他 StorageClass。

Filestore 必須知道要在哪個網路建立新的執行個體。自動安裝的 StorageClass 會使用為 GKE 叢集建立的預設網路。如果您已刪除這個網路,或想使用其他網路,請按照下列步驟建立新的 StorageClass。否則自動安裝的 StorageClasses 將無法運作。

  1. 將下列資訊清單儲存為 filestore-example-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: filestore-example
    provisioner: filestore.csi.storage.gke.io
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    parameters:
      tier: standard
      network: default
    

    請參考資訊清單中的下列參數設定:

    • 將 volumeBindingMode 設為 Immediate,即可立即開始佈建磁碟區。這是因為 Filestore 執行個體可從任何可用區存取。因此,與 Compute Engine 永久磁碟不同,GKE 不需要知道 Pod 的排程可用區。如果設為 WaitForFirstConsumer,GKE 只會在 Pod 排定後開始佈建。詳情請參閱 VolumeBindingMode。
    • 您可以在 tier 參數中指定任何支援的 Filestore 級別 (例如 BASIC_HDD、BASIC_SSD、ZONAL 或 ENTERPRISE)。
    • 在非預設虛擬私有雲上佈建 Filestore 執行個體時,可以使用 network 參數。非預設虛擬私有雲需要設定特殊的防火牆規則。
    • protocol 參數可用於設定 Filestore 執行個體的檔案系統通訊協定。可使用的值包括 NFS_V3 (預設) 和 NFS_V4_1。預設通訊協定為 NFS_V3。
  2. 如要根據 filestore-example-class.yaml 資訊清單檔案建立 StorageClass 資源,請執行下列指令:

    kubectl create -f filestore-example-class.yaml
    

如要在 Shared VPC 虛擬私有雲網路使用 Filestore,請參閱「搭配 Shared VPC 使用 Filestore CSI 驅動程式時建立 StorageClass」。

使用 PersistentVolumeClaim 存取磁碟區

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

您可以使用預先安裝或自訂的 StorageClass。

預設 StorageClass 指派

在 GKE 1.37.1 以上版本中,Filestore 會使用感知存取模式的預設系統。如果您建立的 PersistentVolumeClaim 要求 ReadWriteMany 存取模式,並省略 storageClassName 欄位,GKE 會自動將要求預設為 regional-rwx StorageClass。

下列 PersistentVolumeClaim 資訊清單範例示範了這項自動預設行為:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc-default
spec:
  accessModes:
  - ReadWriteMany
  # storageClassName is omitted, so GKE assigns `regional-rwx`.
  resources:
    requests:
      storage: 1Ti

參照特定 StorageClass

下列資訊清單檔案範例會建立 PersistentVolumeClaim,參照名為 filestore-example 的 StorageClass。

  1. 將下列資訊清單檔案儲存為 pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: filestore-example
      resources:
        requests:
          storage: 1Ti
    
  2. 如要根據 pvc-example.yaml 資訊清單檔案建立 PersistentVolumeClaim 資源,請執行下列指令:

    kubectl create -f pvc-example.yaml
    

建立使用磁碟區的 Deployment

下列 Deployment 資訊清單範例會使用名為 pvc-example.yaml 的 PersistentVolume 資源。

多個 Pod 可共用同一個 PersistentVolumeClaim。

  1. 將下列資訊清單儲存為 filestore-example-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: podpvc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: filestore-example
      resources:
        requests:
          storage: 1Ti
    
  2. 如要根據 filestore-example-deployment.yaml 資訊清單檔案建立 Deployment,請執行下列指令:

    kubectl apply -f filestore-example-deployment.yaml
    
  3. 確認 Deployment 已成功建立:

    kubectl get deployment
    

    Filestore 執行個體可能需要一段時間才能完成佈建。在此之前,部署作業不會回報 READY 狀態。如要查看進度,請執行下列指令,監控 PersistentVolumeClaim 狀態:

    kubectl get pvc
    

    磁碟區佈建完成後,PersistentVolumeClaim 應會達到 BOUND 狀態。

使用 VolumeAttributesClass 動態調整 Filestore 效能

Filestore CSI 驅動程式支援可用區和區域性服務級別的自訂效能。自訂效能設定可讓您根據工作負載需求調整應用程式效能,視需要擴充或縮減。確認 GKE 叢集版本為 1.35 以上。

如要順暢調整效能,您可以使用 VolumeAttributesClass API 定義多個效能級別。有了預先定義的級別,您就能在執行階段切換級別,動態更新現有磁碟區的效能設定,不必重新佈建磁碟區或停機。

預設效能級別

下表列出預先定義的效能級別。如要定義自訂效能級別,請參閱「定義效能級別」。

效能級別名稱 參數 IOPS 上限
filestore-high-performance-fixed max-iops "17000"
filestore-min-performance-scaling max-iops-per-tb "4000"
filestore-moderate-performance-scaling max-iops-per-tb "10000"

定義效能級別

您可以建立 VolumeAttributesClass 資源,定義多個效能級別。在以下範例中,您將使用固定的 IOPS 速率 (max-iops) 建立中等和高效能級別。您也可以使用每 TiB IOPS 比率 (max-iops-per-tb),該比率會隨著磁碟區大小線性調整。

指定 max-iops 或 max-iops-per-tb 值,產生至少 2,000 個佈建 IOPS。如果計算出的 IOPS 低於 2,000,系統會自動將值無條件進位至這個最小值。

  1. 將下列資訊清單儲存為 performance-tiers.yaml:

    apiVersion: storage.k8s.io/v1
    kind: VolumeAttributesClass
    metadata:
      name: filestore-moderate
    driverName: filestore.csi.storage.gke.io
    parameters:
      max-iops: "4000"
    ---
    apiVersion: storage.k8s.io/v1
    kind: VolumeAttributesClass
    metadata:
      name: filestore-high
    driverName: filestore.csi.storage.gke.io
    parameters:
      max-iops: "10000"
    ---
    apiVersion: storage.k8s.io/v1
    kind: VolumeAttributesClass
    metadata:
      name: filestore-density-based
    driverName: filestore.csi.storage.gke.io
    parameters:
      max-iops-per-tb: "5000"
    
  2. 建立 VolumeAttributesClass 資源:

    kubectl apply -f performance-tiers.yaml
    

建立 PersistentVolumeClaim 並設定初始效能級別

如要建立具有效能設定的 PersistentVolumeClaim,請在 PersistentVolumeClaim 資源中參照 VolumeAttributesClass。

  1. 將下列資訊清單儲存為 pvc-custom-performance.yaml,並參照 filestore-moderate 級別:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: filestore-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: regional-rwx
      volumeAttributesClassName: filestore-moderate
      resources:
        requests:
          storage: 1Ti
    
  2. 建立 PersistentVolumeClaim:

    kubectl apply -f pvc-custom-performance.yaml
    

更新 PersistentVolumeClaim,改用其他效能級別

  1. 如果工作負載需要更高的效能,請將 pvc-custom-performance.yaml 檔案中的 volumeAttributesClassName 更新為 filestore-high:

     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: filestore-pvc
     spec:
       accessModes:
         - ReadWriteMany
       storageClassName: regional-rwx
       volumeAttributesClassName: filestore-high
       resources:
         requests:
           storage: 1Ti
     ```
    
  2. 請套用變更:

    kubectl apply -f pvc-custom-performance.yaml
    

    Filestore CSI 驅動程式會動態處理更新。

  3. 確認成效狀態:

    kubectl describe pvc filestore-pvc
    

    查看指令輸出內容的「Events」部分,確認屬性是否已成功修改。

為 Filestore 執行個體加上標籤

您可以使用標籤將相關執行個體分組,並儲存執行個體的中繼資料。標籤是鍵/值組合,可協助您整理 Filestore 執行個體。您可以為每項資源加上標籤,並根據標籤篩選資源。

您可以使用 StorageClass.parameters 中的 labels 鍵提供標籤。Filestore 執行個體可加上標籤,說明建立執行個體時所用的 PersistentVolumeClaim/PersistentVolume 資訊。自訂標籤鍵和值必須符合標籤命名慣例。請參閱 Kubernetes 儲存空間類別範例,瞭解如何將自訂標籤套用至 Filestore 執行個體。

搭配使用 NFSv4.1 檔案系統通訊協定與 Filestore

Filestore CSI 驅動程式支援 NFSv4.1 檔案系統通訊協定,適用於 GKE 1.33 以上版本。如果是靜態佈建,請在 PersistentVolume 物件的 volumeAttributes 欄位中,將 protocol 欄位設為 NFS_V4_1。

如要動態佈建,請在 StorageClass 物件的參數中,將 protocol 欄位設為 NFS_V4_1。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: enterprise-nfsv41-rwx
provisioner: filestore.csi.storage.gke.io
parameters:
  tier: enterprise
  instance-storageclass-label: "enterprise-nfsv41-rwx"
  protocol: NFS_V4_1
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

詳情請參閱「NFSv4.1 限制」。

搭配使用 fsgroup 和 Filestore 磁碟區

Kubernetes 會使用 fsGroup 變更磁碟區的權限和擁有權,以符合 Pod 的 SecurityContext 中使用者要求的 fsGroup。fsGroup 是適用於 Pod 中所有容器的補充群組。您可以將 fsgroup 套用至 Filestore CSI 驅動程式佈建的磁碟區。

使用 Filestore 磁碟區設定 IP 存取規則

Filestore 支援磁碟區的以 IP 為基礎的存取控管規則。這項功能適用於 1.29.5 以上版本的 GKE 叢集。

管理員可以透過這項功能,指定哪些 IP 位址範圍可以存取透過 GKE 動態佈建的 Filestore 執行個體。這種做法可限制只有授權用戶端才能存取,進而提升安全性,尤其是在 GKE 叢集的 IP 範圍過廣,可能導致 Filestore 執行個體暴露給未經授權的使用者或應用程式時。

這些規則可以直接透過 Filestore API 設定,也可以在建立磁碟區時透過 Filestore CSI 驅動程式設定。您可以使用 nfs-export-options-on-create 參數,在 StorageClass 中以 JSON 格式提供所選設定。

以下資訊清單範例說明如何指定設定:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: filestore-example
provisioner: filestore.csi.storage.gke.io
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
  tier: "enterprise"
  nfs-export-options-on-create: '[
    {
      "accessMode": "READ_WRITE",
      "ipRanges": [
        "10.0.0.0/24"
      ],
      "squashMode": "ROOT_SQUASH",
      "anonUid": "1003",
      "anonGid": "1003"
    },
    {
      "accessMode": "READ_WRITE",
      "ipRanges": [
        "10.0.0.0/28"
      ],
      "squashMode": "NO_ROOT_SQUASH"
    }
  ]'

安全性選項

Filestore IP 存取規則可簡化 GKE 工作負載的共用檔案儲存空間權限設定。不過,如要瞭解 Google 雲端硬碟如何管理檔案擁有權和存取權,必須先掌握幾個重要概念:

  • NFS 和使用者對應:NFS (網路檔案系統) 是 Filestore 使用的通訊協定。運作方式是將用戶端系統 (GKE Pod) 上的使用者對應至 Filestore 伺服器上的使用者。如果伺服器上的檔案由使用者 ID 1003 擁有,且用戶端以使用者 ID 1003 連線,則可存取該檔案。

  • 根目錄壓平合併和 anonUid:

    • Root 權限壓縮 ROOT_SQUASH 是一項安全防護功能,可防止用戶端以完整 Root 權限存取 Filestore 執行個體。啟用 Root 權限壓縮後,用戶端系統上的超級使用者會對應至 anonUid 設定指定的非特殊權限使用者。

    • 不壓縮 Root 權限 (NO_ROOT_SQUASH):用戶端可以具備完整 Root 權限存取 Filestore 執行個體,這在初始設定時很方便,但對一般作業來說較不安全。

  • 初始設定和權限:根據預設,新的 Filestore 執行個體完全由超級使用者擁有。如果未先為其他使用者設定權限就啟用超級使用者壓縮功能,您將失去存取權。因此,您至少需要一項具有 NO_ROOT_SQUASH 的 NFS 匯出規則,才能為其他使用者和群組設定初始存取權。

建議

  • 初始設定:一律先建立至少一項 NFS 匯出規則,指定具有 READ_WRITE 權限的管理員範圍,並允許 NO_ROOT_SQUASH 存取權。您可以使用這個存取權建立目錄、設定權限,以及視需要指派擁有權。
  • 安全性:啟用根目錄壓縮 (ROOT_SQUASH) 以提升安全性。請注意,磁碟區建立後,您只能透過 Filestore API 修改存取規則。
  • 共用存取權:在 Pod 安全性情境中使用 fsGroup,管理共用磁碟區的群組擁有權。請勿與 ROOT_SQUASH 模式重疊。否則會傳回 Access denied 錯誤訊息。

搭配使用 Filestore 和 Shared VPC

本節說明如何透過服務專案,在 Shared VPC 虛擬私有雲網路上使用 Filestore 執行個體。

設定採用 Shared VPC 的叢集

如要使用 Shared VPC 網路設定叢集,請按照下列步驟操作:

  1. 建立主專案和服務專案。
  2. 在主專案和服務專案中啟用 Kubernetes Engine API。
  3. 在主專案中建立網路和子網路。
  4. 在主專案中啟用 Shared VPC。
  5. 在主專案中,為服務專案的 GKE 服務帳戶授予 HostServiceAgent 使用者角色繫結。
  6. 在共用虛擬私有雲網路上啟用私人服務存取權。

在具有 Shared VPC 的新叢集上啟用 Filestore CSI 驅動程式

如要在使用 Shared VPC 的新叢集上啟用 Filestore CSI 驅動程式,請按照下列步驟操作:

  1. 驗證可用的子網路和次要範圍。建立叢集時,您必須指定子網路,以及叢集 Pod 和 Service 要使用的次要 IP 位址範圍。

    gcloud container subnets list-usable \
       --project=SERVICE_PROJECT_ID \
       --network-project=HOST_PROJECT_ID
    

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

    PROJECT                   REGION       NETWORK     SUBNET  RANGE
    HOST_PROJECT_ID  us-central1  shared-net  tier-1  10.0.4.0/22
    ┌──────────────────────┬───────────────┬─────────────────────────────┐
    │ SECONDARY_RANGE_NAME │ IP_CIDR_RANGE │            STATUS           │
    ├──────────────────────┼───────────────┼─────────────────────────────┤
    │ tier-1-pods          │ 10.4.0.0/14   │ usable for pods or services │
    │ tier-1-services      │ 10.0.32.0/20  │ usable for pods or services │
    └──────────────────────┴───────────────┴─────────────────────────────┘
    
  2. 建立 GKE 叢集。以下範例說明如何使用 gcloud CLI,建立為 Shared VPC 設定的 Autopilot 或 Standard 叢集。下列範例使用「建立網路和兩個子網路」中的網路、子網路和範圍名稱。

    Autopilot

    gcloud container clusters create-auto tier-1-cluster \
       --project=SERVICE_PROJECT_ID \
       --region=COMPUTE_REGION \
       --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \
       --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \
       --cluster-secondary-range-name=tier-1-pods \
       --services-secondary-range-name=tier-1-services
    

    標準

    gcloud container clusters create tier-1-cluster \
       --project=SERVICE_PROJECT_ID \
       --zone=COMPUTE_REGION \
       --enable-ip-alias \
       --network=projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME \
       --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME \
       --cluster-secondary-range-name=tier-1-pods \
       --services-secondary-range-name=tier-1-services \
       --addons=GcpFilestoreCsiDriver
    
  3. 建立防火牆規則,允許叢集中的節點、Pod 和 Service 之間進行通訊。以下範例說明如何建立名為 my-shared-net-rule-2 的防火牆規則。

    gcloud compute firewall-rules create my-shared-net-rule-2 \
       --project HOST_PROJECT_ID \
       --network=NETWORK_NAME \
       --allow=tcp,udp \
       --direction=INGRESS \
       --source-ranges=10.0.4.0/22,10.4.0.0/14,10.0.32.0/20
    

    在本範例中,來源範圍 IP 值來自上一個步驟,您已在該步驟中驗證可用的子網路和次要範圍。

搭配使用 Filestore CSI 驅動程式和 Shared VPC 時建立 StorageClass

下列範例說明如何在使用 Filestore CSI 驅動程式和 Shared VPC 時建立 StorageClass:

cat <<EOF | kubectl apply -f -

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: filestore-sharedvpc-example
provisioner: filestore.csi.storage.gke.io
parameters:
  network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME"
  connect-mode: PRIVATE_SERVICE_ACCESS
  reserved-ip-range: RESERVED_IP_RANGE_NAME
allowVolumeExpansion: true

EOF

更改下列內容:

  • HOST_PROJECT_ID:共用虛擬私有雲網路主專案的 ID 或名稱。
  • SHARED_VPC_NAME:先前建立的 Shared VPC 網路名稱。
  • RESERVED_IP_RANGE_NAME:要佈建 Filestore 執行個體的特定預留 IP 位址範圍名稱。這是選填欄位。如果指定保留 IP 位址範圍,則必須是具名位址範圍,而非直接 CIDR 值。

如要在執行 1.23 以上版本的 GKE 叢集上,佈建由 Filestore 多共用區支援的磁碟區,請參閱「使用 GKE 適用的 Filestore 多共用區最佳化儲存空間」。

重新連結 Filestore 單一共用磁碟區

如果您使用 Filestore 搭配基本傳統硬碟、基本固態硬碟或 Enterprise (單一共用) 級別,可以按照下列操作說明,將現有的 Filestore 執行個體重新連線至 GKE 工作負載。

  1. 請按照「取得特定執行個體的相關資訊」一節的操作說明,找出預先佈建的 Filestore 執行個體詳細資料。

  2. 重新部署 PersistentVolume 規格。在 volumeAttributes 欄位中,修改下列欄位,使用與步驟 1 中 Filestore 執行個體相同的值:

    • ip:將這個值修改為預先佈建的 Filestore 執行個體 IP 位址。
    • volume:將這個值修改為預先佈建的 Filestore 執行個體共用名稱。在 claimRef 中,請務必參照步驟 2 中的同一個 PersistentVolumeClaim。
  3. 重新部署 PersistentVolumeClaim 規格。

  4. 執行 kubectl get pvc,檢查 PersistentVolumeClaim 和 PersistentVolume 的繫結狀態。

  5. 重新部署 Pod 規格,並確保 Pod 能再次存取 Filestore 共用區。

後續步驟