將容量保留群組分配至 Azure Kubernetes Service (AKS) 節點池

隨著工作負載需求變化,您可以將現有 的容量保留群組(CRG) 關聯到您的 Azure Kubernetes Service(AKS)節點池,以確保它們的容量分配。 容量保留群組允許您在 Azure 區域或可用區域中,為任意時間保留運算容量。 此功能對於需要保證容量的工作負載非常有用,例如流量模式可預測或需要滿足特定效能要求的工作負載。

在本文中,您將學習如何在 AKS 中使用節點池的容量預留群組。

備註

刪除節點集區時,會自動解除該節點集區與任何關聯的容量保留群組的關聯,然後再刪除節點集區。 刪除叢集時,會自動解除叢集中所有節點集區與其關聯的容量保留群組的關聯。

使用 AKS 節點池使用容量預留群組的前提條件

  • 你需要安裝並設定 Azure CLI 2.56 或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱 安裝 Azure CLI。
  • 你需要一個已有的 容量預留群組 ,且至少有一個容量預留。 若未解除,則節點集區會以警告方式加入叢集,且不會關聯任何容量保留群組。
  • 您需要為包含容量保留群組的資源群組建立具有 Contributor 角色的使用者指派受控識別,並將該識別指派給 AKS 叢集。 系統指派的受管理身份無法用於此功能。

Important

對於共享或跨訂閱的容量保留群組,執行 AKS 指令的使用者或服務主體必須擁有 Microsoft.Compute/capacityReservationGroups/write 連結容量保留群組的權限。 目前,虛擬機器所使用的細微共享容量保留群組取用者權限(例如 Microsoft.Compute/capacityReservationGroups/deploy/action)仍不足以將 AKS 節點集區與容量保留群組建立關聯。

分配給 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 create 或 az 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         
    

取得現有容量保留群組的識別碼

用指令 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 指令,將現有的容量保留群組與現有的節點集區建立關聯。

  • 對於區域節點池,此操作會啟動目標節點池的滾動更新。 更新程序會依序對所有節點執行封鎖與清空,然後重新啟動以套用變更。
  • 預覽期間,對於非區域性(區域性)節點池,先將節點池縮放至零,然後套用容量保留群組。

Prerequisites

  • 在執行此指令前,請先安裝 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
    

    如果指令在 LinkedAuthorizationFailed 和 引用 Microsoft.Compute/capacityReservationGroups/write時失敗,則將該權限授予在目標容量保留群組上執行該指令的登入使用者或服務主體。

將現有容量保留群組關聯至系統節點集區

要將現有的容量保留群組與系統節點池關聯,你需要在建立叢集時,將使用者指派的受控識別與該叢集的 Contributor 角色綁定。 接著你可以用這個 --crg-id 旗標將容量保留群組與系統節點池關聯起來。

  • 建立一個新的 AKS 叢集,使用使用者指派的受管識別,並使用 --assign-identity 及 --crg-id 旗標與 az aks create 指令將其關聯到容量預留群組。

    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 Service (AKS) 中的節點池管理。