Mengatur aturan penskalakan di Azure Container Apps

Azure Container Apps mengelola penskalaan horizontal otomatis melalui serangkaian aturan penskalaan deklaratif. Saat revisi aplikasi kontainer diskalakan ke luar, platform membuat instans baru dari revisi tersebut sesuai kebutuhan. Instans ini dikenal sebagai replika.

Untuk mendukung perilaku penskalakan ini, Azure Container Apps menggunakan KEDA (Autoscaling berbasis Peristiwa Kubernetes). KEDA mendukung penskalaan terhadap berbagai metrik seperti permintaan HTTP, pesan antrean, beban CPU dan memori, dan sumber peristiwa seperti Azure Service Bus, Azure Event Hubs, Apache Kafka, dan Redis. Untuk informasi selengkapnya, lihat Scaler dalam dokumentasi KEDA.

Saat menambahkan atau mengedit aturan penskalaan, Anda membuat revisi baru aplikasi kontainer Anda. Revisi adalah rekam jepret yang tidak dapat diubah dari aplikasi kontainer Anda. Untuk mempelajari jenis perubahan mana yang memicu revisi baru, lihat jenis perubahan revisi.

Pekerjaan Container Apps berbasis peristiwa menggunakan aturan penskalaan untuk memicu eksekusi berdasarkan peristiwa.

Definisi skala

Penskalaan adalah kombinasi batas, aturan, dan perilaku.

  • Batas menentukan jumlah replika minimum dan maksimum yang mungkin per revisi saat aplikasi kontainer Anda diskalakan.

    Batas skala Nilai default Nilai minimum Nilai maks
    Jumlah minimum replika per revisi 0 0 Replika maksimum yang dapat dikonfigurasi adalah 1.000.
    Jumlah maksimum replika per revisi 10 1 Replika maksimum yang dapat dikonfigurasi adalah 1.000.
  • Aturan adalah kriteria yang digunakan oleh Container Apps untuk memutuskan kapan harus menambahkan atau menghapus replika.

    Aturan skala diimplementasikan sebagai HTTP, TCP (Protokol Kontrol Transmisi), atau kustom.

  • Perilaku adalah kombinasi aturan dan batasan untuk menentukan keputusan skala dari waktu ke waktu.

    Perilaku skala menjelaskan bagaimana keputusan skala dibuat.

Saat Anda menentukan aturan penskalakan, pertimbangkan item berikut:

  • Anda tidak ditagih biaya penggunaan jika aplikasi kontainer Anda diskalakan ke nol.
  • Replika yang tidak sedang memproses apa pun tetapi tetap berada di memori mungkin dikenai tarif "idle" yang lebih rendah. Untuk mengetahui informasi lebih lanjut, lihat Penagihan.
  • Jika Anda ingin memastikan bahwa instans revisi Anda selalu berjalan, atur jumlah minimum replika ke 1 atau lebih tinggi.
  • Selama peningkatan atau pemeliharaan platform, Anda mungkin untuk sementara melihat lebih banyak replika dari yang diharapkan. Container Apps memastikan beban kerja produksi Anda tidak terpengaruh oleh pemanasan awal replika baru sebelum pergeseran lalu lintas, mirip dengan perilaku default pada Kubernetes. Replika tambahan dihapus secara otomatis setelah operasi selesai.

Aturan skala

Tiga kategori pemicu menentukan bagaimana penskalaan terjadi:

  • HTTP: Berdasarkan jumlah permintaan HTTP bersamaan terhadap revisi Anda.
  • TCP: Berdasarkan jumlah koneksi TCP bersamaan ke revisi Anda.
  • Kustom: Berdasarkan metrik kustom seperti:
    • CPU
    • Ingatan
    • Sumber data berbasis peristiwa yang didukung:
      • Azure Service Bus
      • Azure Event Hubs
      • Apache Kafka
      • Redis

Jika Anda menentukan lebih dari satu aturan skala, aplikasi kontainer mulai menskalakan setelah kondisi pertama aturan apa pun terpenuhi.

Catatan

