共用方式為


請在 Azure 容器應用程式中設定縮放比例規則。

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

新增或編輯調整規則會建立容器應用程式的新修訂版本。 修訂版是容器應用程式的不可變快照。 若要了解哪些類型的變更會觸發新的修訂,請參閱修訂 變更類型

事件驅動 Azure 容器應用程式作業會使用縮放規則來根據事件觸發執行。

調整定義

縮放是限制、規則和行為的組合。

  • 限制定義容器應用程式調整時每個修訂的最小和最大可能複本數目。

    調整限制 預設值 最小值 最大值
    每個修訂的最小複本數目 0 0 可設定的複本上限為 1,000。
    每個修訂的最大複本數目 10 1 可設定的複本上限為 1,000。
  • 規則是 Azure 容器應用程式用來決定何時新增或移除複本的準則。

    縮放規則 實作為 HTTP、TCP (傳輸控制通訊協定) 或自訂。

  • 行為是規則和限制的組合,可決定一段時間的縮放決策。

    縮放行為說明如何計算縮放決策。

當您定義縮放規則時,請務必考慮下列項目:

  • 如果容器應用程式調整為零,則不會向您收取使用量費用。
  • 未處理但保留在記憶體中的複本可能會以較低的「閒置」費率計費。 如需詳細資訊,請參閱帳單
  • 如果您想要確保修訂的執行個體會永遠執行,請將複本的最小數目設定為 1 或更高的值。

調整規則

調整會由三種不同的觸發程序類別驅動:

  • HTTP:根據您修訂的並行 HTTP 要求數量。
  • TCP:根據連線到您修訂的並行 TCP 連線數量。
  • 自訂:根據 CPU、記憶體或支援的事件驅動資料來源,例如:
    • Azure 服務匯流排
    • Azure 事件中樞
    • Apache Kafka
    • Redis

如果您定義多個調整規則,容器應用程式會在符合任何規則的第一個條件後立刻開始調整。

HTTP

使用 HTTP 調整規則時,您可以控制並行 HTTP 要求的閾值,此閾值會決定容器應用程式修訂的調整方式。 每 15 秒,系統會將過去 15 秒的要求數目除以 15,得出的結果就是並行要求的數量。 Azure 容器應用程式作業不支援 HTTP 縮放規則。

在下列範例中,修訂會擴增至五個複本,而且可以縮減為零。 調整屬性會設定為每秒 100 個並行要求。

範例

http 區段會定義 HTTP 縮放規則。

縮放屬性 描述 預設值 最小值 最大值
concurrentRequests 當 HTTP 要求的數目超過此值時,便會新增另一個複本。 複本會繼續新增至集區,數量最多可達 maxReplicas 10 1 n/a
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "http-rule",
            "http": {
              "metadata": {
                "concurrentRequests": "100"
              }
            }
          }]
        }
      }
    }
  }
}

注意

使用非 HTTP 事件縮放規則時,請將容器應用程式的 properties.configuration.activeRevisionsMode 屬性設定為 single

createupdate 命令中使用 --scale-rule-http-concurrency 參數來定義 HTTP 縮放規則。

CLI 參數 描述 預設值 最小值 最大值
--scale-rule-http-concurrency 當並行 HTTP 要求的數目超過此值時,便會新增另一個複本。 複本會繼續新增至集區,數量最多可達 max-replicas 10 1 n/a
az containerapp create \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --environment <ENVIRONMENT_NAME> \
  --image <CONTAINER_IMAGE_LOCATION>
  --min-replicas 0 \
  --max-replicas 5 \
  --scale-rule-name azure-http-rule \
  --scale-rule-type http \
  --scale-rule-http-concurrency 100
  1. 在 Azure 入口網站中,移至您的容器應用程式

  2. 選取 [級別]

  3. 選取 [編輯並部署]

  4. 選取 [調整] 索引標籤。

  5. 選取最小和最大複本範圍。

    Azure 容器應用程式縮放範圍滑桿的螢幕擷取畫面。

  6. 選取 [新增]。

  7. 在 [規則名稱] 方塊中,輸入規則的名稱。

  8. 從 [類型] 下拉式清單中,選取 [HTTP 縮放]

  9. 在 [並行要求] 方塊中,輸入容器應用程式所需的並行要求數量。

TCP

