安裝 Container Storage Interface (CSI) 驅動程式後,您就能在 Google Distributed Cloud 叢集中,為有狀態工作負載佈建及管理永久儲存空間。按照儲存空間供應商的指示安裝驅動程式後,您可以驗證安裝作業,並建立 StorageClass,為應用程式動態佈建磁碟區。
總覽
Container Storage Interface (CSI) 是許多主要儲存空間供應商支援的開放標準 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 驅動程式,請按照下列步驟操作:
建立 Kubernetes StorageClass,並在
provisioner欄位中參照驅動程式。如要佈建儲存空間,您可以採取下列任一做法:
- 在 StatefulSet 物件的
volumeClaimTemplates規格中參照 StorageClass。 - 將其設為叢集的預設 StorageClass。
- 在 StatefulSet 物件的
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