Jika Anda menggunakan Functions di Container Apps, pengalaman default secara otomatis mengonfigurasi aturan skala berdasarkan pemicu dan pengikatan fungsi. Portal Azure menonaktifkan tombol Tambahkan aturan skala untuk aplikasi ini. Jika Anda memerlukan aturan yang ditentukan pengguna, gunakan allowScalingRuleOverride seperti yang dijelaskan di Override aturan skala KEDA yang dibuat secara otomatis untuk Azure Functions di Container Apps.

HTTP

Saat Anda menggunakan aturan penskalaan HTTP, Anda mengontrol ambang permintaan HTTP bersamaan yang menentukan bagaimana revisi aplikasi kontainer Anda diskalakan. Setiap 15 detik, jumlah permintaan bersamaan dihitung sebagai jumlah permintaan dalam 15 detik terakhir dibagi 15. Job Container Apps tidak mendukung aturan penskalaan HTTP.

Dalam contoh berikut, revisi meningkatkan skala hingga lima replika dan dapat diturunkan menjadi nol. Properti penskalaan diatur ke 100 permintaan bersamaan per detik.

Contoh

Bagian ini menentukan aturan skala HTTP http.

Properti skala Deskripsi Nilai default Nilai minimum Nilai maks
concurrentRequests Ketika jumlah permintaan HTTP melebihi nilai ini, aplikasi menambahkan replika lain. Aplikasi terus menambahkan replika hingga mencapai jumlah 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'
              }
            }
          }
        ]
      }
    }
  }
}

Catatan

Atur properties.configuration.activeRevisionsMode properti aplikasi kontainer ke single saat menggunakan aturan skala peristiwa non-HTTP.

Bagian ini menentukan aturan skala HTTP http.

Properti skala Deskripsi Nilai default Nilai minimum Nilai maks
concurrentRequests Ketika jumlah permintaan HTTP melebihi nilai ini, aplikasi menambahkan replika lain. Aplikasi terus menambahkan replika hingga jumlah maxReplicas. 10 1 N/a
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "http-rule",
            "http": {
              "metadata": {
                "concurrentRequests": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Catatan

Atur properties.configuration.activeRevisionsMode properti aplikasi kontainer ke single saat menggunakan aturan skala peristiwa non-HTTP.

Tentukan aturan skala HTTP dengan menggunakan --scale-rule-http-concurrency parameter dalam create perintah atau update .

Parameter dari CLI Deskripsi Nilai default Nilai minimum Nilai maks
--scale-rule-http-concurrency Ketika jumlah permintaan HTTP bersamaan melebihi nilai ini, aplikasi menambahkan replika lain. Aplikasi terus menambahkan replika hingga mencapai jumlah 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. Buka aplikasi kontainer Anda di Azure portal.

  2. Pilih Skala.

  3. Pilih Edit dan sebarkan.

  4. Pilih tab Skala .

  5. Pilih rentang replika minimum dan maksimum.

    Tangkapan layar rentang skala Azure Container Apps penggeser.

  6. Pilih Tambahkan.

  7. Dalam kotak Nama aturan, masukkan nama aturan.

  8. Dari dropdown Jenis, pilih Penskalakan HTTP.

  9. Dalam kotak Permintaan bersamaan , masukkan jumlah permintaan bersamaan yang Anda inginkan untuk aplikasi kontainer Anda.

PKT

Saat menggunakan aturan penskalaan TCP, Anda mengontrol ambang koneksi TCP bersamaan yang menentukan bagaimana aplikasi Anda diskalakan. Setiap 15 detik, sistem menghitung jumlah koneksi bersamaan sebagai jumlah koneksi dalam 15 detik terakhir dibagi 15. Pekerjaan Container Apps tidak mendukung aturan penskalaan TCP.

Dalam contoh berikut, revisi aplikasi kontainer menskalakan ke sebanyak lima replika dan dapat menskalakan ke nol. Ambang penskalaan diatur ke 100 koneksi bersamaan per detik.

Contoh

Bagian tcp ini menentukan aturan skala TCP.

Properti skala Deskripsi Nilai default Nilai minimum Nilai maks
concurrentConnections Ketika jumlah koneksi TCP bersamaan melebihi nilai ini, sistem menambahkan replika lain. Sistem terus menambahkan replika hingga jumlah maxReplicas seiring meningkatnya jumlah koneksi simultan. 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'
              }
            }
          }
        ]
      }
    }
  }
}

