共用方式為


教學課程:縮放容器應用程式

Azure 容器應用程式透過一組宣告式縮放比例規則來管理自動水平縮放比例。 當容器應用程式擴增時,視需要建立容器應用程式的新執行個體。 這些執行個體稱為複本。

在本教學課程中,您會將 HTTP 縮放規則新增至容器應用程式,並觀察應用程式的縮放情形。

先決條件

需求 Instructions
Azure 帳戶 如果您沒有 Azure 帳戶,可以建立一個免費帳戶

您需要 Azure 訂用帳戶的「參與者」權限才能繼續。 如需詳細資料,請參閱使用 Azure 入口網站指派 Azure 角色
GitHub 帳戶 免費建立一個帳戶。
Azure CLI 安裝 Azure CLI

安裝程式

若要從 CLI 登入 Azure,請執行下列命令並遵循提示來完成驗證流程。

az login

若要確定您執行的是最新版本 CLI,請執行升級命令。

az upgrade

接下來,安裝或更新 CLI 的 Azure 容器應用程式延伸模組。

如果您在 Azure CLI 中執行 az containerapp 命令或在 PowerShell 中從 Az.App 模組執行 Cmdlet 時收到有關缺少參數的錯誤,請確定您已安裝最新版的 Azure 容器應用程式延伸模組。

az extension add --name containerapp --upgrade

附註

從 2024 年 5 月開始,Azure CLI 延伸模組預設不會再啟用預覽功能。 若要存取容器應用程式預覽功能,請使用 --allow-preview true 安裝容器應用程式延伸模組。

az extension add --name containerapp --upgrade --allow-preview true

現在已安裝目前的延伸模組或模組,請註冊 Microsoft.AppMicrosoft.OperationalInsights 命名空間。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

建立和部署容器應用程式

使用 containerapp up 命令建立及部署容器應用程式。 此命令會建立:

  • 資源群組
  • 容器應用程式環境
  • Log Analytics 工作區

如果其中任何資源已經存在,命令就會使用現有的資源,而不是建立新的資源。

最後,命令會使用公用容器映像 建立 mcr.microsoft.com/dotnet/samples:aspnetapp和部署容器應用程式。 此影像可用來觸發您在本文中建立的縮放規則。 您不需要知道或使用 .NET 即可完成此程式。

az containerapp up \
  --name my-container-app \
  --resource-group my-container-apps \
  --location centralus \
  --environment 'my-container-apps' \
  --image mcr.microsoft.com/dotnet/samples:aspnetapp \
  --target-port 8080 \
  --ingress external \
  --query properties.configuration.ingress.fqdn \

附註

請確定 --image 參數的值是小寫。

--ingress 設定為 external,即可讓容器應用程式可供公用要求使用。

up 命令會傳回容器應用程式的完整網域名稱 (FQDN)。 將此 FQDN 複製到文字檔。 您可以在 「傳送請求」 區段中使用它。 您的 FQDN 看起來會像下列範例:

https://my-container-app.icydune-96848328.centralus.azurecontainerapps.io

新增縮放規則

執行 az containerapp update 命令,將 HTTP 縮放規則新增至容器應用程式。

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-http-scale-rule \
    --scale-rule-http-concurrency 1

此命令會使用 my-http-scale-rule 名稱和並行設定 1,將 HTTP 縮放規則新增至容器應用程式。 如果您的應用程式收到多個並行 HTTP 要求,執行階段會建立應用程式的復本來處理要求。

update 命令以 JSON 回應的形式傳回新的設定,以確認您的要求是否成功。

開始記錄輸出

您可以藉由檢視容器應用程式執行階段所產生的記錄,觀察應用程式縮放的效果。 使用 az containerapp logs show 命令開始接聽記錄項目。

az containerapp logs show \
    --name my-container-app \
    --resource-group my-container-apps \
    --type=system \
    --follow=true

show 命令會即時從容器應用程式的系統記錄檔傳回項目。 預期的回應會像下列範例所示:

{
    "TimeStamp":"2023-08-01T16:49:03.02752",
    "Log":"Connecting to the container 'my-container-app'..."
}
{
    "TimeStamp":"2023-08-01T16:49:03.04437",
    "Log":"Successfully Connected to container:
    'my-container-app' [Revision: 'my-container-app--9uj51l6',
    Replica: 'my-container-app--9uj51l6-5f96557ffb-5khg9']"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9480811+00:00",
    "Log":"Microsoft.Hosting.Lifetime[14]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9481264+00:00",
    "Log":"Now listening on: http://[::]:80"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9490917+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9491036+00:00",
    "Log":"Application started. Press Ctrl+C to shut down."
}
{
    "TimeStamp":"2023-08-01T16:47:31.949723+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497292+00:00",
    "Log":"Hosting environment: Production"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497325+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497367+00:00",
    "Log":"Content root path: /app/"
}

如需詳細資訊,請參閱 az containerapp logs

傳送要求

開啟新的 Bash 殼層。 執行下列命令,將 <YOUR_CONTAINER_APP_FQDN> 取代為容器應用程式的完整網域名稱,也就是您從 [建立及部署容器應用程式] 區段儲存的完整網域名稱。

seq 1 50 | xargs -Iname -P10 curl "<YOUR_CONTAINER_APP_FQDN>"

這些命令會以 10 個要求一組的並行批次,將 50 個要求傳送至您的容器應用程式。

命令或引數 描述
seq 1 50 產生從 1 到 50 的數字序列。
| 管道運算子會將序列傳送至 xargs 命令。
xargs 使用指定的 URL 執行 curl
-Iname 作為 seq 輸出的預留位置。 此引數可防止傳回值傳送至 curl 命令。
curl 呼叫指定的 URL。
-P10 指示 xargs 一次最多執行 10 個程序。

如需詳細資訊,請參閱文件:

在您執行 az containerapp logs show 命令的第一個殼層中,輸出現在會包含一個或多個記錄項目,如下所示。

{
    "TimeStamp":"2023-08-01 18:09:52 +0000 UTC",
    "Type":"Normal",
    "ContainerAppName":"my-container-app",
    "RevisionName":"my-container-app--00001111",
    "ReplicaName":"my-container-app--00001111-aaaaa22222-bbbb",
    "Msg":"Replica 'my-container-app--00001111-aaaaa22222-bbbb' has been scheduled to run on a node.",
    "Reason":"AssigningReplica",
    "EventSource":"ContainerAppController",
    "Count":0
}

在 Azure 入口網站中檢視縮放 (選擇性)

  1. 登入 Azure 入口網站

  2. 在頂端的 [搜尋] 列中,輸入 my-container-app

  3. 在搜尋結果的 [資源] 底下,選取 my-container-app

  4. 在左側的導覽列中,展開 [應用程式],然後選取 [縮放和複本]

  5. 在 [縮放和複本] 頁面中,選取 [複本]

  6. 您的容器應用程式現在有一個以上的複本正在執行。

    容器應用程式複本的螢幕擷取畫面。

    您可能需要選取 [重新整理] 才能查看新的複本。

  7. 在左側導覽列中,展開 [監視],然後選取 [計量]

  8. 在 [計量] 頁面中,將 [計量] 設定為 [要求]

  9. 選取 [套用分割]。

  10. 展開 [值] 下拉式清單並檢查 [複本]

  11. 選取藍色勾選記號圖示以完成編輯分割。

  12. 此圖表顯示容器應用程式收到的要求 (依復本分割)。

    容器應用程式計量圖表,其中顯示依複本分割的要求。

  13. 根據預設,圖表刻度會設定為過去 24 小時,時間粒度為 15 分鐘。 選取刻度,並將其變更為過去 30 分鐘,時間粒度為 1 分鐘。 選取 [套用] 按鈕。

  14. 選取圖表並拖曳,在容器應用程式收到的要求中醒目提示最近的增加情形。

    容器應用程式計量圖表的螢幕擷取畫面,其中顯示依複本分割的要求,其規模為 30 分鐘,且時間細微性為 1 分鐘。

    下列螢幕快照顯示縮放檢視,其中顯示容器應用程式接收的要求如何在複本之間分割。

    容器應用程式計量圖表的螢幕擷取畫面,其中顯示縮放檢視中依複本分割的要求。

CPU 和記憶體擴展

如果可能,您應該偏好 HTTP 調整規則 ,而不是 CPU 或記憶體調整規則。 CPU 和記憶體調整不允許容器應用程式調整為零。

新增 CPU 或記憶體調整規則之後,您可以將 要求傳送至容器應用程式 ,並在 Azure 入口網站 中檢視調整,以測試它。

