你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:将 Azure 容器存储与 Azure Kubernetes 服务配合使用

Azure 容器存储是一项基于云的卷管理、部署和业务流程服务,专为容器原生构建。 本快速入门介绍了如何连接到基于 Linux 的 Azure Kubernetes 服务 (AKS) 群集、安装 Azure 容器存储,以及使用 Azure CLI 创建存储池。

重要

Azure 容器存储现已正式发布 (GA),最低版本是 1.1.0。 建议对生产工作负载使用此 GA 版本。

先决条件

  • 如果没有 Azure 订阅,请在开始之前创建一个免费帐户

  • 本文需要 Azure CLI 的最新版本(2.35.0 或更高版本)。 请参阅如何安装 Azure CLI。 如果你在 Azure Cloud Shell 中使用 Bash 环境,则表示已安装最新版本。 如果你打算在本地(而不是 Azure Cloud Shell 中)运行命令,请务必使用管理员权限运行命令。 有关详细信息,请参阅开始使用 Azure Cloud Shell

  • 你将需要 Kubernetes 命令行客户端 kubectl。 如果你使用的是 Azure Cloud Shell,则它已安装,或者可以通过运行 az aks install-cli 命令在本地安装它。

  • 检查 Azure 容器存储区域是否支持你的目标区域。

  • 如果尚未创建 AKS 群集,请按照说明安装 AKS 群集

使用入门

  • 记下 Azure 订阅 ID。 如果要将 Azure 弹性 SAN 用作数据存储,则需要将 Azure 容器存储所有者角色或 Azure 容器存储参与者角色分配给 Azure 订阅。 借助所有者级访问权限,可以安装 Azure 容器存储扩展、授予对其存储资源的访问权限,并向你授予配置 Azure 弹性 SAN 资源的权限。 借助参与者级访问权限,可以安装扩展并授予对其存储资源的访问权限。 如果计划将 Azure 磁盘或临时磁盘用作数据存储,则不需要对订阅具有特殊权限。

  • 启动 Azure Cloud Shell,或者如果你使用的是本地安装,请使用 az login 命令登录到 Azure。

  • 如果使用 Azure Cloud Shell,系统可能会提示装载存储。 选择要在其中创建存储帐户的 Azure 订阅,然后选择“创建”。

安装所需的扩展

通过运行以下命令添加或升级到最新版本的 k8s-extension

az extension add --upgrade --name k8s-extension

设置订阅上下文

使用 az account set 命令设置 Azure 订阅上下文。 可以通过运行 az account list --output table 命令来查看有权访问的所有订阅的订阅 ID。 请记住要将 <subscription-id> 替换为你的订阅 ID。

az account set --subscription <subscription-id>

连接到群集

要连接到群集,请使用 Kubernetes 命令行客户端 kubectl。 如果你使用的是 Azure Cloud Shell,则它已安装,或者可以通过运行 az aks install-cli 命令在本地安装它。

  1. 使用 az aks get-credentials 命令将 kubectl 配置为连接到你的群集。 以下命令:

    • 下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。
    • 使用 ~/.kube/config,即 Kubernetes 配置文件的默认位置。 可以使用 --file 参数为你的 Kubernetes 配置文件指定其他位置。
    az aks get-credentials --resource-group <resource-group> --name <cluster-name>
    
  2. 使用 kubectl get 命令验证与群集之间的连接。 此命令将返回群集节点的列表。

    kubectl get nodes
    
  3. 以下输出示例显示了你的集群中的节点。 确保所有节点的状态都显示“就绪”:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-nodepool1-34832848-vmss000000   Ready    agent   80m   v1.25.6
    aks-nodepool1-34832848-vmss000001   Ready    agent   80m   v1.25.6
    aks-nodepool1-34832848-vmss000002   Ready    agent   80m   v1.25.6
    

    记下节点池的名称。 在本示例中,它将为 nodepool1

为存储池选择数据存储选项

