安裝 Container Storage Interface 驅動程式

本頁面說明如何將 Container Storage Interface (CSI) 儲存空間驅動程式安裝至 Google Distributed Cloud 叢集。

總覽

Container Storage Interface (CSI) 是開放標準 API,許多主要儲存空間供應商都支援這項 API,可讓 Kubernetes 向容器化工作負載公開任意儲存空間系統。

Kubernetes 磁碟區是由廠商專屬的儲存空間驅動程式管理,這些驅動程式過去會編譯成 Kubernetes 二進位檔。先前,您無法使用 Kubernetes 未隨附的儲存空間驅動程式。安裝 CSI 驅動程式後,即可支援 Kubernetes 原生不支援的儲存系統。此外,CSI 可啟用快照和調整大小等現代儲存功能。

如要使用 CSI 驅動程式,您需要建立 Kubernetes StorageClass。您將 CSI 驅動程式設為 StorageClass 的佈建工具。接著,您可以將 StorageClass 設為叢集的預設值,或將工作負載設定為使用 StorageClass (StatefulSet 範例)。

安裝供應商的 CSI 驅動程式

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

如要用於實際工作環境的儲存空間,建議您從 GDC Ready 儲存空間合作夥伴安裝 CSI 驅動程式。

驗證驅動程式安裝

安裝 CSI 驅動程式後,您可以執行下列指令來驗證安裝作業:

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

使用 CSI 驅動程式

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

  1. 建立 Kubernetes StorageClass,並在 provisioner 欄位中參照驅動程式。

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

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

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

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

範例:在 StatefulSet 中參照 StorageClass

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

下列簡單的 StorageClass (premium-rwo) 使用虛構的 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 (PV) 提供穩定儲存空間。Kubernetes 會呼叫 StorageClass 中定義的佈建器,建立新的儲存空間磁碟區。在本例中,Kubernetes 會呼叫虛構的 csi.example.com 供應商,該供應商會呼叫供應商的 API 來建立磁碟區。佈建磁碟區後,Kubernetes 會自動建立 PV 來代表儲存空間。

以下是參照 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

後續步驟