Bagian tcp ini menentukan aturan skala TCP.

Properti skala Deskripsi Nilai default Nilai minimum Nilai maks
concurrentConnections Ketika jumlah koneksi TCP bersamaan melebihi nilai ini, sistem menambahkan replika lain. Sistem terus menambahkan replika hingga mencapai jumlah maxReplicas seiring meningkatnya jumlah koneksi serentak. 10 1 N/a
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "tcp-rule",
            "tcp": {
              "metadata": {
                "concurrentConnections": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Tentukan aturan skala TCP dengan menggunakan --scale-rule-tcp-concurrency parameter dalam create perintah atau update .

Parameter dari CLI Deskripsi Nilai default Nilai minimum Nilai maks
--scale-rule-tcp-concurrency Ketika jumlah koneksi TCP bersamaan melebihi nilai ini, sistem menambahkan replika lain. Sistem terus menambahkan replika hingga mencapai jumlah max-replicas seiring meningkatnya jumlah koneksi serentak. 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

Portal Azure tidak mendukung fitur ini. Gunakan Azure CLI, Azure Resource Manager, atau Bicep untuk mengonfigurasi aturan skala TCP.

Adat

Buat aturan penskalakan Container Apps kustom berdasarkan scaler KEDA berbasis ScaledObject dengan menggunakan nilai default ini:

Nilai default Detik
Interval waktu polling 30
Masa pendinginan 300

Catatan

Periode cooldown hanya berlaku saat scale-in dari replika terakhir menjadi 0. Periode pendinginan tidak memengaruhi penskalaan karena replika lain dihapus.

Untuk pekerjaan Container Apps berbasis peristiwa, buat aturan penskalaan kustom berdasarkan scaler KEDA berbasis ScaledJob.

Contoh berikut menunjukkan cara membuat aturan skala kustom.

Contoh

Contoh ini menunjukkan cara mengonversi Azure Service Bus scaler ke aturan skala Container Apps, tetapi Anda dapat menggunakan proses yang sama untuk spesifikasi ScaledObject berbasis KEDA scaler.

Untuk autentikasi, parameter autentikasi penskala KEDA mengambil sekret dari Container Apps atau identitas terkelola.

Prosedur di bawah ini menunjukkan kepada Anda cara mengonversi penskala KEDA ke aturan penskalaan Aplikasi Kontainer. Cuplikan ini adalah kutipan templat Bicep untuk menunjukkan kepada Anda di mana setiap bagian cocok dalam konteks templat keseluruhan.

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>'
                }
              ]
            }
          }
        ]
      }
    }
  }
}

Lihat kutipan ini untuk konteks tentang bagaimana contoh berikut cocok dalam templat Bicep.

Pertama, tentukan jenis dan metadata aturan skala.

  1. Dari spesifikasi penskala KEDA, temukan nilainya type .

    triggers:
     - type: azure-servicebus ⬅️
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. Di templat Bicep, masukkan nilai scaler type ke dalam properti custom.type dari aturan skala.

    ...
    rules: [
      {
        name: 'azure-servicebus-queue-rule'
        custom: {
          type: 'azure-servicebus' ⬅️
          metadata: {
            queueName: 'my-queue'
            namespace: 'service-bus-namespace'
            messageCount: '5'
          }
        }
      }
    ]
    ...
    
  3. Dari spesifikasi skala KEDA, temukan nilai metadata.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue              ⬅️
        namespace: service-bus-namespace ⬅️
        messageCount: "5"                ⬅️
    
  4. Di templat Bicep, tambahkan semua nilai metadata ke bagian custom.metadata aturan skala.

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

Autentikasi

