다음을 통해 공유


Azure Container Apps에서 크기 조정 규칙 설정

Azure Container Apps는 일련의 선언적 크기 조정 규칙을 통해 자동 수평 크기 조정을 관리합니다. 컨테이너 앱 수정 버전이 크기 조정되면 수정 버전의 새 인스턴스가 필요에 따라 만들어집니다. 이러한 인스턴스를 복제본이라고 합니다.

크기 조정 규칙을 추가하거나 편집하면 컨테이너 앱의 새 수정 버전이 만들어집니다. 수정 버전은 컨테이너 앱의 변경이 불가능한 스냅샷입니다. 새 수정 버전을 트리거하는 변경 유형을 알아보려면 수정 버전 변경 유형을 참조하세요.

이벤트 기반 Container Apps 작업은 크기 조정 규칙을 사용하여 이벤트를 기반으로 실행을 트리거합니다.

크기 조정 정의

크기 조정은 제한, 규칙 및 동작의 조합으로 정의됩니다.

  • 제한은 컨테이너 앱 스케일링에 따라 수정 버전당 가능한 최소 및 최대 복제본 수를 정의합니다.

    규모 제한 기본값 최소값 최댓값
    수정 버전당 최소 복제본 수 0 0 최대 구성 가능한 복제본은 1,000개입니다.
    수정 버전당 최대 복제본 수 10 1 최대 구성 가능한 복제본은 1,000개입니다.
  • 규칙은 Container Apps에서 복제본을 추가하거나 제거할 시기를 결정하는 데 사용하는 조건입니다.

    크기 조정 규칙은 HTTP, TCP(전송 제어 프로토콜) 또는 사용자 지정으로 구현됩니다.

  • 동작은 시간 경과에 따른 크기 조정 사항을 결정하기 위한 규칙과 제한의 조합입니다.

    크기 조정 동작은 크기 조정을 결정하는 방법을 설명합니다.

크기 조정 규칙을 정의할 때는 다음 항목에 유의하는 것이 중요합니다.

  • 컨테이너 앱이 0으로 조정되면 사용 요금이 청구되지 않습니다.
  • 처리되지 않지만 메모리에 남아 있는 복제본에는 더 낮은 "유휴" 요금이 청구될 수 있습니다. 자세한 내용은 Billing을 참조하세요.
  • 수정 버전 인스턴스가 항상 실행되도록 하려면 최소 복제본 수를 1 이상으로 설정합니다.

스케일링 규칙

조정은 세 가지 트리거 범주로 이루어집니다.

  • HTTP: 수정 버전에 대한 동시 HTTP 요청 수에 기반합니다.
  • TCP: 수정 버전에 대한 동시 TCP 연결 수에 기반합니다.
  • 사용자 지정: CPU, 메모리 또는 지원되는 이벤트 기반 데이터 원본에 기반합니다. 예시는 다음과 같습니다.
    • Azure Service Bus
    • Azure Event Hubs
    • Apache Kafka
    • Redis

둘 이상의 크기 조정 규칙을 정의하는 경우 규칙의 첫 번째 조건이 충족되면 컨테이너 앱이 크기 조정을 시작합니다.

HTTP

HTTP 크기 조정 규칙을 사용하면 컨테이너 앱 수정 버전의 크기 조정 방법을 결정하는 동시 HTTP 요청의 임계값을 제어할 수 있습니다. 15초마다 동시 요청 수는 지난 15초 동안의 요청 수를 15로 나눈 값으로 계산됩니다. Container Apps 작업은 HTTP 크기 조정 규칙을 지원하지 않습니다.

다음 예에서 수정 버전은 최대 5개의 복제본으로 스케일 아웃되고 0으로 스케일 인될 수 있습니다. 크기 조정 속성은 초당 100개의 동시 요청으로 설정됩니다.

예시

http 섹션에서는 HTTP 스케일링 규칙을 정의합니다.