將要求傳送至調整應用程式之後,可能需要一分鐘的時間才能觸發調整規則並建立新的複本。

CPU 擴展

CPU 擴展可讓您的應用程式根據 CPU 使用率進行縮減或擴展。

例如,如果您建立使用率值 50為 的 CPU 調整規則,當所有複本的平均 CPU 使用率達到 50%時,Azure 容器應用程式會建立容器應用程式的更多複本。

CPU 調整無法讓容器應用程式降至零運行狀態。 如需此觸發程式的詳細資訊,請參閱 KEDA CPU 縮放觸發程式

執行命令 az containerapp update ,將 CPU 調整規則新增至容器應用程式。

附註

當您使用 Azure CLI 將縮放規則新增至已有縮放規則的容器應用程式時,新的縮放規則會取代舊的縮放規則。 若要瞭解如何新增多個縮放規則,請參閱 多個縮放規則

在執行下列命令之前,請將 <PLACEHOLDERS> 替換成您的值。 在本教學課程中,請將 取代 <UTILIZATION>1。 這會導致容器應用程式在所有複本的平均 CPU 使用率達到 1%時擴展。 此值僅供示範之用。 您在執行 --max-replicas 10 時指定的 az containerapp update 對副本數量的限制為 10 個。

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-cpu-scale-rule \
    --scale-rule-type cpu \
    --scale-rule-metadata type=Utilization value=<UTILIZATION>

記憶體擴展

記憶體擴展功能可讓您的應用程式根據使用記憶體的情況進行擴展或縮小。

例如,如果您建立使用率值 50為 的記憶體縮放規則,當所有複本的平均記憶體使用率達到 50%時,Azure 容器應用程式會建立容器應用程式的更多複本。

記憶體擴展不允許您的容器應用程式降至零。 如需此觸發程序的詳細資訊,請參閱 KEDA 記憶體縮放觸發程序

執行 az containerapp update 命令,將記憶體調整規則新增至容器應用程式。

附註

當您使用 Azure CLI 將縮放規則新增至已有縮放規則的容器應用程式時,新的縮放規則會取代舊的縮放規則。 若要瞭解如何新增多個縮放規則,請參閱 多個縮放規則

在執行下列命令之前,請將 <PLACEHOLDERS> 替換成您的值。 在本教學課程中,請將 取代 <UTILIZATION>1。 這會導致容器應用程式在所有複本的平均記憶體使用率達到 1%時進行調整。 此值僅供示範之用。 您在執行 --max-replicas 10 時指定的 az containerapp update 對副本數量的限制為 10 個。

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-memory-scale-rule \
    --scale-rule-type memory \
    --scale-rule-metadata type=Utilization value=<UTILIZATION>

多個比例規則

若要使用 Azure CLI 將多個調整規則新增至容器應用程式,您必須使用 YAML。

  1. 使用命令 az containerapp show 將容器應用程式設定匯出至 YAML。

    az containerapp show \
        --name my-container-app \
        --resource-group my-container-apps \
        --output yaml > app.yaml
    
  2. properties的>template>scale>rulesapp.yaml區段中,新增下列屬性。 將 <PLACEHOLDERS> 取代為您的值。

    ...
    properties:
    ...
      template:
    ...
        scale:
    ...
          rules:
            - name: cpu-scaling-rule
              custom:
                type: cpu
                metadata:
                  type: "Utilization"
                  value: "<CPU_UTILIZATION>"
            - name: memory-scaling-rule
              custom:
                type: memory
                metadata:
                  type: "Utilization"
                  value: "<MEMORY_UTILIZATION>"
    ...
    
  3. 使用app.yaml命令從az containerapp update匯入你的容器應用程式組態。

    az containerapp update \
      --name my-container-app \
      --resource-group my-container-apps \
      --yaml app.yaml
    

清除資源

如果您不打算繼續使用此應用程式,請執行下列命令來刪除資源群組,以及本教學課程中建立的所有資源。

注意

下列命令會刪除指定的資源群組和其中包含的所有資源。 如果指定的資源群組中存在本教學課程範圍之外的資源,也會刪除這些資源。

az group delete --name my-container-apps

秘訣

有問題嗎? 在 Azure 容器應用程式存放庫中提出問題,讓我們在 GitHub 上了解該問題。

後續步驟