使用 Azure Blob 儲存體容器儲存體介面 (CSI) 驅動程式

Azure Blob 儲存體容器儲存體介面 (CSI) 驅動程式為與 CSI 規格 (英文) 相容的驅動程式,由 Azure Kubernetes Service (AKS) 用來管理 Azure Blob 儲存體的生命週期。 CSI 是將任意區塊和檔案儲存系統公開給 Kubernetes 上容器化工作負載的標準。

藉由採用和使用 CSI,AKS 現在可以撰寫、部署及反覆運算外掛程式以在 Kubernetes 中公開新的或改善現有的儲存系統。 在 AKS 中使用 CSI 驅動程式可以避免觸及 Kubernetes 的核心程式碼並等候其發行版本週期。

將 Azure Blob 儲存體作為檔案系統掛接到容器或 Pod 後,您就能夠將 Blob 儲存體與許多可處理大量非結構化資料的應用程式搭配使用。 例如:

  • 記錄檔資料
  • 影像、文件和串流視訊或音訊
  • 災害復原資料

物件儲存體上的資料可以由應用程式使用 BlobFuse 或網路檔案系統 (NFS) 3.0 通訊協定來存取。 在推出 Azure Blob 儲存體 CSI 驅動程式之前,唯一的選項是手動安裝不支援的驅動程式,以從在 AKS 上執行的應用程式存取 Blob 儲存體。 在 AKS 上啟用 Azure Blob 儲存體 CSI 驅動程式時,會提供兩個內建儲存體類別:azureblob-fuse-premiumazureblob-nfs-premium

若要建立 CSI 驅動程式支援的 AKS 叢集,請參閱 AKS 上的 CSI 驅動程式。 若要深入了解使用 NFS 通訊協定的每個 Azure 儲存體類型之間的存取差異,請參閱比較使用 NFS 對 Azure 檔案儲存體、Blob 儲存體和 Azure NetApp Files 的存取

Azure Blob 儲存體 CSI 驅動程式功能

Azure Blob 儲存體 CSI 驅動程式支援下列功能:

  • BlobFuse 和網路檔案系統 (NFS) 版本 3.0 通訊協定

開始之前

注意

如果在安裝開放原始碼驅動程序期間未啟用 blobfuse-proxy,則解除安裝開放原始碼驅動程式將會中斷現有的 blobfuse 掛接。 不過,NFS 掛接不會受到影響。

在新的或現有 AKS 叢集上啟用 CSI 驅動程式

使用 Azure CLI,您可以先在新的或現有的 AKS 叢集上啟用 Blob 儲存體 CSI 驅動程式,再設定永續性磁碟區供叢集中的 Pod 使用。

若要啟用新叢集上的驅動程式,請隨著 az aks create 命令包含 --enable-blob-driver 參數,如下列範例所示:

az aks create --enable-blob-driver -n myAKSCluster -g myResourceGroup

若要啟用現有叢集上的驅動程式,請隨著 az aks update 命令包含 --enable-blob-driver 參數,如下列範例所示:

az aks update --enable-blob-driver -n myAKSCluster -g myResourceGroup

系統會提示您確認未安裝開放原始碼 Blob CSI 驅動程式。 確認之後,可能需要幾分鐘的時間才能完成此動作。 完成後,您應該會在輸出中看到在叢集上啟用驅動程式的狀態。 下列範例類似指出上一個命令結果的區段:

"storageProfile": {
    "blobCsiDriver": {
      "enabled": true
    },

停用現有 AKS 叢集上的 CSI 驅動程式

使用 Azure CLI,您可以在從叢集移除永續性磁碟區之後,停用現有 AKS 叢集上的 Blob 儲存體 CSI 驅動程式。

若要停用現有叢集上的驅動程式,請隨著 az aks update 命令包含 --disable-blob-driver 參數,如下列範例所示:

az aks update --disable-blob-driver -n myAKSCluster -g myResourceGroup

使用永續性磁碟區搭配 Azure Blob 儲存體

永續性磁碟區 (PV)代表一個已佈建來與 Kubernetes Pod 搭配使用的儲存體。 PV 可供一個或多個 Pod 使用,且可以動態或靜態方式佈建。 如果多個 Pod 需要同時存取相同的儲存體磁碟區,您可以使用 Azure Blob 儲存體來使用網路檔案系統 (NFS) 或 blobfuse 進行連線。 本文會示範如何在 Azure Kubernetes Service (AKS) 叢集中以動態方式建立 Azure Blob 儲存體容器,以供多個 Pod 使用。

如需 Kubernetes 磁碟區的詳細資訊,請參閱 AKS 中的應用程式適用的儲存體選項

使用內建的儲存體類別,以動態方式建立 Azure Blob 儲存體 PV

儲存體類別可用來定義建立 Azure Blob 儲存體容器的方式。 節點資源群組中會自動建立儲存體帳戶,以供儲存體類別用來保存 Azure Blob 儲存體容器。 針對 skuName,請選擇下列 Azure 儲存體備援:

  • Standard_LRS:標準本地備援儲存體
  • Premium_LRS:進階本地備援儲存體
  • Standard_ZRS:標準區域備援儲存體
  • Premium_ZRS:進階區域備援儲存體
  • Standard_GRS:標準異地備援儲存體
  • Standard_RAGRS:標準讀取權限異地備援儲存體

在 AKS 上使用儲存體 CSI 驅動程式時,還有使用 Azure Blob CSI 儲存體驅動程式的兩個額外內建 StorageClass。

這兩個儲存體類別中的回收原則可確保刪除個別 PV 時,會刪除基礎 Azure Blob 儲存體。 儲存體類別也會預設將容器設定為可展開,因為 set allowVolumeExpansion 參數設定為 true

使用 kubectl get sc 命令來查看儲存體類別。 以下範例顯示 AKS 叢集中可用的 azureblob-fuse-premiumazureblob-nfs-premium 儲存體類別:

NAME                                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION     AGE
azureblob-fuse-premium               blob.csi.azure.com   Delete          Immediate              true                   23h
azureblob-nfs-premium                blob.csi.azure.com   Delete          Immediate              true                   23h

若要使用這些儲存體類別,請建立一個 PVC 與個別的 Pod 來參考使用這些類別。 PVC 可用來根據儲存體類別,動態佈建儲存體。 PVC 可以使用其中一個預先建立的儲存體類別或使用者定義的儲存體類別,來為所需的 SKU、大小和通訊協定建立 Azure Blob 儲存體容器,以便與其通訊。 當您建立 Pod 定義時,您會指定 PVC 應要求所需的儲存體。

使用 StatefulSet

若要讓儲存體磁碟區保存您的工作負載,您可以使用 StatefulSet。 這可讓您更輕鬆地讓現有磁碟區符合可取代已失敗項目的任何新 Pod。 下列範例示範如何使用 Blobfuse 或 NFS 通訊協定來為 Blob 儲存體設定 StatefulSet。

必要條件

  • 您的 AKS 叢集控制平面身分識別 (即您的 AKS 叢集名稱) 已新增至 VNet 和網路安全性群組中的參與者角色。
  1. 建立名為 azure-blob-nfs-ss.yaml 的檔案,然後將下列 YAML 複製進來。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. 使用 kubectl create 命令建立 StatefulSet:

    kubectl create -f azure-blob-nfs-ss.yaml
    

下一步