在部署 Azure 容器存储之前,需要确定要用于创建存储池和卷的后端存储选项。 目前有三个选项可用:

  • Azure 弹性 SAN:Azure 弹性 SAN 非常适合常规用途数据库、流式处理和消息传递服务、CI/CD 环境以及其他第 1 层/第 2 层工作负载。 根据创建的卷和卷快照按需预配存储。 多个群集可以同时访问单个 SAN,但永久性卷一次只能由一个使用者附加。

  • Azure 磁盘:Azure 磁盘非常适合 MySQL、MongoDB 和 PostgreSQL 等数据库。 存储是按目标容器存储池大小和最大卷大小预配的。

  • 临时磁盘:此选项使用 AKS 群集节点上的本地 NVMe 驱动器或临时 SSD。 它对延迟非常敏感(低的亚毫秒延迟),因此它最适合没有数据持久性要求或带内置数据复制支持的应用程序,如 Cassandra。 AKS 会发现 AKS 节点上的可用临时存储,并获取驱动器进行卷部署。

注意

对于 Azure 弹性 SAN 和 Azure 磁盘,Azure 容器存储将在安装过程中为你部署后备存储。 无需创建自己的弹性 SAN 或 Azure 磁盘。 若要使用弹性 SAN,将需要在 Azure 订阅上具有 Azure 容器存储所有者角色或 Azure 容器存储参与者角色。

资源消耗

Azure 容器存储需要某些节点资源才能为服务运行组件。 根据存储池类型选择,将在安装 Azure 容器存储时指定这些资源:

存储池类型 CPU 核心数 RAM
Azure 弹性 SAN  无
Azure 磁盘 1 1 GiB
临时磁盘 - 临时 SSD 1 1 GiB
临时磁盘 - 本地 NVMe(标准层) 25% 的核心(可更新性能层)* 1 GiB

消耗的资源是按节点计算的,并将在安装 Azure 容器存储的节点池中为每个节点进行消耗。 如果节点没有足够的资源,Azure 容器存储将无法运行。 Kubernetes 将自动重新尝试初始化这些失败的 Pod,因此,如果资源得到解放,则可以再次初始化这些 Pod。

*在存储池类型临时磁盘 - 具有标准(默认)性能层的本地 NVMe 中,如果对群集节点使用多个 VM SKU 类型,则消耗的 25% 的 CPU 核心适用于所使用的最小 SKU。 例如,如果混合使用 8 核和 16 核 VM 类型,则资源消耗为 2 个核心。 可以更新性能层以使用更大百分比的核心并实现更大的 IOPS。

确保群集的 VM 类型满足以下条件

若要使用 Azure 容器存储,需要至少包含三个 Linux VM 的节点池。 每个 VM 应至少有 4 个虚拟 CPU (vCPU)。 Azure 容器存储将使用一个核心在部署扩展的每个 VM 上进行 I/O 处理。

为群集节点选择 VM 类型时,请遵循以下准则。 必须选择支持 Azure 高级存储的 VM 类型。

  • 如果打算将 Azure 弹性 SAN 或 Azure 磁盘用作后备存储,请选择常规用途 VM 类型,例如 standard_d4s_v5。
  • 如果要将临时磁盘与本地 NVMe 配合使用,请选择支持本地 NVMe 数据磁盘的 VM SKU,例如存储优化型 VM SKUGPU 加速型 VM SKU
  • 如果打算将临时磁盘与临时 SSD 配合使用,请选择具有临时 SSD 盘的 VM,例如 Ev3 和 Esv3 系列

在 AKS 群集上安装 Azure 容器存储

安装命令会有所不同,具体取决于你是否已在 AKS 群集上运行 Azure 容器存储的预览实例,或者是否是首次在群集上安装 Azure 容器存储。

将预览版安装升级到正式发布版

如果已在群集上运行 Azure 容器存储的预览实例,建议通过运行以下命令更新到最新的正式发布版 (GA)。 如果是首次在群集上安装 Azure 容器存储,请改为安装 Azure 容器存储并创建存储池。 还可以在特定节点池上安装 Azure 容器存储

az k8s-extension update --cluster-type managedClusters --cluster-name <cluster-name> --resource-group <resource-group> --name azurecontainerstorage --version 1.1.0 --auto-upgrade false --release-train stable

记住将 <cluster-name><resource-group> 替换为自己的值。

安装 Azure 容器存储并创建存储池

在安装之前,请确保 AKS 群集满足 VM 要求

运行以下命令,在群集上安装 Azure 容器存储并创建存储池。 将 <cluster-name><resource-group> 替换为自己的值。 将 <storage-pool-type> 替换为 azureDiskephemeralDiskelasticSan。 如果选择 ephemeralDisk,还可以指定 --storage-pool-option,值可以为 NVMeTemp

