你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure Blob 存储容器存储接口 (CSI) 驱动程序
Azure Blob 存储容器存储接口 (CSI) 驱动程序是符合 CSI 规范的驱动程序,供 Azure Kubernetes 服务 (AKS) 用来管理 Azure Blob 存储的生命周期。 CSI 是有关对 Kubernetes 上的容器化工作负载公开任意块和文件存储系统的一个标准。
现在,AKS 可以采用 CSI 来编写、部署和迭代插件,以在 Kubernetes 中公开新的或改进现有的存储系统。 在 AKS 中使用 CSI 驱动程序可以避免改动核心 Kubernetes 代码并等待完成代码发布周期。
将 Azure Blob 存储作为文件系统装载到容器或 pod 后,它使你能够将 Blob 存储与处理大量非结构化数据的各种应用程序一起使用。 例如:
- 日志文件数据
- 图像、文档和流式传输视频或音频
- 灾难恢复数据
使用 BlobFuse 或网络文件系统 (NFS) 3.0 协议的应用程序可以访问对象存储上的数据。 在引入 Azure Blob 存储 CSI 驱动程序之前,只能手动安装不受支持的驱动程序,从而借助在 AKS 上运行的应用程序访问 Blob 存储。 在 AKS 上启用 Azure Blob 存储 CSI 驱动程序后,有两个内置存储类:azureblob-fuse-premium 和 azureblob-nfs-premium。
若要创建支持 CSI 驱动程序的 AKS 群集,请参阅 AKS 上的 CSI 驱动程序。 若要详细了解使用 NFS 协议的每种 Azure 存储类型之间的访问差异,请参阅使用 NFS 比较对 Azure 文件存储、Blob 存储和 Azure NetApp 文件的访问。
Azure Blob 存储 CSI 驱动程序功能
Azure Blob 存储 CSI 驱动程序支持以下功能:
- BlobFuse 和网络文件系统 (NFS) 版本 3.0 协议
开始之前
请确保已安装并配置 Azure CLI 2.42 或更高版本。 运行
az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 如果已安装 Azure CLIaks-preview
扩展,请确保通过调用az extension update --name aks-preview
将该扩展更新到最新版本。如果之前安装了 CSI Blob 存储开放源代码驱动程序,请执行此链接中的步骤以从群集访问 Azure Blob 存储。
注意
如果在安装开源驱动程序期间未启用 blobfuse-proxy,那么开源驱动程序的卸载将中断现有的 blobfuse 装载。 但是,NFS 装载将不受影响。
在新的或现有 AKS 群集上启用 CSI 驱动程序
借助 Azure CLI,可以在新的或现有 AKS 群集上启用 Blob 存储 CSI 驱动程序,然后再配置永久性卷以供群集中的 Pod 使用。
若要在新群集上启用驱动程序,请在 az aks create
命令中包含 --enable-blob-driver
参数,如以下示例所示:
az aks create \
--enable-blob-driver \
--name myAKSCluster \
--resource-group myResourceGroup \
--generate-ssh-keys
若要在现有群集上启用驱动程序,请在 az aks update
命令中包含 --enable-blob-driver
参数,如以下示例所示:
az aks update --enable-blob-driver --name myAKSCluster --resource-group 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 --name myAKSCluster --resource-group myResourceGroup
将永久性卷与 Azure Blob 存储结合使用
永久性卷 (PV) 表示已经过预配的可用于 Kubernetes Pod 的存储块。 PV 可供一个或多个 Pod 使用,并可动态或静态预配。 如果多个 Pod 需要并发访问同一存储卷,可以使用 Azure Blob 存储通过网络文件系统 (NFS) 或 blobfuse 进行连接。 本文介绍如何动态创建 Azure Blob 存储容器,以供 AKS 群集中的多个 Pod 使用。
有关 Kubernetes 卷的详细信息,请参阅 AKS 中应用程序的存储选项。
使用内置存储类动态创建 Azure Blob 存储 PV
存储类用于定义创建 Azure Blob 存储容器的方法。 节点资源组中会自动创建一个存储帐户,用于与存储类一起来保存 Azure Blob 存储容器。 为“skuName”选择以下 Azure 存储冗余 SKU 之一:
- Standard_LRS:标准本地冗余存储
- Premium_LRS:高级本地冗余存储
- Standard_ZRS:标准区域冗余存储
- Premium_ZRS:高级区域冗余存储
- Standard_GRS:标准异地冗余存储
- Standard_RAGRS:标准读取访问异地冗余存储
在 AKS 上使用存储 CSI 驱动程序时,有两个附加的内置 StorageClass,两者均使用了 Azure Blob CSI 存储驱动程序。
针对这两个存储类的回收策略可确保在删除相应 PV 时删除基础 Azure Blob 存储。 默认情况下,存储类还会将容器配置为可扩展,因为 set allowVolumeExpansion
参数设置为 true。
注意
不支持收缩永久性卷。
使用 kubectl get sc 命令查看存储类。 以下示例显示了 AKS 群集中提供的 azureblob-fuse-premium
和 azureblob-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 和 NetworkSecurityGroup 中的参与者角色。
创建名为
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.22 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
使用 kubectl create 命令创建 StatefulSet:
kubectl create -f azure-blob-nfs-ss.yaml
后续步骤
- 若要了解如何设置静态或动态永久性卷,请参阅创建卷并将其用于 Azure Blob 存储。
- 若要了解如何将 CSI 驱动程序用于 Azure 磁盘,请参阅将 Azure 磁盘与 CSI 驱动程序配合使用
- 若要了解如何将 CSI 驱动程序用于 Azure 文件,请参阅结合使用 Azure 文件与 CSI 驱动程序
- 有关存储最佳做法的详细信息,请参阅有关 Azure Kubernetes 服务中存储和备份的最佳做法。