請在 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
。
在 create
或 update
命令中使用 --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
在 Azure 入口網站中,移至您的容器應用程式
選取 [級別]。
選取 [編輯並部署]。
選取 [調整] 索引標籤。
選取最小和最大複本範圍。
選取 [新增]。
在 [規則名稱] 方塊中,輸入規則的名稱。
從 [類型] 下拉式清單中,選取 [HTTP 縮放]。
在 [並行要求] 方塊中,輸入容器應用程式所需的並行要求數量。
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"
}
}
}]
}
}
}
}
}
在 create
或 update
命令中使用 --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 CLI 或 Azure Resource Manager 來設定 TCP 縮放規則。
自訂
您可以使用下列預設值,根據任何 ScaledObject 型 KEDA 縮放工具來建立自訂 Azure 容器應用程式縮放規則:
Defaults | 秒 |
---|---|
輪詢間隔 | 30 |
冷卻期間 | 300 |
針對 事件驅動 Azure 容器應用程式作業,您可以根據任何 ScaledJob 型 KEDA 縮放工具來建立自訂縮放規則。
以下範例將示範建立自訂縮放規則的方式。
範例
此範例示範如何將 Azure 服務匯流排調整工具轉換成 Azure 容器應用程式縮放規則,但您也可以針對 ScaledObject 型 KEDA 縮放工具規格使用相同的流程。
針對驗證,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 範本中如何配合的相關內容,請參閱此摘錄。
首先,您要定義縮放規則的類型和中繼資料。
從 KEDA 縮放工具規格中尋找
type
值。triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"
在 ARM 範本中,將縮放工具
type
值輸入縮放規則的custom.type
屬性。... "rules": [ { "name": "azure-servicebus-queue-rule", "custom": { "type": "azure-servicebus", "metadata": { "queueName": "my-queue", "namespace": "service-bus-namespace", "messageCount": "5" } } } ] ...
從 KEDA 縮放工具規格中尋找
metadata
值。triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"
在 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 身分識別。
尋找 KEDA
ScaledObject
規格所參考的TriggerAuthentication
物件。從 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
在 ARM 範本中,將所有項目新增至縮放規則的
auth
陣列。將秘密新增至容器應用程式中包含秘密值的
secrets
陣列。將
triggerParameter
屬性值設定為TriggerAuthentication
之key
屬性的值。將
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 範本中針對環境變數列出的第一個容器。如需更多安全性相關資訊,請參閱考量一節。
從 KEDA 縮放工具規格中尋找
type
值。triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"
在 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"
從 KEDA 縮放工具規格中尋找
metadata
值。triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"
在 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 身分識別。
尋找 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
在您的容器應用程式中,建立符合
secretTargetRef
屬性的秘密。在 CLI 命令中,為每個
secretTargetRef
項目設定參數。使用
--secrets
參數建立秘密項目。 如果有多個秘密,請使用空格分隔。使用
--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"
在 Azure 入口網站中,移至您的容器應用程式。
選取 [級別]。
選取 [編輯並部署]。
選取 [縮放和複本] 索引標籤。
選取最小和最大複本範圍。
選取 [新增]。
在 [規則名稱] 方塊中,輸入規則的名稱。
在 [類型] 下拉式清單中,選取 [自訂]。
從 KEDA 縮放工具規格中尋找
type
值。triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"
在 [自訂規則類型] 方塊中,輸入縮放工具
type
值。從 KEDA 縮放工具規格中尋找
metadata
值。triggers: - type: azure-servicebus metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"
在入口網站中,尋找 [中繼資料] 區段,然後選取 [新增]。 在 KEDA
ScaledObject
規格中繼資料區段中,輸入每個項目的名稱和值。
驗證
KEDA 調整工具可支援在 TriggerAuthentication 中使用 authenticationRef 屬性所參考的秘密。 您可以將 TriggerAuthentication 物件對應至 Azure 容器應用程式縮放規則。
注意
Azure 容器應用程式縮放規則僅支援秘密參考, 不支援其他驗證類型,例如 Pod 身分識別。
在您的容器應用程式中,建立您要參考的秘密。
尋找 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
在 [驗證] 區段中,選取 [新增],為每個 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 會以空佇列開頭,並執行下列步驟:
- 每隔 30 秒檢查一次
my-queue
。 - 如果佇列長度等於 0,請返回 (1)。
- 如果佇列長度為 > 0,請將應用程式縮放為 1。
- 如果佇列長度為 50,請計算
desiredReplicas = ceil(50/5) = 10
。 - 將應用程式縮放至
min(maxReplicaCount, desiredReplicas, max(4, 2*currentReplicaCount))
- 返回 (1)。
如果應用程式已縮放為 20 個複本計數上限,則縮放也會經歷相同的先前步驟。 只有在滿足條件 300 秒 (縮小穩定視窗) 時,才會開始縮小。 佇列長度為 0 之後,KEDA 會等候 300 秒 (冷卻期間),再將應用程式縮放為 0。
考量
在「多個修訂」模式中,新增縮放觸發會為您的應用程式建立新修訂,但是您的舊修訂仍可以使用舊的縮放規則。 使用 [修訂管理] 頁面來管理流量配置。
當應用程式縮放為零時,不會產生任何使用費用。 如需詳細資訊,請參閱 Azure 容器應用程式中的計費。
您必須為 Azure 容器應用程式上的所有 .NET 應用程式啟用資料保護作業。 如需詳細資訊,請參閱在 Azure 容器應用程式上部署和縮放 ASP.NET Core 應用程式。
已知的限制
不支援垂直縮放比例。
複本數量是目標數量,不是保證。
如果您正在使用 Dapr 執行者管理狀態,請記住,該功能不支援縮放為零。 Dapr 使用虛擬執行者來管理非同步呼叫,這表示其記憶體內部的表示法未繫結至其身分識別或存留期。
下一步
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應