将容量预留组分配给 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         
    

获取现有容量预留组的 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

将现有容量预留组与现有节点池相关联(预览版)

使用带有 az aks nodepool update 标志的 --crg-id 命令,将现有容量预留组与现有节点池关联。

  • 对于区域节点池,此操作会启动目标节点池的滚动更新。 更新过程包括对所有节点逐个执行封锁和排空操作,随后通过重启使更改生效。
  • 对于预览期间的非区域(区域)节点池,请先将节点池缩放为零,然后应用容量预留组。

先决条件

  • 运行此命令之前,aks-preview请安装Azure CLI扩展版本20.0.0b7或更高版本。

  • 确保容量预留组有足够的容量用于节点池升级策略。 当 maxSurge > 0,为 最大激增 值预留额外容量。 例如,将 maxSurge 设置为 2 的一个 10 节点池在升级期间最多可以运行 12 个节点。 对于仅使用 maxUnavailable 的滚动发布或区域缩容到零的路径,不需要这种额外容量。

    az aks nodepool update --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)中管理节点池