使用 TCP 調整規則時,您可以控制用以決定應用程式調整方式的並行 TCP 連線閾值。 每 15 秒,系統會將過去 15 秒的連線數除以 15,得出的結果就是並行連線的數量。 Azure 容器應用程式作業不支援 TCP 縮放規則。

在下列範例中,容器應用程式修訂會擴增至五個複本,而且可以縮減為零。 調整閾值會設定為每秒 100 個並行連線。

範例

tcp 區段會定義 TCP 縮放規則。

縮放屬性 描述 預設值 最小值 最大值
concurrentConnections 當並行 TCP 連線數目超過此值時,系統便會再新增一個複本。 隨著同時連線數目增加,複本數量會繼續新增至最多 maxReplicas 個。 10 1 n/a
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "tcp-rule",
            "tcp": {
              "metadata": {
                "concurrentConnections": "100"
              }
            }
          }]
        }
      }
    }
  }
}

createupdate 命令中使用 --scale-rule-tcp-concurrency 參數定義 TCP 調整規則。

CLI 參數 描述 預設值 最小值 最大值
--scale-rule-tcp-concurrency 當並行 TCP 連線數目超過此值時,系統便會再新增一個複本。 隨著同時連線數目增加,複本數量會繼續新增至最多 max-replicas 個。 10 1 n/a
az containerapp create \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --environment <ENVIRONMENT_NAME> \
  --image <CONTAINER_IMAGE_LOCATION>
  --min-replicas 0 \
  --max-replicas 5 \
  --transport tcp \
  --ingress <external/internal> \
  --target-port <CONTAINER_TARGET_PORT> \
  --scale-rule-name azure-tcp-rule \
  --scale-rule-type tcp \
  --scale-rule-tcp-concurrency 100

Azure 入口網站中不支援。 使用 Azure CLIAzure Resource Manager 來設定 TCP 縮放規則。

自訂

您可以使用下列預設值,根據任何 ScaledObjectKEDA 縮放工具來建立自訂 Azure 容器應用程式縮放規則:

Defaults
輪詢間隔 30
冷卻期間 300

針對 事件驅動 Azure 容器應用程式作業,您可以根據任何 ScaledJob 型 KEDA 縮放工具來建立自訂縮放規則。

以下範例將示範建立自訂縮放規則的方式。

範例

此範例示範如何將 Azure 服務匯流排調整工具轉換成 Azure 容器應用程式縮放規則,但您也可以針對 ScaledObjectKEDA 縮放工具規格使用相同的流程。

針對驗證,KEDA 調整工具驗證參數會轉換成 Azure 容器應用程式秘密

以下程序示範如何將 KEDA 縮放工具轉換成 Azure 容器應用程式縮放規則。 此程式碼片段是 ARM 範本的摘錄,說明每個區段在整體範本內容中的位置。

