Azure Container Apps 透過一組宣告式擴展規則來管理自動水平縮放。 當容器應用程式版本擴增時,系統會視需要為版本建立新的實例。 這些實例稱為複本。
為了支援這種擴展行為,Azure Container Apps 採用 KEDA(Kubernetes Event-driven Autoscaling)技術。 KEDA 支援針對多種指標進行縮放,如 HTTP 請求、佇列訊息、CPU 與記憶體負載,以及事件來源如 Azure Service Bus、Azure Event Hubs、Apache Kafka 和 Redis。 如需詳細資訊,請參閱 KEDA 文件中的 Scalers。
新增或編輯調整規則會建立容器應用程式的新修訂版本。 修訂版是容器應用程式的不可變快照。 若要了解哪些類型的變更會觸發新的修訂,請參閱修訂 變更類型。
事件驅動容器應用程式工作會使用縮放規則來根據事件觸發執行。
尺度定義
縮放是限制、規則和行為的組合。
限制定義容器應用程式調整時每個修訂的最小和最大可能複本數目。
規模限制 預設值 最小值 最大值 每個修訂的複本數目下限 0 0 可設定的複本上限為 1,000。 每個修訂的最大複本數目 10 1 可設定的複本上限為 1,000。 規則是 Azure 容器應用程式用來決定何時新增或移除複本的準則。
縮放規則 實作為 HTTP、TCP (傳輸控制通訊協定) 或自訂。
行為是規則和限制的組合,用於決定一段時間內的範圍決策。
縮放行為說明如何計算縮放決策。
當您定義縮放規則時,請務必考慮下列項目:
- 如果容器應用程式調整為零,則不會向您收取使用量費用。
- 未處理但保留在記憶體中的複本可能會以較低的「閒置」費率計費。 如需詳細資訊,請參閱帳單。
- 如果您想要確保修訂版本的實例持續運行,請將複本的最小數目設定為 1 或更高的值。
- 在平台升級或維護期間,你可能會暫時看到比預期更多的複本。 容器應用程式確保你的生產工作負載不會因為在轉移流量前預熱新副本而受到影響,這點類似 Kubernetes 預設的行為。 多餘的複本會在操作完成後自動移除。
尺度規則
三種觸發程序類別會決定調整的發生方式:
- HTTP:根據您修訂的並行 HTTP 要求數量。
- TCP:根據連線到您修訂的並行 TCP 連線數量。
-
自訂:根據自訂計量,例如:
- CPU
- 記憶體
- 支援的事件驅動資料來源:
- Azure Service Bus
- Azure Event Hubs
- Apache Kafka
- Redis
如果您定義多個調整規則,容器應用程式會在符合任何規則的第一個條件後立刻開始調整。
附註
如果您使用容器應用程式上的 Azure Functions,則系統會根據函式觸發程序和繫結自動設定調整規則。 因此,Azure portal 中的「新增縮放規則」按鈕將被這些應用程式停用。 在此場景中,不需要也不支援手動設定比例尺規則。
HTTP
使用 HTTP 調整規則時,您可以控制並行 HTTP 要求的閾值,此閾值會決定容器應用程式修訂的調整方式。 每 15 秒,系統會將過去 15 秒的要求數目除以 15,得出的結果就是並行要求的數量。 Azure 容器應用程式作業不支援 HTTP 縮放規則。
在下列範例中,修訂會擴增至五個複本,而且可以縮減為零。 可擴展屬性設定為每秒 100 個並發請求。
範例
http 區段會定義 HTTP 縮放規則。
| 縮放屬性 | 描述 | 預設值 | 最小值 | 最大值 |
|---|---|---|---|---|
concurrentRequests |
當 HTTP 要求的數目超過此值時,便會新增另一個複本。 複本會繼續新增至集區,數量最多可達 maxReplicas。 |
10 | 1 | n/a |
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
...
properties: {
...
template: {
...
scale: {
maxReplicas: 0
minReplicas: 5
rules: [
{
name: 'http-rule'
http: {
metadata: {
concurrentRequests: '100'
}
}
}
]
}
}
}
}
附註
使用非 HTTP 事件縮放規則時,請將容器應用程式的 properties.configuration.activeRevisionsMode 屬性設定為 single。
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。
在 --scale-rule-http-concurrency 或 create 指令中,使用 update 參數來定義 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,得出的結果就是並行連線的數量。 容器應用程式作業不支援 TCP 縮放規則。
在下列範例中,容器應用程式修訂會擴增至五個複本,而且可以縮減為零。 調整閾值會設定為每秒 100 個並行連線。
範例
tcp 段落定義了一個 TCP 擴展規則。
| 縮放屬性 | 描述 | 預設值 | 最小值 | 最大值 |
|---|---|---|---|---|
concurrentConnections |
當並行 TCP 連線數目超過此值時,系統便會再新增一個複本。 隨著並行連線數目的增加,複本數會持續新增至最多 maxReplicas 的數量。 |
10 | 1 | n/a |
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
...
properties: {
...
template: {
...
scale: {
maxReplicas: 0
minReplicas: 5
rules: [
{
name: 'tcp-rule'
http: {
metadata: {
concurrentConnections: '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"
}
}
}]
}
}
}
}
}
在 --scale-rule-tcp-concurrency 或 create 指令中,使用 update 參數來定義 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 portal 不支援。 使用
自訂
您可以根據任何基於 ScaledObject 的 KEDA 縮放器,使用下列預設值來建立自訂容器應用程式縮放規則:
| 預設值 | 秒 |
|---|---|
| 輪詢間隔 | 30 |
| 冷卻期間 | 300 |
附註
冷卻期間只有在從最終複本縮減到 0 時才會生效。 冷卻期間不會影響擴充,因為已移除任何其他複本。
針對 事件驅動容器應用程式作業,您可以基於任何 ScaledJob 型 KEDA 調節器來建立自訂縮放規則。
以下範例將示範建立自訂縮放規則的方式。
範例
這個範例展示了如何將 Azure Service Bus 縮放器轉換成容器應用程式的縮放規則,但你對其他基於 ScaledObject 的 KEDA 縮放器規範,使用相同的流程。
若要進行驗證,KEDA 調整程式驗證參數會採用容器應用程式祕密或受控識別。
以下程序示範如何將 KEDA 縮放器轉換成容器應用程式的縮放規則。 此代碼段是 Bicep 範本的摘錄,可說明每個區段在整體範本內容中的位置。
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
...
properties: {
...
configuration: {
...
secrets: [
{
name: '<NAME>'
value: '<VALUE>'
}
]
}
template: {
...
scale: {
maxReplicas: 0
minReplicas: 5
rules: [
{
name: '<RULE_NAME>'
custom: {
metadata: {
...
}
auth: [
{
secretRef: '<NAME>'
triggerParameter: '<PARAMETER>'
}
]
}
}
]
}
}
}
}
如需瞭解下列範例在 Bicep 範本中如何應用,請參閱此摘錄。
首先,您要定義尺度規則的類型和元資料。
從 KEDA 縮放工具規格中尋找
type值。triggers: - type: azure-servicebus ⬅️ metadata: queueName: my-queue namespace: service-bus-namespace messageCount: "5"在 Bicep 範本中,將調整器
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" ⬅️在 Bicep 範本中,將所有元數據值新增至
custom.metadata縮放規則的區段。... rules: [ { name: 'azure-servicebus-queue-rule' custom: { type: 'azure-servicebus' metadata: { queueName: 'my-queue' ⬅️ namespace: 'service-bus-namespace' ⬅️ messageCount: '5' ⬅️ } } } ] ...
驗證
容器應用程式調整規則支援祕密型驗證。 Azure 資源的 Scale 規則,包括 Azure Queue Storage、Azure Service Bus 和 Azure Event Hubs,也支援管理身份。 可能的話,請使用受控識別驗證來避免將祕密儲存在應用程式內。
使用祕密
若要使用祕密進行驗證,您必須在容器應用程式的 secrets 陣列中建立祕密。 祕密值用於刻度規則的 auth 陣列中。
KEDA 調整程式可以在 TriggerAuthentication 中使用 authenticationRef 屬性所參考的密鑰。 您可以將 TriggerAuthentication 物件對應至容器應用程式的縮放規則。
尋找 KEDA
TriggerAuthentication規格所參考的ScaledObject物件。在
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在 Bicep 範本中,針對每個祕密:
將祕密新增至容器應用程式中包含祕密名稱和值的
secrets陣列。將項目新增至調整規則的
auth陣列。將
triggerParameter屬性值設定為secretTargetRef之parameter屬性的值。將
secretRef屬性的值設定為secretTargetRef的key屬性名稱。resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = { ... properties: { ... configuration: { ... secrets: [ { ⬅️ name: 'connection-string-secret' ⬅️ value: '<SERVICE_BUS_CONNECTION_STRING>' ⬅️ } ⬅️ ] } template: { ... scale: { maxReplicas: 0 minReplicas: 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尾碼的中繼資料,以參考環境變數中的值。 Container Apps 會查看 ARM 範本中針對環境變數列出的第一個容器。如需更多安全性相關資訊,請參閱考量一節。
使用受控識別
容器應用程式的擴展規則可以使用受管理身份來與 Azure 服務進行認證。 以下 Bicep 範本在系統型受控身分識別中通過以對 Azure Queue 縮放器以進行驗證。
在使用下列程式碼之前,請將以 <> 括起來的預留位置取代為您的值。
scale: {
minReplicas: 0
maxReplicas: 4
rules: [
{
name: 'azure-queue'
custom: {
type: 'azure-queue'
metadata: {
accountName: '<ACCOUNT_NAME>'
queueName: '<QUEUE_NAME>'
queueLength: '1'
},
identity: 'system'
}
}
]
}
若要深入了解如何搭配調整規則使用受控識別,請參閱受控識別。
以下程序示範如何將 KEDA 縮放器轉換成容器應用程式的縮放規則。 此程式碼片段是 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" ⬅️ } } } ] ...
驗證
容器應用程式調整規則支援祕密型驗證。 Azure 資源的 Scale 規則,包括 Azure Queue Storage、Azure Service Bus 和 Azure Event Hubs,也支援管理身份。 可能的話,請使用受控識別驗證來避免將祕密儲存在應用程式內。
使用祕密
若要使用祕密進行驗證,您必須在容器應用程式的 secrets 陣列中建立祕密。 祕密值用於刻度規則的 auth 陣列中。
KEDA 調整程式可以在 TriggerAuthentication 中使用 authenticationRef 屬性所參考的密鑰。 您可以將 TriggerAuthentication 物件對應至容器應用程式的縮放規則。
尋找 KEDA
TriggerAuthentication規格所參考的ScaledObject物件。在
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 範本中,針對每個祕密:
將祕密新增至容器應用程式中包含祕密名稱和值的
secrets陣列。將項目新增至調整規則的
auth陣列。將
triggerParameter屬性值設定為secretTargetRef之parameter屬性的值。將
secretRef屬性的值設定為secretTargetRef的key屬性名稱。
{ ... "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尾碼的中繼資料,以參考環境變數中的值。 Container Apps 會查看 ARM 範本中針對環境變數列出的第一個容器。如需更多安全性相關資訊,請參閱考量一節。
使用受控識別
容器應用程式的擴展規則可以使用受管理身份來與 Azure 服務進行認證。 以下 ARM 範本將系統基礎的管理身份傳遞給 Azure Queue 擴展器進行認證。
在使用下列程式碼之前,請將以 <> 括起來的預留位置取代為您的值。
"scale": {
"minReplicas": 0,
"maxReplicas": 4,
"rules": [
{
"name": "azure-queue",
"custom": {
"type": "azure-queue",
"metadata": {
"accountName": "<ACCOUNT_NAME>",
"queueName": "<QUEUE_NAME>",
"queueLength": "1"
},
"identity": "system"
}
}
]
}
若要深入了解如何搭配調整規則使用受控識別,請參閱受控識別。
從 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"
驗證
容器應用程式調整規則支援祕密型驗證。 Azure 資源的 Scale 規則,包括 Azure Queue Storage、Azure Service Bus 和 Azure Event Hubs,也支援管理身份。 可能的話,請使用受控識別驗證來避免將祕密儲存在應用程式內。
使用祕密
若要設定容器應用程式調整規則的祕密型驗證,您可以在容器應用程式中設定祕密,並在調整規則中參考祕密。
KEDA 調整程式支援 TriggerAuthentication 中 authenticationRef 屬性用於參考的祕密。 您可以將 TriggerAuthentication 物件對應到 Container Apps 的縮放規則。
尋找 KEDA
TriggerAuthentication規格所參考的ScaledObject物件。 識別secretTargetRef物件的每個TriggerAuthentication。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在 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 服務進行認證。 以下指令建立一個容器應用程式,並使用使用者指派的管理身份來驗證 Azure Queue 擴展器。
在使用下列程式碼之前,請將以 <> 括起來的預留位置取代為您的值。
az containerapp create \
--resource-group <RESOURCE_GROUP> \
--name <APP_NAME> \
--environment <ENVIRONMENT_ID> \
--user-assigned <USER_ASSIGNED_IDENTITY_ID> \
--scale-rule-name azure-queue \
--scale-rule-type azure-queue \
--scale-rule-metadata "accountName=<AZURE_STORAGE_ACCOUNT_NAME>" "queueName=queue1" "queueLength=1" \
--scale-rule-identity <USER_ASSIGNED_IDENTITY_ID>
在 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規格中繼資料區段中,輸入每個項目的名稱和值。
驗證
容器應用程式調整規則支援祕密型驗證。 Azure 資源的 Scale 規則,包括 Azure Queue Storage、Azure Service Bus 和 Azure Event Hubs,也支援管理身份。 可能的話,請使用受控識別驗證來避免將祕密儲存在應用程式內。
使用祕密
在容器應用程式中,建立您要參考的秘密。
尋找 KEDA
TriggerAuthentication規格所參考的ScaledObject物件。 識別secretTargetRef物件的每個TriggerAuthentication。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參數建立項目。
使用受控識別
Azure portal 不支援管理身份驗證。 使用
預設縮放規則
如果您未建立調整規則,系統會對容器應用程式套用預設調整規則。
| 觸發程序 | 最小複本 | 最大複本 |
|---|---|---|
| HTTP | 0 | 10 |
重要
若您未啟用輸入,請務必建立縮放規則,或將 minReplicas 設定為 1 或以上。 如果輸入已停用,且您未定義 minReplicas 或自訂縮放規則,則容器應用程式會調整為零,且無法開始備份。
調整行為
縮放具有下列特性:
| 行為 | 價值 |
|---|---|
| 輪詢間隔 | 30 秒 |
| 冷卻期間 | 300 秒 |
| 擴大穩定期間 | 0 秒 |
| 縮小穩定期間 | 300 秒 |
| 擴大步驟 | 1, 4, 8, 16, 32, ...直至設定的最大副本數 |
| 縮小步驟 | 需要關閉的 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 Container Apps計費。
你需要在 Azure Container Apps 上啟用所有 .NET 應用程式的資料保護。 詳情請參見 在 Azure Container Apps 上部署與擴展 ASP.NET Core 應用程式。
已知的限制
不支援垂直縮放。
複本數量是目標數量,不是保證。
如果您正在使用 Dapr actors 來管理狀態,請記住,該功能不支援縮減至零。 Dapr 使用虛擬演員來管理非同步呼叫,這表示其在記憶體中的表示不會與其身分或存活時間綁定。
不支援透過 Proxy 設定變更 KEDA Proxy。 請考慮使用工作負載設定搭配 NAT 閘道或使用者定義路由(UDR),將流量傳送至網路裝置,以便在那裡檢查流量或進行代理。