本頁說明如何將 Container Storage Interface (CSI) 儲存空間驅動程式,安裝至使用 Google Distributed Cloud (僅限軟體) for VMware 建立的叢集。
總覽
CSI 是開放標準 API,可讓 Kubernetes 將任意儲存系統公開給容器化工作負載。將 CSI 相容的儲存空間驅動程式部署至叢集後,叢集即可直接連線至相容的儲存裝置,不必經過 vSphere 儲存空間。
Kubernetes 磁碟區是由廠商專屬的儲存空間驅動程式管理,這些驅動程式過去會編譯成 Kubernetes 二進位檔。先前,您無法使用 Kubernetes 未隨附的儲存空間驅動程式。安裝 CSI 驅動程式後,即可支援 Kubernetes 原生不支援的儲存系統。此外,CSI 可啟用快照和調整大小等現代儲存功能。
如要使用 CSI 驅動程式,您需要建立 Kubernetes StorageClass。您將 CSI 驅動程式設為 StorageClass 的佈建工具。接著,您可以將 StorageClass 設為叢集的預設值,或將工作負載設定為使用 StorageClass (StatefulSet 範例)。
事前準備
根據預設,Google Distributed Cloud 會使用內建的 vsphereVolume 驅動程式,透過 vSphere 資料存放區。此外,NFS 和 iSCSI 的內建驅動程式可將現有磁碟區附加及掛接至工作負載。
安裝供應商的 CSI 驅動程式
儲存空間供應商會開發自己的 CSI 驅動程式,並負責提供安裝說明。在簡單的情況下,安裝作業可能只涉及將資訊清單部署至叢集。如要查看 CSI 驅動程式清單,請參閱 CSI 說明文件。
驗證驅動程式安裝作業
安裝 CSI 驅動程式後,您可以執行下列指令來驗證安裝作業:
kubectl get csidrivers --kubeconfig KUBECONFIG
使用 CSI 驅動程式
如要使用 CSI 驅動程式,請按照下列步驟操作:
建立 Kubernetes StorageClass,並在
provisioner
欄位中參照驅動程式。如要佈建儲存空間,請採取下列任一做法:
- 在 StatefulSet 物件的
volumeClaimTemplates
規格中參照 StorageClass。 - 將其設為叢集的預設 StorageClass。
- 在 StatefulSet 物件的
由 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 (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: fast # This field references the existing StorageClass