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

教程:安装 Azure 容器存储预览版以用于 Azure Kubernetes 服务

Azure 容器存储是一项基于云的卷管理、部署和业务流程服务,专为容器原生构建。 在本文中,你将创建 Azure Kubernetes 服务 (AKS) 群集,并在该群集上安装 Azure 容器存储。 如果你已部署 AKS 群集,则我们建议你使用此快速入门安装 Azure 容器存储,而不是按照本教程中的手动步骤操作。

  • 创建资源组
  • 选择数据存储选项和 VM 类型
  • 创建 AKS 群集
  • 连接到群集
  • 标记节点池
  • 将 Azure 容器存储操作员角色分配给 AKS 托管标识
  • 安装 Azure 容器存储

先决条件

  • 如果没有 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 容器存储区域是否支持你的目标区域。

使用入门

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

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

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

设置订阅上下文

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

az account set --subscription <subscription-id>

注册资源提供程序

必须在 Azure 订阅中注册 Microsoft.ContainerServiceMicrosoft.KubernetesConfiguration 资源提供程序。 若要注册这些提供程序,请运行以下命令:

az provider register --namespace Microsoft.ContainerService --wait 
az provider register --namespace Microsoft.KubernetesConfiguration --wait 

若要检查是否已成功注册这些提供程序,请运行以下命令:

az provider list --query "[?namespace=='Microsoft.ContainerService'].registrationState"
az provider list --query "[?namespace=='Microsoft.KubernetesConfiguration'].registrationState"

创建资源组

Azure 资源组是一个逻辑组,用于保存要作为组管理的 Azure 资源。 创建资源组时,系统会提示你指定一个位置。 此位置是:

  • 资源组元数据的存储位置。
  • 在创建资源期间未指定另一个区域时,资源在 Azure 中的运行位置。

使用 az group create 命令创建资源组。 将 <resource-group-name> 替换为要创建的资源组的名称,将 <location> 替换为 Azure 区域,如 eastus、westus2、westus3 或 westeurope。

az group create --name <resource-group-name> --location <location>

如果已成功创建资源组,则会看到如下所示的输出:

{
  "id": "/subscriptions/<guid>/resourceGroups/myContainerStorageRG",
  "location": "eastus",
  "managedBy": null,
  "name": "myContainerStorageRG",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null
}

选择数据存储选项和虚拟机类型

在创建群集之前,你应了解你最终选择用来创建存储池的后端存储选项。 这是因为不同的存储服务适用于不同的虚拟机 (VM) 类型作为群集节点,你需要在创建存储池之前部署群集。

数据存储选项

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

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

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

VM 类型

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

如果你打算将 Azure 弹性 SAN 或 Azure 磁盘与 Azure 容器存储配合使用,则应为群集节点选择常规用途 VM 类型,例如 standard_d4s_v5。

如果打算将临时磁盘与本地 NVMe 配合使用,请选择存储优化 VM 类型,例如 standard_l8s_v3。 如果打算将临时磁盘与临时 SSD 配合使用,则需要 Ev3 和 Esv3 系列 VM

重要

必须选择支持 Azure 高级存储的 VM 类型。

创建 AKS 群集

运行以下命令以创建基于 Linux 的 AKS 群集并启用系统分配的托管标识。 如果已有想要使用的 AKS 群集,则可以跳过此步骤。

<resource-group> 替换为创建的资源组的名称,将 <cluster-name> 替换为要创建的群集的名称,并将 <vm-type> 替换为在上一步中选择的 VM 类型。 在本例中,将创建包含三个节点的群集。 如果需要更大的群集,请增加 --node-count

az aks create -g <resource-group> -n <cluster-name> --node-count 3 -s <vm-type> --generate-ssh-keys

部署将需要几分钟才能完成。

注意

当你创建 AKS 群集时,AKS 会自动创建第二个资源组来存储 AKS 资源。 第二个资源组遵循命名约定 MC_YourResourceGroup_YourAKSClusterName_Region。 有关详细信息,请参阅为何使用 AKS 创建两个资源组?

连接到群集

要连接到群集,请使用 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 容器存储的正确 IO 引擎相关联。

重要

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

运行以下命令以更新节点池标签。 请记住将<resource-group><cluster-name>替换为自己的值,并将<nodepool-name>替换为节点池名称。

az aks nodepool update --resource-group <resource-group> --cluster-name <cluster-name> --name <nodepool-name> --labels acstor.azure.com/io-engine=acstor

可以通过登录到 Azure 门户并导航到 AKS 群集来验证节点池是否已正确标记。 转到“设置 > 节点池”,选择节点池,然后在“排斥和标签”下,应会看到 Labels: acstor.azure.com/io-engine:acstor

将 Azure 容器存储操作员角色分配给 AKS 托管标识

仅当打算使用 Azure 弹性 SAN 作为后备存储时,才需要执行此步骤。 为了使用弹性 SAN,你需要授予权限,以允许 Azure 容器存储为你的群集预配存储。 具体而言,必须将 Azure 容器存储操作员角色分配给 AKS 托管标识。 可以使用 Azure 门户或 Azure CLI 执行此操作。 为了执行此操作,你需要对 Azure 订阅具有 Azure 容器存储所有者角色或 Azure 容器存储参与者角色。 如果没有足够的权限,请让管理员执行这些步骤。

  1. 登录到 Azure 门户,然后搜索并选择“Kubernetes 服务”。
  2. 找到并选择 AKS 群集。 从左侧导航栏中选择“设置>属性”。
  3. 在“基础结构资源组”下,应会看到 AKS 在你创建群集时创建的资源组的链接。 选择该文件夹。
  4. 从左窗格中选择“访问控制(标识和访问管理)”。
  5. 选择“添加”>“添加角色分配”。
  6. 在“作业函数角色”选项卡下,选择或搜索“Azure 容器存储操作员”,然后选择“下一步”。 如果你在订阅上没有“Azure 容器存储所有者”角色或“Azure 容器存储参与者”角色,则无法添加“Azure 容器存储操作员”角色。
  7. 在“访问权限分配对象”下,选择“托管标识”。
  8. 在“成员”下,单击“ + 选择成员”。 将显示“选择托管标识”菜单。
  9. 在“托管标识”下,选择“用户分配的托管标识”。
  10. 在“选择”下,搜索并选择包含你的群集名称并追加了 -agentpool 的托管标识。
  11. 单击“选择”,然后单击“查看+分配”。

安装 Azure 容器存储

初始安装使用 Azure Arc CLI 命令下载新扩展。 将 <cluster-name><resource-group> 替换为自己的值。 <extension-name> 值可以是所需的任何值,它只是要安装的扩展的标签。

在安装期间,系统可能会要求你安装 k8s-extension。 选择 Y

az k8s-extension create --cluster-type managedClusters --cluster-name <cluster-name> --resource-group <resource-group> --name <extension-name> --extension-type microsoft.azurecontainerstorage --scope cluster --release-train stable --release-namespace acstor

安装需要 10-15 分钟。 可以通过运行以下命令并确保 provisioningState 显示“成功”来检查安装是否已正确完成:

az k8s-extension list --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type managedClusters

恭喜,你已成功安装 Azure 容器存储。 你现在有了可用于 Kubernetes 工作负载的新存储类。

下一步

现在可以创建存储池和卷了。 根据要使用的后端存储类型,按照相应文章中的步骤进行操作。