将容量预留组分配给 Azure Kubernetes 服务 (AKS) 节点池

随着工作负荷需求的变化,可以将现有 容量预留组(CRG) 关联到 Azure Kubernetes 服务(AKS)节点池,以确保为其分配容量。 容量预留组允许在任何时间段内保留 Azure 区域或可用性区域中的计算容量。 此功能适用于需要有保证容量的工作负荷,例如具有可预测流量模式的工作负荷或需要满足特定性能要求的工作负荷。

本文介绍如何在 AKS 中将容量预留组与节点池配合使用。

注释

删除节点池会隐式取消节点池与任何关联的容量预留组的关联,然后再删除该节点池。 删除群集会隐式取消该群集中的所有节点池与其相关容量预留组的关联。

将容量预留组与 AKS 节点池配合使用的先决条件

  • 需要安装并配置 Azure CLI 2.56 或更高版本。 运行 az --version 即可查找版本。 如果需要安装或升级,请参阅 安装 Azure CLI
  • 需要一个已有的容量预留组,其中至少包含一个容量预留。 否则,节点池将添加到群集中,并显示警告,并且不会关联容量预留组。
  • 需要为包含容量预留组的资源组创建用户分配的托管标识Contributor,并将标识分配给 AKS 群集。 系统分配的托管标识不适用于此功能。

创建用户分配的托管标识并将其分配给 AKS 群集

  1. 使用 az identity create 命令创建用户分配的托管标识。

    az identity create --name <identity-name> --resource-group <resource-group-name> --location <location>
    
  2. 使用 az identity show 命令获取用户分配的托管标识的 ID,并将其设置为环境变量。

    IDENTITY_ID=$(az identity show --name <identity-name> --resource-group <resource-group-name> --query identity.id -o tsv)
    
  3. 使用Contributor命令将az role assignment create角色分配给用户分配的身份。

    az role assignment create --assignee $IDENTITY_ID --role "Contributor" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>
    

    传播角色分配最多可能需要 60 分钟

  4. 使用--assign-identity标志与az aks createaz aks update命令,将用户分配的托管标识分配给新的或现有的 AKS 群集。

    # Create a new AKS cluster with the user-assigned managed identity
    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --location <location> \
        --node-vm-size <vm-size> --node-count <node-count> \
        --assign-identity $IDENTITY_ID \
        --generate-ssh-keys
    
    # Update an existing AKS cluster to use the user-assigned managed identity
    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --location <location> \
        --node-vm-size <vm-size> \
        --node-count <node-count> \
        --enable-managed-identity \
        --assign-identity $IDENTITY_ID         
    

将容量预留组用于 AKS 节点池的限制

无法使用容量预留组来更新现有的节点池。 相反,需要创建一个包含 --crg-id 标志的新节点池,以将其与容量预留组相关联。 还可以在创建群集期间将现有容量预留组与系统节点池相关联。

获取现有容量预留组的 ID

  • 使用 az capacity reservation group show 命令获取现有容量预留组的 ID,并将其设置为环境变量。

    CRG_ID=$(az capacity reservation group show --capacity-reservation-group <crg-name> --resource-group <resource-group-name> --query id -o tsv)
    

将现有产能预留组与节点池相关联

  • 使用带有标志的az aks nodepool add--crg-id命令将现有容量预留组与节点池相关联。 以下示例假定你有一个名为“myCRG”的 CRG。

    az aks nodepool add --resource-group <resource-group-name> --cluster-name <cluster-name> --name <node-pool-name> --crg-id $CRG_ID
    

将现有产能预留组与系统节点池相关联

若要将现有容量预留组与系统节点池相关联,需要在创建群集期间将用户分配的托管标识与 Contributor 角色分配给群集。 然后,您可以使用 --crg-id 这个标志将容量预留组与系统节点池相关联。

  • 使用用户分配的托管标识创建新的 AKS 群集,并使用标志及命令,将其与容量预留组关联。

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --location <location> \
        --node-vm-size <vm-size> --node-count <node-count> \
        --assign-identity $IDENTITY_ID \
        --crg-id $CRG_ID \
        --generate-ssh-keys
    

后续步骤:在 AKS 中管理节点池

若要详细了解如何在 AKS 中管理节点池,请参阅在 Azure Kubernetes 服务(AKS)中管理节点池