크기 조정 속성 설명 기본값 최소값 최댓값
concurrentRequests HTTP 요청 수가 이 값을 초과하면 다른 복제본이 추가됩니다. 복제본은 maxReplicas 양에 도달할 때까지 풀에 계속 추가됩니다. 10 1 해당 없음
{
  ...
  "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 해당 없음
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 Portal에서 컨테이너 앱으로 이동합니다.

  2. 비율 크기 조정을 선택합니다.

  3. 편집 및 배포를 선택합니다.

  4. 규모 탭을 선택합니다.

  5. 최소 및 최대 복제본 범위를 선택합니다.

    Azure Container Apps 스케일링 범위 슬라이더의 스크린샷

  6. 추가를 선택합니다.

  7. 규칙 이름 상자에 규칙 이름을 입력합니다.

  8. 유형 드롭다운에서 HTTP 스케일링을 선택합니다.

  9. 동시 요청 상자에 컨테이너 앱에 원하는 동시 요청 수를 입력합니다.

TCP

TCP 크기 조정 규칙을 사용하면 앱 크기 조정 방법을 결정하는 동시 TCP 연결의 임계값을 제어할 수 있습니다. 15초마다 동시 연결 수는 지난 15초 동안의 연결 수를 15로 나눈 값으로 계산됩니다. Container Apps 작업은 TCP 크기 조정 규칙을 지원하지 않습니다.

다음 예에서 컨테이너 앱 수정 버전은 최대 5개의 복제본으로 스케일 아웃되고 0으로 스케일 인될 수 있습니다. 크기 조정 임계값은 초당 100개의 동시 연결로 설정됩니다.

예시

tcp 섹션에서는 TCP 스케일링 규칙을 정의합니다.

크기 조정 속성 설명 기본값 최소값 최댓값
concurrentConnections 동시 TCP 연결 수가 이 값을 초과하면 다른 복제본이 추가됩니다. 복제본은 동시 연결 수가 증가함에 따라 최대 maxReplicas개까지 계속 추가됩니다. 10 1 해당 없음
{
  ...
  "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 해당 없음
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에서는 지원되지 않습니다. Azure CLI 또는 Azure Resource Manager를 사용하여 TCP 스케일링 규칙을 구성합니다.

사용자 지정

다음 기본값을 사용하여 ScaledObject 기반 KEDA 스케일러를 바탕으로 사용자 지정 Container Apps 스케일링 규칙을 만들 수 있습니다.

Defaults
폴링 간격 30
휴지 기간 300

이벤트 기반 Container Apps 작업의 경우 ScaledJob 기반 KEDA 스칼라를 기반으로 사용자 지정 크기 조정 규칙을 만들 수 있습니다.

다음 예제에서는 사용자 지정 스케일링 규칙을 만드는 방법을 보여줍니다.

예시

이 예제에서는 Azure Service Bus 스케일러를 Container Apps 스케일링 규칙으로 변환하는 방법을 보여 주지만, 다른 ScaledObject 기반 KEDA 스케일러 사양에 대해서도 동일한 프로세스를 사용하게 됩니다.

인증을 위해 KEDA 배율 조정기 인증 매개 변수는 Container Apps 비밀 또는 관리 ID를 사용합니다.

다음 절차에서는 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 템플릿에 어떻게 맞는지에 대한 컨텍스트는 이 발췌를 참조하세요.

먼저 크기 조정 규칙의 유형과 메타데이터를 정의합니다.

  1. KEDA 스케일러 사양에서 type 값을 찾습니다.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. ARM 템플릿에서 스케일링 규칙의 custom.type 속성에 스케일러 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"
          }
        }
      }
    ]
    ...
    

인증

Container Apps 크기 조정 규칙은 비밀 기반 인증을 지원합니다. Azure Queue Storage, Azure Service Bus, Azure Event Hubs를 비롯한 Azure 리소스에 대한 크기 조정 규칙도 관리 ID를 지원합니다. 가능하다면 관리 ID 인증을 사용하여 앱 내에 비밀이 저장되지 않도록 합니다.

비밀 사용

인증에 비밀을 사용하려면 컨테이너 앱의 secrets 배열에 비밀을 만들어야 합니다. 비밀 값은 크기 조정 규칙의 auth 배열에서 사용됩니다.