Aturan skala Container Apps mendukung autentikasi berbasis rahasia. Aturan skala untuk sumber daya Azure, termasuk Azure Queue Storage, Azure Service Bus, dan Azure Event Hubs, juga mendukung identitas terkelola. Jika memungkinkan, gunakan autentikasi identitas terkelola untuk menghindari penyimpanan rahasia dalam aplikasi.

Menggunakan rahasia

Untuk menggunakan rahasia untuk autentikasi, buat rahasia di array aplikasi secrets kontainer. Gunakan nilai rahasia dalam larik auth pada aturan skala.

Scaler KEDA dapat menggunakan rahasia dalam TriggerAuthentication yang dirujuk oleh properti authenticationRef. Anda dapat memetakan objek TriggerAuthentication ke aturan skala Container Apps.

  1. Temukan objek yang dirujuk oleh spesifikasi KEDA TriggerAuthenticationScaledObject.

  2. Di dalam objek TriggerAuthentication, temukan setiap secretTargetRef dan rahasia terkaitnya.

    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. Di template Bicep, untuk setiap rahasia:

    1. Tambahkan rahasia ke array aplikasi secrets kontainer yang berisi nama dan nilai rahasia.

    2. Tambahkan entri ke auth array pada aturan skala.

      1. Atur nilai properti triggerParameter ke nilai properti secretTargetRef dari parameter.

      2. Atur nilai properti secretRef ke nama properti secretTargetRef dari 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'
                        }
                      ]
                    }
                  }
                ]
              }
            }
          }
        }
        

    Beberapa scaler mendukung metadata dengan akhiran FromEnv untuk mereferensikan nilai dalam variabel lingkungan. Container Apps melihat kontainer pertama yang tercantum dalam templat ARM untuk variabel lingkungan.

    Lihat bagian pertimbangan untuk informasi terkait keamanan lainnya.

Menggunakan identitas terkelola

Aturan skala Container Apps dapat menggunakan identitas terkelola untuk mengautentikasi dengan layanan Azure. Templat Bicep berikut meneruskan identitas terkelola oleh sistem untuk keperluan autentikasi dalam penskalaan Antrean Azure.

Sebelum menggunakan kode berikut, ganti tempat penampung dikelilingi oleh <> dengan nilai Anda sendiri.

scale: {
  minReplicas: 0
  maxReplicas: 4
  rules: [
    {
      name: 'azure-queue'
      custom: {
        type: 'azure-queue'
        metadata: {
          accountName: '<ACCOUNT_NAME>'
          queueName: '<QUEUE_NAME>'
          queueLength: '1'
        },
        identity: 'system'
      }
    }
  ]
}

Untuk mempelajari selengkapnya tentang menggunakan identitas terkelola dengan aturan skala, lihat Identitas terkelola.

Prosedur di bawah ini menunjukkan kepada Anda cara mengonversi penskala KEDA ke aturan penskalaan Aplikasi Kontainer. Cuplikan ini adalah kutipan templat ARM untuk menunjukkan kepada Anda di mana setiap bagian cocok dalam konteks templat keseluruhan.