运行此命令将在系统节点池上启用 Azure 容器存储,默认情况下命名为 nodepool1*。 如果要在其他节点池上启用它,请参阅在特定节点池上安装 Azure 容器存储。 若要指定其他参数,请参阅 Azure 容器存储存储池参数

*如果有任何具有 acstor.azure.com/io-engine:acstor 标签的现有节点池,则默认情况下会安装 Azure 容器存储。 否则,它安装在系统节点池上。

重要

如果使用 Azure 门户创建了 AKS 群集:群集可能具有用户节点池和系统/代理节点池。 但是,如果群集仅包含一个系统节点池(使用 Azure 门户创建的测试/开发群集就是这种情况),需要首先 新增用户节点池,然后对其进行标记。 这是因为使用 Azure 门户创建 AKS 群集时,会向系统/代理节点池添加污点 CriticalAddOnsOnly,从而阻止在系统节点池上安装 Azure 容器存储。 使用 Azure CLI 创建 AKS 群集时,不会添加此污点。

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type>

完成部署将需要 10-15 分钟。 完成后,你将安装一个 AKS 群集,其中安装了 Azure 容器存储、已启用所选存储池类型的组件和默认存储池。 如果要启用其他存储池类型来创建其他存储池,请参阅“启用其他存储池类型”。

重要

如果将 Azure 弹性 SAN 指定为存储池的后备存储,并且没有将 Azure 容器存储所有者角色或 Azure 容器存储参与者角色分配给 Azure 订阅,则 Azure 容器存储安装将失败,并且不会创建存储池。 如果尝试将 Azure 弹性 SAN 作为其他存储池类型启用,但没有任何这些角色,则以前的安装和存储池将不受影响,并且不会创建弹性 SAN 存储池。

在特定节点池上安装 Azure 容器存储

如果要在特定节点池上安装 Azure 容器存储,请按照以下说明操作。 节点池必须至少包含三个 Linux VM。

  1. 运行以下命令以查看可用节点池的列表。 将 <resource-group><cluster-name> 替换为自己的值。

    az aks nodepool list --resource-group <resource-group> --cluster-name <cluster-name>
    
  2. 运行以下命令,在特定节点池上安装 Azure 容器存储。 将 <cluster-name><resource-group> 替换为自己的值。 将 <storage-pool-type> 替换为 azureDiskephemeralDiskelasticSan。 如果选择 ephemeralDisk,还可以指定 --storage-pool-option,值可以为 NVMeTemp

    az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type> --azure-container-storage-nodepools <comma separated values of nodepool names>
    

启用其他存储池类型

如果要在安装 Azure 容器存储期间启用最初未启用的存储池类型,请运行以下命令。 将 <cluster-name><resource-group> 替换为自己的值。 对于 <storage-pool-type>,请指定 azureDiskephemeralDiskelasticSan

如果要使用此命令指定其他存储池参数,请参阅此表

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type>

如果已启用的新存储池类型占用的资源数超过已启用的存储池类型,则资源消耗量将更改为最大量。

提示

如果已将新节点池添加到群集,并且想要在该节点池上运行 Azure 容器存储,则可以在运行 az aks update 命令时使用 --azure-container-storage-nodepools <nodepool-name> 指定节点池。

显示可用的存储池

若要获取可用存储池的列表,请运行以下命令:

kubectl get sp -n acstor

若要检查存储池的状态,请运行以下命令:

kubectl describe sp <storage-pool-name> -n acstor

如果 Message 没有说明 StoragePool is ready,则存储池仍在创建中或遇到问题。 请参阅Azure 容器存储排除故障

禁用存储池类型

如果不再使用特定的存储池类型,并且想要禁用它以释放节点池中的资源,请运行以下命令。 将 <cluster-name><resource-group> 替换为自己的值。 对于 <storage-pool-type>,请指定 azureDiskephemeralDiskelasticSan

az aks update -n <cluster-name> -g <resource-group> --disable-azure-container-storage <storage-pool-type>

注意

如果具有要禁用的类型的现有存储池,则不会禁用存储池类型。

下一步

若要创建卷,请选择所选后备存储类型的链接。