KEDA 배율 조정기는 authenticationRef 속성에서 참조하는 TriggerAuthentication에서 비밀을 사용할 수 있습니다. TriggerAuthentication 개체를 Container Apps 스케일링 규칙에 매핑할 수 있습니다.

  1. KEDA ScaledObject 사양에서 TriggerAuthentication을 참조하는 개체를 찾습니다.

  2. 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 템플릿에서 각 비밀에 대해 다음을 수행합니다.

    1. 비밀 이름과 값을 포함하는 컨테이너 앱의 secrets 배열에 비밀을 추가합니다.

    2. 크기 조정 규칙의 auth 배열에 항목을 추가합니다.

      1. triggerParameter 속성의 값을 secretTargetRefparameter 속성 값으로 설정합니다.

      2. secretRef 속성의 값을 secretTargetRefkey 속성 이름으로 설정합니다.

    {
      ...
      "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 템플릿에 나와 있는 첫 번째 컨테이너를 확인합니다.

    보안 관련 자세한 내용은 고려 사항 섹션을 참조하세요.

관리 ID 사용

Container Apps 크기 조정 규칙은 관리 ID를 사용하여 Azure 서비스를 인증할 수 있습니다. 다음 ARM 템플릿은 Azure Queue Scaler를 인증하기 위해 시스템 기반 관리 ID를 전달합니다.

"scale": {
  "minReplicas": 0,
  "maxReplicas": 4,
  "rules": [
    {
      "name": "azure-queue",
      "custom": {
        "type": "azure-queue",
        "metadata": {
          "accountName": "apptest123",
          "queueName": "queue1",
          "queueLength": "1"
        },
        "identity": "system"
      }
    }
  ]
}

크기 조정 규칙과 함께 관리 ID를 사용하는 방법에 대해 자세히 알아보려면 관리 ID를 참조하세요.

  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"
    

인증

Container Apps 크기 조정 규칙은 비밀 기반 인증을 지원합니다. Azure Queue Storage, Azure Service Bus, Azure Event Hubs를 비롯한 Azure 리소스에 대한 크기 조정 규칙도 관리 ID를 지원합니다. 가능하다면 관리 ID 인증을 사용하여 앱 내에 비밀이 저장되지 않도록 합니다.

비밀 사용

Container Apps 크기 조정 규칙에 대한 비밀 기반 인증을 구성하려면 컨테이너 앱에서 비밀을 구성하고 크기 조정 규칙에서 이를 참조합니다.

KEDA 배율 조정기는 authenticationRef 속성이 참조로 사용하는 TriggerAuthentication에서 비밀을 지원합니다. TriggerAuthentication 개체를 Container Apps 크기 조정 규칙에 매핑할 수 있습니다.

  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"
    

관리 ID 사용

Container Apps 크기 조정 규칙은 관리 ID를 사용하여 Azure 서비스를 인증할 수 있습니다. 다음 명령은 사용자가 할당한 관리 ID로 컨테이너 앱을 만들고 이를 사용하여 Azure Queue Scaler를 인증합니다.

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>

자리 표시자를 해당 값으로 바꿉니다.

  1. Azure Portal에서 컨테이너 앱으로 이동합니다.

  2. 비율 크기 조정을 선택합니다.

  3. 편집 및 배포를 선택합니다.

  4. 크기 조정 및 복제본 탭을 선택합니다.

  5. 최소 및 최대 복제본 범위를 선택합니다.

    Azure Container Apps 스케일링 범위 슬라이더의 스크린샷

  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 사양 메타데이터 섹션에서 각 항목의 이름과 값을 입력합니다.

인증

Container Apps 크기 조정 규칙은 비밀 기반 인증을 지원합니다. Azure Queue Storage, Azure Service Bus, Azure Event Hubs를 비롯한 Azure 리소스에 대한 크기 조정 규칙도 관리 ID를 지원합니다. 가능하다면 관리 ID 인증을 사용하여 앱 내에 비밀이 저장되지 않도록 합니다.

비밀 사용

  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 매개 변수의 항목을 만듭니다.

관리 ID 사용

Azure Portal에서는 관리 ID 인증이 지원되지 않습니다. Azure CLI 또는 Azure Resource Manager를 사용하여 관리 ID를 사용하여 인증합니다.

기본 크기 조정 규칙

크기 조정 규칙을 만들지 않으면 기본 크기 조정 규칙이 컨테이너 앱에 적용됩니다.

트리거 최소 복제본 최대 복제본 수
HTTP 0 10

Important

수신을 사용하도록 설정하지 않는 경우 스케일링 규칙을 만들거나 minReplicas를 1 이상으로 설정해야 합니다. 수신을 사용하지 않도록 설정했으며 minReplicas 또는 사용자 지정 스케일링 규칙을 정의하지 않는 경우 컨테이너 앱이 0으로 스케일링되며 백업을 시작할 수 없습니다.

크기 조정 동작

크기 조정 동작의 기본값은 다음과 같습니다.

매개 변수
폴링 간격 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으로 조정합니다.

고려 사항

  • "다중 수정 버전" 모드에서 새 크기 조정 트리거를 추가하면 애플리케이션의 새 수정 버전이 만들어지지만 이전 수정 버전은 이전 크기 조정 규칙과 함께 계속 사용할 수 있습니다. 수정 버전 관리 페이지를 사용하여 트래픽 할당을 관리합니다.

  • 애플리케이션이 0으로 크기 조정되면 비용이 발생하지 않습니다. 자세한 가격 책정 정보는 Azure Container Apps의 청구를 참조하세요.

  • Azure Container Apps의 모든 .NET 앱에 대해 데이터 보호를 사용하도록 설정해야 합니다. 자세한 내용은 Azure Container Apps에서 ASP.NET Core 앱 배포 및 크기 조정을 참조하세요.

알려진 제한 사항

  • 수직 크기 조정은 지원되지 않습니다.

  • 복제본 수량은 대상 금액이며 보증이 아닙니다.

  • Dapr 작업자를 사용하여 상태를 관리하는 경우 0으로 크기 조정하는 것은 지원되지 않는다는 점에 유의해야 합니다. Dapr은 가상 작업자를 사용하여 비동기식 호출을 관리합니다. 즉, 메모리 내 표현이 ID나 수명에 연결되지 않음을 의미합니다.

다음 단계