{
  ...
  "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>"
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

Lihat kutipan ini untuk konteks tentang bagaimana contoh berikut cocok dalam templat ARM.

Pertama, tentukan jenis dan metadata aturan skala.

  1. Dari spesifikasi penskala KEDA, temukan nilainya type .

    triggers:
    - type: azure-servicebus ⬅️
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. Di templat ARM, masukkan nilai scaler type ke properti custom.type dari aturan skala.

    ...
    "rules": [
      {
        "name": "azure-servicebus-queue-rule",
        "custom": {
          "type": "azure-servicebus",  ⬅️
          "metadata": {
            "queueName": "my-queue",
            "namespace": "service-bus-namespace",
            "messageCount": "5"
          }
        }
      }
    ]
    ...
    
  3. Dari spesifikasi skala KEDA, temukan nilai metadata.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue              ⬅️
        namespace: service-bus-namespace ⬅️
        messageCount: "5"                ⬅️
    
  4. Di templat ARM, tambahkan semua nilai metadata ke bagian custom.metadata aturan skala.

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

Autentikasi

Aturan skala Container Apps mendukung autentikasi berbasis rahasia. Aturan skala untuk sumber daya Azure, termasuk Azure Queue Storage, Azure Service Bus, dan Azure Event Hubs, juga mendukung identitas terkelola. Jika memungkinkan, gunakan autentikasi identitas terkelola untuk menghindari penyimpanan rahasia dalam aplikasi.

Menggunakan rahasia

Untuk menggunakan rahasia untuk autentikasi, buat rahasia di array aplikasi secrets kontainer. Gunakan nilai rahasia dalam larik auth dari aturan skala.

Scaler KEDA dapat menggunakan secret dalam TriggerAuthentication yang dirujuk oleh properti authenticationRef. Anda dapat memetakan objek TriggerAuthentication ke aturan skala Container Apps.

  1. Temukan objek yang dirujuk oleh spesifikasi KEDA TriggerAuthenticationScaledObject.

  2. Di dalam objek TriggerAuthentication, temukan setiap secretTargetRef dan rahasia terkaitnya.

    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. Di templat ARM, untuk setiap rahasia:

    1. Tambahkan rahasia ke array aplikasi secrets kontainer yang berisi nama dan nilai rahasia.

    2. Tambahkan entri ke auth array pada aturan skala.

      1. Atur nilai properti triggerParameter ke nilai properti secretTargetRef dari parameter.

      2. Atur nilai properti secretRef ke nama properti secretTargetRef dari 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"         ⬅️
                      }                                          ⬅️
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    Beberapa scaler mendukung metadata dengan akhiran FromEnv untuk mereferensikan nilai dalam variabel lingkungan. Container Apps melihat kontainer pertama yang tercantum dalam templat ARM untuk variabel lingkungan.

    Lihat bagian pertimbangan untuk informasi terkait keamanan lainnya.

Menggunakan identitas terkelola

Aturan skala Container Apps dapat menggunakan identitas terkelola untuk mengautentikasi dengan layanan Azure. Templat ARM berikut meneruskan identitas terkelola yang ditetapkan sistem untuk mengautentikasi penskala Antrean Azure.

Sebelum menggunakan kode berikut, ganti tempat penampung dikelilingi oleh <> dengan nilai Anda sendiri.

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

Untuk mempelajari selengkapnya tentang menggunakan identitas terkelola dengan aturan skala, lihat Identitas terkelola.

  1. Dari spesifikasi penskala KEDA, temukan nilainya type .

    triggers:
    - type: azure-servicebus ⬅️
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. Dalam perintah CLI, atur --scale-rule-type parameter ke nilai spesifikasi 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. Dari spesifikasi skala KEDA, temukan nilai metadata.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue              ⬅️
        namespace: service-bus-namespace ⬅️
        messageCount: "5"                ⬅️
    
  4. Dalam perintah CLI, atur --scale-rule-metadata parameter ke nilai metadata.

    Ubah nilai dari format YAML menjadi pasangan kunci/nilai untuk digunakan pada baris perintah. Pisahkan setiap pasangan kunci/nilai dengan spasi.

    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"
    

Autentikasi

Aturan skala Container Apps mendukung autentikasi berbasis rahasia. Aturan skala untuk sumber daya Azure, termasuk Azure Queue Storage, Azure Service Bus, dan Azure Event Hubs, juga mendukung identitas terkelola. Jika memungkinkan, gunakan autentikasi identitas terkelola untuk menghindari penyimpanan rahasia dalam aplikasi.

Menggunakan rahasia

Untuk mengonfigurasi autentikasi berbasis rahasia untuk aturan skala Container Apps, konfigurasikan rahasia di aplikasi kontainer dan referensikan dalam aturan skala.

