手動安裝 CSI 驅動程式


本頁說明如何在 Google Kubernetes Engine (GKE) Standard 叢集上安裝容器儲存介面 (CSI) 儲存空間驅動程式。本頁內容不適用於 GKE Autopilot 叢集,這類叢集會自動使用 Compute Engine 永久磁碟 CSI 驅動程式

如果您在標準叢集中使用 Compute Engine 永久磁碟 CSI 驅動程式,建議自動部署驅動程式,以減少管理負擔。

總覽

CSI 是開放標準 API,可讓 Kubernetes 向容器化工作負載公開任意儲存空間系統。Kubernetes 磁碟區是由廠商專屬的儲存空間驅動程式管理,這些驅動程式過去會編譯到 Kubernetes 二進位檔。先前,您無法使用 Kubernetes 未隨附的儲存空間驅動程式。安裝 CSI 驅動程式後,即可支援 Kubernetes 原生不支援的儲存系統。此外,CSI 可啟用快照和調整大小等現代儲存功能。

安裝供應商的 CSI 驅動程式

其他儲存空間供應商會開發自己的 CSI 驅動程式,並負責提供安裝說明。在簡單的情況下,安裝作業可能只涉及將資訊清單部署至叢集。如要查看 CSI 驅動程式清單,請參閱 CSI 說明文件。

驗證驅動程式安裝作業

安裝 CSI 驅動程式後,您可以執行下列其中一個指令 (視叢集的 GKE 版本而定),驗證安裝作業:

1.14 以上版本

kubectl get csinodes \
-o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'

1.13.x

kubectl get nodes \
-o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'

使用 CSI 驅動程式

如要使用 CSI 驅動程式,請按照下列步驟操作:

  1. 如果系統未在安裝驅動程式時為您建立 Kubernetes StorageClass,請建立一個 StorageClass,並在 provisioner 欄位中參照該驅動程式。安裝部分 CSI 驅動程式時,系統會部署 StorageClass。

  2. 如要佈建儲存空間,請採取下列任一做法:

由 CSI 驅動程式支援的 StorageClass 注意事項

建立 StorageClass 時,請注意下列事項:

  • CSI 驅動程式文件應包含您提供給 StorageClass 的驅動程式專屬參數,包括佈建者名稱。
  • 您應根據 StorageClass 的屬性命名,而非根據其背後的特定驅動程式或設備名稱命名。以 StorageClass 的屬性命名,可讓您在多個叢集和環境中建立同名的 StorageClass,並讓應用程式在叢集間取得相同屬性的儲存空間。

範例:在 StatefulSet 中參照 StorageClass

以下範例說明如何在 StorageClass 中定義 CSI 驅動程式,然後在 StatefulSet 工作負載中參照 StorageClass。這個範例假設驅動程式已安裝至叢集。

以下是名為 premium-rwo 的簡單 StorageClass,使用虛構的 CSI 驅動程式 csi.example.com 做為佈建器:

# fast-sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-rwo
provisioner: csi.example.com # CSI driver
parameters: # You provide vendor-specific parameters to this specification
  type: example-parameter # Be sure to follow the vendor's instructions
  datastore: my-datastore
reclaimPolicy: Retain
allowVolumeExpansion: true

您可以在 StatefulSet 的 volumeClaimTemplates 規格中參照 StorageClass。

在 StatefulSet 的volumeClaimTemplates規格中參照 StorageClass 時,Kubernetes 會使用 PersistentVolume 提供穩定的儲存空間。Kubernetes 會呼叫 StorageClass 中定義的佈建器,建立新的儲存空間磁碟區。在本例中,Kubernetes 會呼叫虛構的 csi.example.com 供應商,該供應商會呼叫供應商的 API 來建立磁碟區。佈建磁碟區後,Kubernetes 會自動建立 PersistentVolume 來代表儲存空間。

以下是參照 StorageClass 的簡單 StatefulSet:

# statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.k8s.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: premium-rwo # This field references the existing StorageClass

後續步驟