{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "configuration": {
        ...
        "secrets": [
          {
            "name": "<NAME>",
            "value": "<VALUE>"
          }
        ]
      },
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [
            {
              "name": "<RULE_NAME>",
              "custom": {
                "metadata": {
                  ...
                },
                "auth": [
                  {
                    "secretRef": "<NAME>",
                    "triggerParameter": "<PARAMETER>"
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

如需下列範例在 ARM 範本中如何配合的相關內容,請參閱此摘錄。

首先,您要定義縮放規則的類型和中繼資料。

  1. 從 KEDA 縮放工具規格中尋找 type 值。

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. 在 ARM 範本中,將縮放工具 type 值輸入縮放規則的 custom.type 屬性。

    ...
    "rules": [
      {
        "name": "azure-servicebus-queue-rule",
        "custom": {
          "type": "azure-servicebus",
          "metadata": {
            "queueName": "my-queue",
            "namespace": "service-bus-namespace",
            "messageCount": "5"
          }
        }
      }
    ]
    ...
    
  3. 從 KEDA 縮放工具規格中尋找 metadata 值。

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  4. 在 ARM 範本中,將所有中繼資料值新增至縮放規則的 custom.metadata 區段。

    ...
    "rules": [
      {
        "name": "azure-servicebus-queue-rule",
        "custom": {
          "type": "azure-servicebus",
          "metadata": {
            "queueName": "my-queue",
            "namespace": "service-bus-namespace",
            "messageCount": "5"
          }
        }
      }
    ]
    ...
    

驗證

KEDA 調整工具支援在 authenticationRef 屬性所參考的 TriggerAuthentication 中使用秘密。 您可以將 TriggerAuthentication 物件對應至 Azure 容器應用程式縮放規則。

注意

Azure 容器應用程式縮放規則僅支援秘密參考, 不支援其他驗證類型,例如 Pod 身分識別。

  1. 尋找 KEDA ScaledObject 規格所參考的 TriggerAuthentication 物件。

  2. 從 KEDA 規格中,尋找 TriggerAuthentication 物件的每個 secretTargetRef 及其相關聯秘密。

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secrets
      namespace: my-project
    type: Opaque
    data:
      connection-string-secret: <SERVICE_BUS_CONNECTION_STRING>
    ---
    apiVersion: keda.sh/v1alpha1
    kind: TriggerAuthentication
    metadata:
      name: azure-servicebus-auth
    spec:
      secretTargetRef:
      - parameter: connection
        name: my-secrets
        key: connection-string-secret
    ---
    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: azure-servicebus-queue-rule
      namespace: default
    spec:
      scaleTargetRef:
        name: my-scale-target
      triggers:
      - type: azure-servicebus
        metadata:
          queueName: my-queue
          namespace: service-bus-namespace
          messageCount: "5"
        authenticationRef:
            name: azure-servicebus-auth
    
  3. 在 ARM 範本中,將所有項目新增至縮放規則的 auth 陣列。

    1. 秘密新增至容器應用程式中包含秘密值的 secrets 陣列。

    2. triggerParameter 屬性值設定為 TriggerAuthenticationkey 屬性的值。

    3. secretRef 屬性的值設定為 Azure 容器應用程式秘密的名稱。

    {
      ...
      "resources": {
        ...
        "properties": {
          ...
          "configuration": {
            ...
            "secrets": [
              {
                "name": "connection-string-secret",
                "value": "<SERVICE_BUS_CONNECTION_STRING>"
              }
            ]
          },
          "template": {
            ...
            "scale": {
              "minReplicas": 0,
              "maxReplicas": 5,
              "rules": [
                {
                  "name": "azure-servicebus-queue-rule",
                  "custom": {
                    "type": "azure-servicebus",
                    "metadata": {
                      "queueName": "my-queue",
                      "namespace": "service-bus-namespace",
                      "messageCount": "5"
                    },
                    "auth": [
                      {
                        "secretRef": "connection-string-secret",
                        "triggerParameter": "connection"
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    某些縮放工具支援具有 FromEnv 尾碼的中繼資料,以參考環境變數中的值。 Azure 容器應用程式會查看 ARM 範本中針對環境變數列出的第一個容器。

    如需更多安全性相關資訊,請參閱考量一節。

  1. 從 KEDA 縮放工具規格中尋找 type 值。

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. 在 CLI 命令中,將 --scale-rule-type 參數設定為規格 type 值。

    az containerapp create \
      --name <CONTAINER_APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --environment <ENVIRONMENT_NAME> \
      --image <CONTAINER_IMAGE_LOCATION>
      --min-replicas 0 \
      --max-replicas 5 \
      --secrets "connection-string-secret=<SERVICE_BUS_CONNECTION_STRING>" \
      --scale-rule-name azure-servicebus-queue-rule \
      --scale-rule-type azure-servicebus \
      --scale-rule-metadata "queueName=my-queue" \
                            "namespace=service-bus-namespace" \
                            "messageCount=5" \
      --scale-rule-auth "connection=connection-string-secret"
    
  3. 從 KEDA 縮放工具規格中尋找 metadata 值。

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  4. 在 CLI 命令中,將 --scale-rule-metadata 參數設定為中繼資料值。

    您必須將 YAML 格式的值轉換成索引鍵/值組,才能在命令列上使用。 請以空格隔開每個索引鍵/值組。

    az containerapp create \
      --name <CONTAINER_APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --environment <ENVIRONMENT_NAME> \
      --image <CONTAINER_IMAGE_LOCATION>
      --min-replicas 0 \
      --max-replicas 5 \
      --secrets "connection-string-secret=<SERVICE_BUS_CONNECTION_STRING>" \
      --scale-rule-name azure-servicebus-queue-rule \
      --scale-rule-type azure-servicebus \
      --scale-rule-metadata "queueName=my-queue" \
                            "namespace=service-bus-namespace" \
                            "messageCount=5" \
      --scale-rule-auth "connection=connection-string-secret"
    

驗證

KEDA 調整工具可支援在 TriggerAuthentication 中使用 authenticationRef 屬性所參考的秘密。 您可以將 TriggerAuthentication 物件對應至 Azure 容器應用程式縮放規則。

注意

Azure 容器應用程式縮放規則僅支援秘密參考, 不支援其他驗證類型,例如 Pod 身分識別。

  1. 尋找 KEDA ScaledObject 規格所參考的 TriggerAuthentication 物件。 識別 TriggerAuthentication 物件的每個 secretTargetRef

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secrets
      namespace: my-project
    type: Opaque
    data:
      connection-string-secret: <SERVICE_BUS_CONNECTION_STRING>
    ---
    apiVersion: keda.sh/v1alpha1
    kind: TriggerAuthentication
    metadata:
      name: azure-servicebus-auth
    spec:
      secretTargetRef:
      - parameter: connection
        name: my-secrets
        key: connection-string-secret
    ---
    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: azure-servicebus-queue-rule
      namespace: default
    spec:
      scaleTargetRef:
        name: my-scale-target
      triggers:
      - type: azure-servicebus
        metadata:
          queueName: my-queue
          namespace: service-bus-namespace
          messageCount: "5"
        authenticationRef:
            name: azure-servicebus-auth
    
  2. 在您的容器應用程式中,建立符合 secretTargetRef 屬性的秘密

  3. 在 CLI 命令中,為每個 secretTargetRef 項目設定參數。

    1. 使用 --secrets 參數建立秘密項目。 如果有多個秘密,請使用空格分隔。

    2. 使用 --scale-rule-auth 參數建立驗證項目。 如果有多個項目,請以空格分隔。

    az containerapp create \
      --name <CONTAINER_APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --environment <ENVIRONMENT_NAME> \
      --image <CONTAINER_IMAGE_LOCATION>
      --min-replicas 0 \
      --max-replicas 5 \
      --secrets "connection-string-secret=<SERVICE_BUS_CONNECTION_STRING>" \
      --scale-rule-name azure-servicebus-queue-rule \
      --scale-rule-type azure-servicebus \
      --scale-rule-metadata "queueName=my-queue" \
                            "namespace=service-bus-namespace" \
                            "messageCount=5" \
      --scale-rule-auth "connection=connection-string-secret"
    
  1. 在 Azure 入口網站中,移至您的容器應用程式。

  2. 選取 [級別]

  3. 選取 [編輯並部署]

  4. 選取 [縮放和複本] 索引標籤。

  5. 選取最小和最大複本範圍。

    Azure 容器應用程式縮放範圍滑桿的螢幕擷取畫面。

  6. 選取 [新增]。

  7. 在 [規則名稱] 方塊中,輸入規則的名稱。

  8. 在 [類型] 下拉式清單中,選取 [自訂]

  9. 從 KEDA 縮放工具規格中尋找 type 值。

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  10. 在 [自訂規則類型] 方塊中,輸入縮放工具 type 值。

  11. 從 KEDA 縮放工具規格中尋找 metadata 值。

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  12. 在入口網站中,尋找 [中繼資料] 區段,然後選取 [新增]。 在 KEDA ScaledObject 規格中繼資料區段中,輸入每個項目的名稱和值。

驗證

KEDA 調整工具可支援在 TriggerAuthentication 中使用 authenticationRef 屬性所參考的秘密。 您可以將 TriggerAuthentication 物件對應至 Azure 容器應用程式縮放規則。

注意

Azure 容器應用程式縮放規則僅支援秘密參考, 不支援其他驗證類型,例如 Pod 身分識別。

  1. 在您的容器應用程式中,建立您要參考的秘密

  2. 尋找 KEDA ScaledObject 規格所參考的 TriggerAuthentication 物件。 識別 TriggerAuthentication 物件的每個 secretTargetRef

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secrets
      namespace: my-project
    type: Opaque
    data:
      connection-string-secret: <SERVICE_BUS_CONNECTION_STRING>
    ---
    apiVersion: keda.sh/v1alpha1
    kind: TriggerAuthentication
    metadata:
      name: azure-servicebus-auth
    spec:
      secretTargetRef:
      - parameter: connection
        name: my-secrets
        key: connection-string-secret
    ---
    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: azure-servicebus-queue-rule
      namespace: default
    spec:
      scaleTargetRef:
        name: my-scale-target
      triggers:
      - type: azure-servicebus
        metadata:
          queueName: my-queue
          namespace: service-bus-namespace
          messageCount: "5"
        authenticationRef:
            name: azure-servicebus-auth
    
  3. 在 [驗證] 區段中,選取 [新增],為每個 KEDA secretTargetRef 參數建立項目。

預設調整規則

如果您未建立調整規則,系統會對容器應用程式套用預設調整規則。

觸發程序 最小複本 最大複本
HTTP 0 10

重要

若您未啟用輸入,請務必建立縮放規則,或將 minReplicas 設定為 1 或以上。 如果輸入已停用,且您未定義 minReplicas 或自訂縮放規則,則您的容器應用程式會調整為零,而且無法開始備份。

調整行為

調整行為具有下列預設值:

參數
輪詢間隔 30 秒
冷卻期間 300 秒
擴大穩定期間 0 秒
縮小穩定期間 300 秒
擴大步驟 1、4、當前的 100%
縮小步驟 當前的 100%
調整演算法 desiredReplicas = ceil(currentMetricValue / targetMetricValue)
  • 輪詢間隔是 KEDA 查詢事件來源的頻率。 此值不適用於 HTTP 和 TCP 調整規則。
  • 緩和時間是應用程式縮小到其最小複本計數之前,觀察到最後一個事件之後的時間長度。
  • 擴大穩定視窗是在符合擴大條件後,執行擴大決策之前等待的時間長度。
  • 縮小穩定視窗是在符合縮小條件後,執行縮小決策之前等待的時間長度。
  • 擴大步驟是新增執行個體的速率。 其會從 1、4、8、16、32 開始,一直到所設定的最大複本計數。
  • 縮小步驟是移除複本的速率。 依預設,系統會 100% 移除需要關閉的複本。
  • 縮放演算法是用來計算目前所需複本數目的公式。

範例

針對下列縮放規則:

"minReplicas": 0,
"maxReplicas": 20,
"rules": [
  {
    "name": "azure-servicebus-queue-rule",
    "custom": {
      "type": "azure-servicebus",
      "metadata": {
        "queueName": "my-queue",
        "namespace": "service-bus-namespace",
        "messageCount": "5"
      }
    }
  }
]

隨著您的應用程式放大,KEDA 會以空佇列開頭,並執行下列步驟:

  1. 每隔 30 秒檢查一次 my-queue
  2. 如果佇列長度等於 0,請返回 (1)。
  3. 如果佇列長度為 > 0,請將應用程式縮放為 1。
  4. 如果佇列長度為 50,請計算 desiredReplicas = ceil(50/5) = 10
  5. 將應用程式縮放至 min(maxReplicaCount, desiredReplicas, max(4, 2*currentReplicaCount))
  6. 返回 (1)。

如果應用程式已縮放為 20 個複本計數上限,則縮放也會經歷相同的先前步驟。 只有在滿足條件 300 秒 (縮小穩定視窗) 時,才會開始縮小。 佇列長度為 0 之後,KEDA 會等候 300 秒 (冷卻期間),再將應用程式縮放為 0。

考量

  • 在「多個修訂」模式中,新增縮放觸發會為您的應用程式建立新修訂,但是您的舊修訂仍可以使用舊的縮放規則。 使用 [修訂管理] 頁面來管理流量配置。

  • 當應用程式縮放為零時,不會產生任何使用費用。 如需詳細資訊,請參閱 Azure 容器應用程式中的計費

  • 您必須為 Azure 容器應用程式上的所有 .NET 應用程式啟用資料保護作業。 如需詳細資訊,請參閱在 Azure 容器應用程式上部署和縮放 ASP.NET Core 應用程式

已知的限制

  • 不支援垂直縮放比例。

  • 複本數量是目標數量,不是保證。

  • 如果您正在使用 Dapr 執行者管理狀態,請記住,該功能不支援縮放為零。 Dapr 使用虛擬執行者來管理非同步呼叫,這表示其記憶體內部的表示法未繫結至其身分識別或存留期。

下一步