Penskala KEDA mendukung penggunaan rahasia dalam TriggerAuthentication, yang digunakan sebagai referensi oleh properti authenticationRef. Anda dapat memetakan TriggerAuthentication objek ke aturan skala Container Apps.

  1. Temukan objek yang dirujuk oleh spesifikasi KEDA TriggerAuthenticationScaledObject. Identifikasi setiap secretTargetRefTriggerAuthentication objek.

    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. Di aplikasi kontainer Anda, buat data rahasia yang sesuai dengan secretTargetRef properti.

  3. Dalam perintah CLI, atur parameter untuk setiap secretTargetRef entri.

    1. Buat entri rahasia dengan --secrets parameter . Jika ada beberapa rahasia, pisahkan dengan spasi.

    2. Buat entri autentikasi dengan --scale-rule-auth parameter . Jika ada beberapa entri, pisahkan dengan spasi.

    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"                ⬅️
    

Menggunakan identitas terkelola

Aturan skala Container Apps dapat menggunakan identitas terkelola untuk mengautentikasi dengan layanan Azure. Perintah berikut membuat aplikasi kontainer dengan identitas terkelola yang ditetapkan pengguna dan menggunakannya untuk autentikasi penggunaan skala Antrean Azure.

Sebelum menggunakan kode berikut, ganti tempat penampung dikelilingi oleh <> dengan nilai Anda sendiri.

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. Buka aplikasi kontainer Anda di Azure portal.

  2. Pilih Skala.

  3. Pilih Edit dan sebarkan.

  4. Pilih tab Skala dan replika .

  5. Pilih rentang replika minimum dan maksimum.

    Tangkapan layar rentang skala Azure Container Apps penggeser.

  6. Pilih Tambahkan.

  7. Dalam kotak Nama aturan, masukkan nama aturan.

  8. Dari menu dropdown Jenis , pilih Kustom.

  9. Dari spesifikasi penskala KEDA, temukan nilainya type .

    triggers:
    - type: azure-servicebus ⬅️
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  10. Masukkan nilai scaler dalam kotak Tipe aturan kustom.

  11. Dari spesifikasi skala KEDA, temukan nilai metadata.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue              ⬅️
        namespace: service-bus-namespace ⬅️
        messageCount: "5"                ⬅️
    
  12. Di portal, temukan bagian Metadata dan pilih Tambahkan. Masukkan nama dan nilai untuk setiap item di bagian metadata spesifikasi KEDA ScaledObject .

Autentikasi

Aturan skala Container Apps mendukung autentikasi berbasis rahasia. Aturan skala untuk sumber daya Azure, termasuk Azure Queue Storage, Azure Service Bus, dan Azure Event Hubs, juga mendukung identitas terkelola. Jika memungkinkan, gunakan autentikasi identitas terkelola untuk menghindari penyimpanan rahasia dalam aplikasi.

Menggunakan rahasia

  1. Di aplikasi kontainer Anda, buat rahasia yang ingin Anda referensikan.

  2. Temukan objek yang dirujuk oleh spesifikasi KEDA TriggerAuthenticationScaledObject. Identifikasi setiap secretTargetRefTriggerAuthentication objek.

    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. Di bagian Autentikasi , pilih Tambahkan untuk membuat entri untuk setiap parameter KEDA secretTargetRef .

Menggunakan identitas terkelola

Autentikasi identitas terkelola tidak didukung di Azure portal. Gunakan Azure CLI atau Azure Resource Manager untuk mengautentikasi menggunakan identitas terkelola.

Aturan skala baku

Jika Anda tidak membuat aturan skala, aturan skala default diterapkan ke aplikasi kontainer Anda.

Pemicu Replika Min Replika Maks
HTTP 0 10

Penting

Pastikan Anda membuat aturan skala atau mengatur minReplicas ke 1 atau lebih jika ingress tidak diaktifkan. Jika ingress dinonaktifkan dan Anda tidak menentukan minReplicas atau aturan skala kustom, aplikasi kontainer Anda akan diskalakan ke nol dan tidak memiliki cara untuk dapat dimulai kembali.

Perilaku skala

Skalabilitas memiliki perilaku berikut:

Perilaku Nilai
Interval waktu polling 30 detik
Masa pendinginan 300 detik
Menskalakan jendela stabilisasi 0 detik
Perkecil jendela stabilisasi 300 detik
Langkah peningkatan skala 1, 4, 8, 16, 32, ... hingga jumlah replika maksimum yang dikonfigurasi
Turunkan skala langkah 100% replika yang perlu dimatikan
Algoritma penskalakan desiredReplicas = ceil(currentMetricValue / targetMetricValue)
  • Interval polling adalah seberapa sering KEDA memeriksa sumber event. Nilai ini tidak berlaku untuk aturan skala HTTP dan TCP.
  • Periode cool down adalah berapa lama setelah peristiwa terakhir KEDA menunggu sebelum aplikasi menurunkan skala ke jumlah replika minimumnya.
  • Jendela stabilisasi peningkatan adalah berapa lama KEDA menunggu sebelum melakukan keputusan peningkatan skala setelah kondisi peningkatan terpenuhi.
  • Jendela stabilisasi penurunan skala adalah berapa lama KEDA menunggu sebelum melakukan keputusan penurunan skala setelah kondisi penurunan skala terpenuhi.
  • Langkah peningkatan skala adalah berapa banyak replika yang ditambahkan saat aplikasi kontainer Anda diskalakan. Dimulai pada 1, kemudian meningkat menjadi 4, 8, 16, 32, dan sebagainya, hingga jumlah replika maksimum yang dikonfigurasi.
  • Langkah penurunan skala menunjukkan berapa banyak replika yang dihapus saat aplikasi kontainer Anda melakukan scale in. KEDA menghapus 100% replika yang perlu dimatikan.
  • Algoritma penskalaan adalah rumus yang digunakan untuk menghitung jumlah replika yang diinginkan saat ini.

Contoh

Untuk aturan skala berikut:

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

Ketika aplikasi Anda berkembang, KEDA memulai dengan antrean kosong dan melakukan langkah-langkah berikut:

  1. Periksa my-queue setiap 30 detik.
  2. Jika panjang antrean sama dengan 0, kembali ke langkah 1.
  3. Jika panjang antrean lebih besar dari 0, skalakan aplikasi menjadi 1.
  4. Jika panjang antrean adalah 50, hitung desiredReplicas = ceil(50/5) = 10.
  5. Skalakan aplikasi ke min(maxReplicaCount, desiredReplicas, max(4, 2*currentReplicaCount)).
  6. Kembali ke langkah 1.

Jika aplikasi menskalakan ke jumlah replika maksimum 20, penskalaan melewati langkah-langkah sebelumnya yang sama. Penurunan skala hanya terjadi jika kondisi terpenuhi selama 300 detik (jendela stabilisasi penurunan skala). Setelah panjang antrean adalah 0, KEDA menunggu selama 300 detik (periode pendinginan) sebelum menskalakan aplikasi ke 0.

Pertimbangan

  • Dalam mode "beberapa revisi", menambahkan pemicu skala baru membuat revisi baru aplikasi Anda tetapi revisi lama Anda tetap tersedia dengan aturan skala lama. Gunakan halaman manajemen revisi untuk mengelola alokasi lalu lintas.

  • Anda tidak dikenakan biaya penggunaan apa pun saat aplikasi menskalakan ke nol. Untuk informasi harga selengkapnya, lihat Billing di Azure Container Apps.

  • Anda perlu mengaktifkan perlindungan data untuk semua aplikasi .NET di Azure Container Apps. Lihat Deploying dan penskalaan aplikasi ASP.NET Core di Azure Container Apps untuk detailnya.

Pembatasan yang diketahui

  • Penskalakan vertikal tidak didukung.

  • Jumlah replika adalah jumlah target, bukan jaminan.

  • Jika Anda menggunakan aktor Dapr untuk mengelola status, perlu diingat bahwa penskalakan ke nol tidak didukung. Dapr menggunakan aktor virtual untuk mengelola panggilan asinkron, yang berarti representasi dalam memori mereka tidak terkait dengan identitas atau masa pakainya.

  • Mengubah proksi KEDA melalui pengaturan proksi tidak didukung. Pertimbangkan penggunaan Profil Beban Kerja dengan NAT Gateway atau User Defined Route (UDR) untuk mengirim lalu lintas ke perangkat jaringan, yang memungkinkan Anda memeriksa atau memproksikan lalu lintas.

Langkah berikutnya