Full Code of kedacore/keda-docs for AI

main 7d8e45a05df4 cached
2089 files
10.8 MB
2.9M tokens
5 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (11,716K chars total). Download the full file to get everything.
Repository: kedacore/keda-docs
Branch: main
Commit: 7d8e45a05df4
Files: 2089
Total size: 10.8 MB

Directory structure:
gitextract_gwzsnkkw/

├── .devcontainer/
│   └── devcontainer.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── renovate.json5
│   ├── reviewers.yml
│   └── workflows/
│       ├── auto-assign.yml
│       ├── check-links.yml
│       ├── pr-bot-welcome.yml
│       └── stale.yml
├── .gitignore
├── .htmltest.yml
├── .nvmrc
├── .whitesource
├── CONTRIBUTING.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── archetypes/
│   ├── blog.md
│   ├── provider.md
│   ├── scaler.md
│   └── troubleshooting.md
├── assets/
│   ├── js/
│   │   ├── alpine.js
│   │   ├── docsearch.js
│   │   ├── scaler-search.js
│   │   └── site.js
│   └── sass/
│       ├── card.sass
│       ├── content.sass
│       ├── nav.sass
│       └── style.sass
├── content/
│   ├── blog/
│   │   ├── 2020-03-31-keda-cncf-sandbox.md
│   │   ├── 2020-09-11-keda-2.0-beta.md
│   │   ├── 2020-11-04-keda-2.0-release.md
│   │   ├── 2021-03-26-migrating-to-github-container-registry.md
│   │   ├── 2021-04-06-why-alibaba-cloud-uses-keda-for-app-autoscaling.md
│   │   ├── 2021-05-27-azure-pipelines-scaler.md
│   │   ├── 2021-06-24-announcing-http-add-on.md
│   │   ├── 2021-08-04-keda-cast-ai.md
│   │   ├── 2022-02-09-predictkube-scaler.md
│   │   ├── 2022-03-10-how-zapier-uses-keda.md
│   │   ├── 2022-08-10-keda-2.8.0-release.md
│   │   ├── 2022-09-27-http-add-on-is-on-hold.md
│   │   ├── 2022-12-12-keda-2.9.0-release.md
│   │   ├── 2023-05-02-certificate-improvements.md
│   │   ├── 2023-05-04-keda-survey.md
│   │   ├── 2023-08-22-keda-cncf-graduation.md
│   │   ├── 2025-09-15-gcp-deprecations.md
│   │   └── _index.md
│   ├── community.md
│   ├── docs/
│   │   ├── 1.4/
│   │   │   ├── _index.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   └── redis-lists.md
│   │   │   └── troubleshooting.md
│   │   ├── 1.5/
│   │   │   ├── _index.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.0/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   └── cluster.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.1/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   └── cluster.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.10/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.11/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   └── solr.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.12/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   └── solr.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.13/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   └── solr.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.14/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   └── solr.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.15/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solr.md
│   │   │   │   └── splunk.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.16/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solr.md
│   │   │   │   └── splunk.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.17/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── bound-service-account-token.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── nsq.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solr.md
│   │   │   │   ├── splunk.md
│   │   │   │   └── temporal.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.18/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── bound-service-account-token.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   ├── schema.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── forgejo.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── nsq.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub-dm.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solarwinds.md
│   │   │   │   ├── solr.md
│   │   │   │   ├── splunk-observability.md
│   │   │   │   ├── splunk.md
│   │   │   │   ├── sumologic.md
│   │   │   │   └── temporal.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.19/
│   │   │   ├── _index.md
│   │   │   ├── addons/
│   │   │   │   └── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── bound-service-account-token.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── file-path.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   ├── schema.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── forgejo.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-resource.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── nsq.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub-dm.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solarwinds.md
│   │   │   │   ├── solr.md
│   │   │   │   ├── splunk-observability.md
│   │   │   │   ├── splunk.md
│   │   │   │   ├── sumologic.md
│   │   │   │   └── temporal.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.2/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   └── events.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.20/
│   │   │   ├── _index.md
│   │   │   ├── addons/
│   │   │   │   └── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── bound-service-account-token.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── file-path.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   ├── schema.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── forgejo.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-resource.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── nsq.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub-dm.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solarwinds.md
│   │   │   │   ├── solr.md
│   │   │   │   ├── splunk-observability.md
│   │   │   │   ├── splunk.md
│   │   │   │   ├── sumologic.md
│   │   │   │   └── temporal.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.3/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   └── events.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.4/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.5/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.6/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.7/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.8/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.9/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   └── _index.md
│   ├── enterprise.md
│   ├── http-add-on/
│   │   ├── 0.14/
│   │   │   ├── _index.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── architecture.md
│   │   │   │   ├── routing.md
│   │   │   │   └── scaling.md
│   │   │   ├── getting-started/
│   │   │   │   └── _index.md
│   │   │   ├── operations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── configure-interceptor.md
│   │   │   │   ├── configure-observability.md
│   │   │   │   ├── configure-tls.md
│   │   │   │   ├── installation.md
│   │   │   │   ├── migrate-httpscaledobject-to-interceptorroute.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── environment-variables.md
│   │   │   │   ├── httpscaledobject.md
│   │   │   │   ├── interceptorroute.md
│   │   │   │   └── metrics.md
│   │   │   └── user-guide/
│   │   │       ├── _index.md
│   │   │       ├── autoscale-an-app.md
│   │   │       ├── configure-cold-start.md
│   │   │       ├── configure-ingress.md
│   │   │       ├── configure-routing.md
│   │   │       ├── configure-scaling.md
│   │   │       └── configure-timeouts.md
│   │   └── _index.md
│   ├── resources.md
│   ├── support.md
│   ├── troubleshooting/
│   │   ├── 2.17/
│   │   │   └── api-server-throttling.md
│   │   ├── 2.18/
│   │   │   └── api-server-throttling.md
│   │   ├── _index.md
│   │   ├── aws-keda-operator-iam.md
│   │   ├── context-deadline-exceeded.md
│   │   ├── gke-external-metrics.md
│   │   ├── helm-upgrade-crd.md
│   │   ├── istio-keda-faileddiscoverycheck.md
│   │   ├── keda-external-metrics-issue.md
│   │   ├── profiling-keda-components.md
│   │   ├── proxy-network.md
│   │   └── scaledobject-not-scale.md
│   └── videos.md
├── data/
│   ├── faq.toml
│   ├── faq20.toml
│   ├── faq2_14.toml
│   ├── faq2_15.toml
│   └── faq2_19.toml
├── hugo.toml
├── includes/
│   └── get-involved.md
├── layouts/
│   ├── 404.html
│   ├── _default/
│   │   ├── _markup/
│   │   │   ├── render-image.html
│   │   │   └── render-link.html
│   │   ├── baseof.html
│   │   ├── card-info.html
│   │   ├── list.lunr.json
│   │   ├── single.html
│   │   └── sitemap.xml
│   ├── blog/
│   │   ├── list.html
│   │   └── single.html
│   ├── docs/
│   │   ├── list.html
│   │   └── single.html
│   ├── http-add-on/
│   │   ├── list.html
│   │   └── single.html
│   ├── index.html
│   ├── index.redirects
│   ├── partials/
│   │   ├── article.html
│   │   ├── blog/
│   │   │   ├── article.html
│   │   │   ├── list-hero.html
│   │   │   ├── pagination.html
│   │   │   ├── post-hero.html
│   │   │   ├── posts.html
│   │   │   └── rss-button.html
│   │   ├── content.html
│   │   ├── css.html
│   │   ├── doc-version-selector.html
│   │   ├── docs/
│   │   │   └── hero.html
│   │   ├── favicon.html
│   │   ├── footer.html
│   │   ├── general-version-selector.html
│   │   ├── headline-hash.html
│   │   ├── hero.html
│   │   ├── home/
│   │   │   ├── cncf.html
│   │   │   ├── features.html
│   │   │   ├── get-involved.html
│   │   │   ├── hero.html
│   │   │   ├── samples.html
│   │   │   ├── scalers.html
│   │   │   ├── video.html
│   │   │   └── what-is.html
│   │   ├── include.html
│   │   ├── javascript.html
│   │   ├── logo-section.html
│   │   ├── meta.html
│   │   ├── nav.html
│   │   ├── navbar.html
│   │   ├── scaler-layout.html
│   │   ├── scaler-template.html
│   │   ├── scalers.html
│   │   ├── social-buttons.html
│   │   └── youtube-embed.html
│   ├── scalers/
│   │   └── list.html
│   └── shortcodes/
│       ├── authentication-providers.html
│       ├── collapsible.html
│       ├── enterprise.html
│       ├── faq.html
│       ├── faq20.html
│       ├── include.html
│       ├── integrations.html
│       ├── partners-icons.html
│       ├── scalers-compact.html
│       ├── supportedby-icons.html
│       ├── troubleshooting.html
│       └── user-icons.html
├── netlify.toml
├── package.json
├── schematics.pptx
└── static/
    ├── _redirects
    └── img/
        └── keda-arch-new-source.excalidraw

================================================
FILE CONTENTS
================================================

================================================
FILE: .devcontainer/devcontainer.json
================================================
{
  "name": "keda-docs",
  "image": "mcr.microsoft.com/devcontainers/javascript-node:24",
  "features": {
    "ghcr.io/devcontainers-community/features/deno": {}
  },
  "postCreateCommand": "npm install"
}


================================================
FILE: .editorconfig
================================================
root = true

[*]
end_of_line = lf

[Makefile]
indent_style = tab

[*.{html,js,json,md,sass,toml,yaml}]
indent_style = space
indent_size = 2

[*.{js,json,md,sass,toml,yaml}]
insert_final_newline = true


================================================
FILE: .gitattributes
================================================
# normalize all introduced text files to LF line endings (recognized by git)
 *           text=auto
 # additionally declare text file types
 *.sh        text eol=lf


================================================
FILE: .github/CODEOWNERS
================================================
# General owners
*                      @kedacore/keda-docs
# HTTP Add-on
content/http-add-on/   @kedacore/keda-http-maintainers @kedacore/keda-docs
# KEDA core
content/docs/          @kedacore/keda-core-maintainers @kedacore/keda-docs


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- Thank you for contributing!

     Read more about how you can contribute in our contribution guide:
     https://github.com/kedacore/keda/blob/main/CONTRIBUTING.md
-->

_Provide a description of what has been changed_

### Checklist

- [ ] Commits are signed with Developer Certificate of Origin (DCO)

Fixes #


================================================
FILE: .github/renovate.json5
================================================
{
  $schema: "https://docs.renovatebot.com/renovate-schema.json",
  extends: [
    // See https://docs.renovatebot.com/presets-config/#configbest-practices
    "config:best-practices",
    "customManagers:githubActionsVersions",
    "schedule:monthly",
    ":gitSignOff",
    ":prHourlyLimitNone",
  ],
  commitBodyTable: true,
  labels: ["dependencies"],
  // Experimental: OSV-based vulnerability alerts for direct dependencies
  osvVulnerabilityAlerts: true,
  postUpdateOptions: ["npmDedupe"],
  packageRules: [
    {
      matchManagers: ["github-actions"],
      groupName: "GitHub Actions",
    },
    {
      matchManagers: ["npm"],
      matchUpdateTypes: ["minor", "patch"],
      groupName: "npm Dependencies (non-major)",
    },
    {
      matchFileNames: [".devcontainer/**"],
      pinDigests: false,
    },
  ],
  vulnerabilityAlerts: {
    enabled: true,
    addLabels: ["security"],
  },
}


================================================
FILE: .github/reviewers.yml
================================================
# https://github.com/marketplace/actions/auto-assign-reviewer-by-files
"**/*":
  - team: keda-docs

# Any datadog.md file
"**/datadog.md":
  - team: keda-core-datadog-notification

================================================
FILE: .github/workflows/auto-assign.yml
================================================
name: Auto Assign
on:
  - pull_request_target

jobs:
  assign_reviewer:
    runs-on: ubuntu-slim
    steps:
      - uses: shufo/auto-assign-reviewer-by-files@0a7fae44d02e841755d0caaac2ef05ad12a3bbc9 # v1.2.1
        with:
          config: ".github/reviewers.yml"
          token: ${{ secrets.GH_AUTOMATION_PAT }}


================================================
FILE: .github/workflows/check-links.yml
================================================
# Adapted from @chalin's work on https://github.com/chalin/docsy-starter

name: Links

on:
  merge_group:
  pull_request:
  push: { branches: [main] }

jobs:
  build-and-check-links:
    name: BUILD and CHECK LINKS
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
        with:
          node-version-file: .nvmrc
          cache: npm

      - run: npm install --omit=optional

      - run: npm run check:links



================================================
FILE: .github/workflows/pr-bot-welcome.yml
================================================
name: PR Welcome Bot

on:
  pull_request_target:
    types: [opened]
    branches:
    - 'main'

permissions:
  issues: write
  pull-requests: write

jobs:
  pr_bot:
    name: PR Bot
    runs-on: ubuntu-slim
    steps:
      - name: 'Comment on PR'
        uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: ${{ github.event.number }},
              body: 'Thank you for your contribution! 🙏 We will review your PR as soon as possible.\n\n\n> While you are waiting, make sure to:\n\n\n- Add your contribution to all applicable KEDA versions\n- GitHub checks are passing\n- Is the DCO check failing? Here is [how you can fix DCO issues](https://github.com/kedacore/keda/blob/main/CONTRIBUTING.md#i-didnt-sign-my-commit-now-what)\n\n\nLearn more about:\n- How to become a [listed end-user](https://github.com/kedacore/keda-docs#become-a-listed-keda-user) or a [listed commerical offering](https://github.com/kedacore/keda-docs#become-a-listed-keda-commercial-offering)\n- Our [contribution guide](https://github.com/kedacore/keda-docs/blob/main/CONTRIBUTING.md)'
            });


================================================
FILE: .github/workflows/stale.yml
================================================
name: "Stale"

on:
  schedule:
    - cron: "0 2 * * *"
  workflow_dispatch:

permissions:
  actions: write
  issues: write
  pull-requests: write

jobs:
  stale:
    runs-on: ubuntu-slim
    steps:
      - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10
        with:
          days-before-stale: 60
          days-before-close: 7
          operations-per-run: 30

          # Issues
          exempt-issue-labels: "cant-touch-this,feature,security"
          stale-issue-label: "stale"
          stale-issue-message: >
            This issue has been automatically marked as stale because it has not had
            recent activity. It will be closed in 7 days if no further activity occurs. Thank you
            for your contributions.
          close-issue-message: >
            This issue has been automatically closed due to inactivity.

          # PRs
          exempt-pr-labels: "cant-touch-this,feature,security"
          stale-pr-label: "stale"
          stale-pr-message: >
            This pull request has been automatically marked as stale because it has not had
            recent activity. It will be closed in 7 days if no further activity occurs. Thank you
            for your contributions.
          close-pr-message: >
            This pull request has been automatically closed due to inactivity.


================================================
FILE: .gitignore
================================================
node_modules/
/public
.idea
resources/
.DS_Store
.hugo_build.lock

# Link checker artifacts
bin/
tmp/

# Local Netlify folder
.netlify


================================================
FILE: .htmltest.yml
================================================
DirectoryPath: public
EnforceHTTPS: true
EnforceHTML5: true
IgnoreDirectoryMissingTrailingSlash: true
CheckExternal: false
IgnoreAltMissing: true
IgnoreEmptyHref: true
IgnoreURLs:
  # /latest/ URLs are redirect-only paths handled by Netlify; no static page exists for them
  - /docs/latest/
  - /http-add-on/latest/
  # Temporal ignores
  # Deprecated and removed resources
  # Renamed pages
  - /docs/2.18/scalers/splunk-observability.md/


================================================
FILE: .nvmrc
================================================
lts/*


================================================
FILE: .whitesource
================================================
{
  "scanSettings": {
    "baseBranches": []
  },
  "checkRunSettings": {
    "vulnerableCheckRunConclusionLevel": "failure",
    "displayMode": "diff"
  },
  "issueSettings": {
    "minSeverityLevel": "LOW"
  }
}

================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to KEDA

Thanks for helping make KEDA better 😍.

There are many areas we can use contributions - documenting scalers, adding FAQ, troubleshooting, samples, and more.

Our documentation is versioned so it's important to make the changes for the correct KEDA version.
If you need to introduce a new version, we recommend reading our documentation about it [here](#working-with-documentation-versions).

- [Contributing to KEDA](#contributing-to-keda)
  - [Getting Help](#getting-help)
  - [Local development](#local-development)
  - [Contributing New Documentation](#contributing-new-documentation)
    - [Adding blog post](#adding-blog-post)
    - [Adding scaler documentation](#adding-scaler-documentation)
    - [Writing documentation for a scaler](#writing-documentation-for-a-scaler)
    - [Writing documentation for a new authentication provider](#writing-documentation-for-a-new-authentication-provider)
    - [Add new Frequently Asked Question (FAQ)](#add-new-frequently-asked-question-faq)
    - [Add new troubleshooting guidance](#add-new-troubleshooting-guidance)
  - [Working with documentation versions](#working-with-documentation-versions)
    - [Preparing a new version](#preparing-a-new-version)
    - [Publishing a new version](#publishing-a-new-version)
  - [Developer Certificate of Origin: Signing your work](#developer-certificate-of-origin-signing-your-work)
    - [Every commit needs to be signed](#every-commit-needs-to-be-signed)
    - [I didn't sign my commit, now what?](#i-didnt-sign-my-commit-now-what)
  - [Changing the website](#changing-the-website)
    - [Adding a new filter option](#adding-a-new-filter-option)
  - [Listing KEDA Users and Commercial Offerings](#listing-keda-users-and-commercial-offerings)
    - [Become a listed KEDA user](#become-a-listed-keda-user)
    - [Become a listed KEDA commercial offering](#become-a-listed-keda-commercial-offering)

## Getting Help

If you have a question about KEDA or how best to contribute, the [#KEDA](https://kubernetes.slack.com/archives/CKZJ36A5D) channel on the Kubernetes Slack ([get an invite if you don't have one already](https://slack.k8s.io/)) is a good place to start.
We also have regular [community stand-ups](https://github.com/kedacore/keda#community) to track ongoing work and discuss areas of contribution.
For any issues with the product you can [create an issue](https://github.com/kedacore/keda/issues/new) in this repo.

## Local development

1. Fork and clone this repository.
2. Install [Node](https://nodejs.org/).
   Hugo is bundled via the `hugo-extended` npm package — no separate Hugo install needed.
3. Install dependencies:
   ```console
   npm install
   ```
4. Serve the site locally at [localhost:8888](http://localhost:8888):
   ```console
   npm run serve
   ```
5. To do a one-off build (output goes to `public/`):
   ```console
   npm run build
   ```
6. To check for broken links (runs a build first):
   ```console
   npm run check:links
   ```

## Contributing New Documentation

We provide easy ways to introduce new content:

### Adding blog post

To add a new post to the [KEDA blog](https://keda.sh/blog):

```console
npx hugo new blog/my-new-post.md
```

This creates a boilerplate Markdown file in `content/blog/my-new-post.md` whose
contents you can modify. The following fields are required:

- `title`
- `date` (in `YYYY-MM-DD` format)
- `author`

> Note: Please ensure the file is named correctly, as it will be used as the blog post URL slug. Avoid defining an alias to rename the URL slug, as this goes against our convention.

### Adding scaler documentation

To add documentation for a new KEDA [scaler](https://keda.sh/docs/scalers):

```console
npx hugo new --kind scaler docs/<VERSION>/scalers/my-new-scaler.md
```

This creates a boilerplate Markdown file in
`content/docs/<VERSION>/scalers/my-new-scaler.md` whose contents you can modify.
Make sure to update the following metadata fields:

- `title`
- `availability`
- `maintainer`
- `description`

### Writing documentation for a scaler

In order to maintain the style consistency across different scalers, all the
parameters which are listed have to be written using this convention:

- name - Description. (Values: x, y, z, Default: y, Optional, Extra Info)

If a parameter is required or doesn't have defined/default values, the missing
info should be removed from the pattern.

Here are a few examples:

> - `targetMetricValue` - Target value for your metric.
> - `metricFilter` - Aggregation method of the metric. (Values: `max`, `min`, `average`, `sum`, `variance`, Default: `average`, Optional)
> - `metricPeriod` - Granularity of the metric. (Default: `300`, Optional)
> - `subscriptionName` - Name of the Azure Service Bus queue to scale on. (Optional, Required when `topicName` is specified)

### Writing documentation for a new authentication provider

To add documentation for a new [provider](https://keda.sh/docs/concepts/authentication):

```console
npx hugo new --kind provider docs/<VERSION>/providers/my-new-provider.md
```

This creates a boilerplate Markdown file in
`content/docs/<VERSION>/providers/my-new-provider.md` whose contents you can modify.
Make sure to update the following metadata fields:

- `title`

### Add new Frequently Asked Question (FAQ)

To update the KEDA [FAQ page](https://keda.sh/docs/faq), update the TOML file
referenced by `versionData` in `content/docs/<VERSION>/reference/faq.md`.
Here's an example question/answer pair:

```toml
[[qna]]
q = "How can I add a new question/answer pair?"
a = "You're looking at it! 😀"
```

### Add new troubleshooting guidance

To add a new section to the [troubleshooting page](https://keda.sh/docs/troubleshooting):

```console
npx hugo new troubleshooting/<VERSION>/my-new-issue.md
```

To adjust the order in which the troubleshooting tiles appear, use the `weight`
parameter in each page's metadata.

## Working with documentation versions

The KEDA documentation is versioned. Each version has its own subdirectory under
[content/docs](content/docs). To add a new version, follow these steps:

1. Copy the directory for the most recent version:
   ```console
   cp -rf content/docs/<CurrentVersion> content/docs/<NewVersion>
   ```
2. Copy the file for the most recent faq data in the `data` directory:
   ```console
   cp -rf data/faq<CurrentVersion> data/faq<NewVersion>
   ```
3. Update the `versionData` option in `content/docs/<NewVersion>/reference/faq.md`, replacing `NEW_FAQ_FILE_NAME` with the file name of the faq data for the new version:
   ```text
   {{< faq20 versionData="NEW_FAQ_FILE_NAME" >}}
   ```

By default, new documentation versions are not listed as available version so
it's safe to make changes to them. After every release, the version will be
published as new version.

### Preparing a new version

Remember to create the folder for next version with already existing docs in
current version.

Make sure that the version on `content/docs/{next-version}/deploy.md` is updated
and uses the next version, instead of the current one. Ensure that Kubernetes cluster version is updated as well.

Ensure that compatibility matrix on `content/docs/{next-version}/operate/cluster.md` is updated with the compatibilities for the incoming version.

Update the new version in the `params.unreleased.docs` list in [hugo.toml](hugo.toml).

### Publishing a new version

Once a version is ready to be published, we must add the version to the
`params.versions.docs` list in [hugo.toml](hugo.toml).

More recent versions should be placed first in the list (ordering _does_ matter
because the first element in that list is considered the latest version).

> Note: Remember to [prepare the next version](#preparing-a-new-version).

## Developer Certificate of Origin: Signing your work

### Every commit needs to be signed

The Developer Certificate of Origin (DCO) is a lightweight way for contributors to certify that they wrote or otherwise have the right to submit the code they are contributing to the project. Here is the full text of the DCO, reformatted for readability:

```text
By making a contribution to this project, I certify that:

    (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or

    (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or

    (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.

    (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
```

Contributors sign-off that they adhere to these requirements by adding a `Signed-off-by` line to commit messages.

```text
This is my commit message

Signed-off-by: Random J Developer <random@developer.example.org>
```

Git even has a `-s` command line option to append this automatically to your commit message:

```console
git commit -s -m 'This is my commit message'
```

Each Pull Request is checked whether or not commits in a Pull Request do contain a valid Signed-off-by line.

### I didn't sign my commit, now what?

No worries - You can easily replay your changes, sign them and force push them!

```console
git checkout <branch-name>
git reset $(git merge-base main <branch-name>)
git add -A
git commit -sm "one commit on <branch-name>"
git push --force
```

## Changing the website

### Adding a new filter option

To add a new filter option, simply follow these steps:

1. Navigate to the doc file you want to annotate.
2. In the frontmatter, add your new filter option:
   ```toml
   FILTER_NAME = "filter_value"
   ```
   Replace `FILTER_NAME` with any desired name of your choice. Same applies to the value.
3. In `layouts/_default/list.lunr.json`, just before the closing parenthesis, append your new option:
   ```text
   "FILTER_NAME" $scalers.Params.FILTER_NAME
   ```
4. In `hugo.toml`, in the `params.lunr` section, add your new filter option's name to both arrays:
   ```toml
   vars = ["title", "maintainer", "description", "availability", "category", "type", "FILTER_NAME"]
   params = ["availability", "maintainer", "category", "type", "FILTER_NAME"]
   ```
5. In `assets/js/scaler-search.js`, in the `lunr()` callback where `this.field` is called, append your field:
   ```javascript
   this.field("FILTER_NAME", {
     boost: 5,
   });
   ```
   And where `parse[doc.title]` is built, add your field:
   ```javascript
   parse[doc.title] = {
     href: doc.href,
     title: doc.title,
     maintainer: doc.maintainer,
     description: doc.description,
     availability: doc.availability,
     category: doc.category,
     type: doc.type,
     FILTER_NAME: doc.FILTER_NAME,
   };
   ```
6. In `layouts/partials/scaler-layout.html`, locate the div with class `filter-options` and add this new block:
   ```html
   <div class="has-extra-top-margin">
     <h6>FILTER_NAME</h6>
     {{ $FILTER_NAME := slice }} {{ range $scalers := where site.RegularPages
     ".CurrentSection.Title" "Scalers" }} {{ with $scalers.Params.FILTER_NAME }} {{
     $FILTER_NAME = $categories | append ($scalers.Params.FILTER_NAME) }} {{
     $FILTER_NAME = uniq $FILTER_NAME }} {{ end }} {{ end }} {{ range $FILTER_NAME
     }} {{ $item := . }}
     <div>
       <input
         id="{{ . }}"
         type="checkbox"
         name="resource_filter"
         value="FILTER_NAME:{{ . }}"
       />
       <label for="{{ . }}">{{ . }}</label>
     </div>
     {{ end }}
   </div>
   ```
7. Save your changes and rebuild your frontend.

## Listing KEDA Users and Commercial Offerings

### Become a listed KEDA user!

Are you using KEDA in production? Do you want to become a [listed user](https://keda.sh/community/#users)? Say no more!

You can easily get listed by following these steps:

1. Upload your logo to `static/img/logos/` _(350x180)_
2. Configure your company as a new user in `hugo.toml` _(sorted alphabetically)_

```toml
[[params.users]]
url = "https://coralogix.com/"
logo = "coralogix.gif"
```

Here's a good example of [Coralogix becoming a listed user](https://github.com/kedacore/keda-docs/pull/182)!

### Become a listed KEDA commercial offering!

Do you offer commercial support for KEDA and want to become a [listed commercial offering](https://keda.sh/enterprise)? Say no more!

To be listed as a KEDA commercial offering, organizations must meet the following criteria:

- Demonstrate a commitment to KEDA's maintenance and improvement.
  - On average, have pull requests accepted monthly into KEDA or related projects for features and/or improvements.
  - Have made a substantial contribution to the development of KEDA or related projects.
  - Help triage and comment on issues across the KEDA ecosystem at least 3 times per month.
- Demonstrate an area of expertise in the KEDA ecosystem.
  - Example: Employing one or more KEDA maintainers.
  - Example: Owning a specific high-impact feature or process.
- Participate in KEDA's governance.
  - At least 1 member of the vendor's team attends the community meetings at least 50% of the time.
- Be active KEDA thought leaders.
  - Example: Sponsoring staff for KEDA booths or community events.
  - Example: Giving talks related to KEDA or its ecosystem.
- Provide enterprise-level support and functionality for KEDA or products based directly on it.

If any questions arise regarding eligibility, the KEDA maintainers will make the final decision.

If your organization meets these requirements, you can request to be listed by following these steps:

1. Open a pull request and provide evidence in the PR description showing how the requirements above have been met.
2. Upload your logo to `static/img/logos/` _(350x180)_
3. Configure your company as a new vendor in `hugo.toml` _(sorted alphabetically)_

```toml
[[params.vendors]]
name = "Red Hat"
logo = "vendors/red-hat.png"
description = """
Red Hat integrates KEDA with OpenShift through the **Custom Metrics Autoscaler** (CMA) available through the OpenShift Marketplace.
"""
urls = [
  { text = "Learn more about the CMA", url = "https://cloud.redhat.com/blog/custom-metrics-autoscaler-on-openshift" }
]
```


================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2020 The KEDA Authors.

   and others that have contributed code to the public domain.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

================================================
FILE: MAINTAINERS.md
================================================
# Kubernetes Event-driven Autoscaling (KEDA) Maintainers

You can find a recent update of the maintainers [here](https://github.com/kedacore/governance/blob/main/MEMBERS.md).


================================================
FILE: Makefile
================================================
HTMLTEST_DIR=tmp
HTMLTEST?=htmltest # Specify as make arg if different
HTMLTEST_ARGS?=--skip-external

DOCS=public/docs
LATEST_VERSION=$(shell grep -e '^docs' hugo.toml | grep -oe '[0-9][0-9]*.[0-9][0-9]' | head -1)
HTTP_ADDON_LATEST_VERSION=$(shell grep -e '^http-add-on' hugo.toml | grep -oe '[0-9][0-9]*.[0-9][0-9]' | head -1)

# Use $(HTMLTEST) in PATH, if available; otherwise, we'll get a copy
ifeq (, $(shell which $(HTMLTEST)))
override HTMLTEST=$(HTMLTEST_DIR)/bin/htmltest
ifeq (, $(shell which $(HTMLTEST)))
GET_LINK_CHECKER_IF_NEEDED=get-link-checker
endif
endif

check-links: $(GET_LINK_CHECKER_IF_NEEDED) make-redirects-for-checking
	$(HTMLTEST) $(HTMLTEST_ARGS)
	find public/* -type l -ls -exec rm -f {} \;

make-redirects-for-checking:
	@if [ -z $(LATEST_VERSION) ]; then \
		echo "Failed to extract LATEST_VERSION. Cannot setup symlinks for checking"; \
		exit 1; \
	fi
	@if [ -z $(HTTP_ADDON_LATEST_VERSION) ]; then \
		echo "Failed to extract HTTP_ADDON_LATEST_VERSION. Cannot setup symlinks for checking"; \
		exit 1; \
	fi
	@echo "Creating symlinks of 'latest' to $(LATEST_VERSION) for the purpose of link checking"
	(cd public && rm -f scalers && ln -s docs/$(LATEST_VERSION)/scalers scalers)
	(cd public/docs && rm -f latest && ln -s $(LATEST_VERSION) latest)
	(cd public/http-add-on && rm -f latest && ln -s $(HTTP_ADDON_LATEST_VERSION) latest)

get-link-checker:
	rm -Rf $(HTMLTEST_DIR)/bin
	curl https://htmltest.wjdp.uk | bash -s -- -b $(HTMLTEST_DIR)/bin

clean:
	rm -rf $(HTMLTEST_DIR) public/* resources


================================================
FILE: README.md
================================================
# KEDA - Docs

Documentation and landing page for the KEDA project at [keda.sh][].

- [Become a listed KEDA user!](CONTRIBUTING.md#become-a-listed-KEDA-user)
- [Become a listed KEDA commercial offering!](CONTRIBUTING.md#become-a-listed-KEDA-commercial-offering)

## Contributing

We welcome issues and PRs! For details, see [Contributing to KEDA][].

If you submit a PR, Netlify will automatically create a [deploy preview][] so
that you can view your changes. Once merged, Netlify automatically deploys to
the production site [keda.sh][].

To see deploy logs and more, visit project's [dashboard][] -- Netlify login
required.

[Contributing to KEDA]: CONTRIBUTING.md
[dashboard]: https://app.netlify.com/sites/keda
[deploy preview]: https://www.netlify.com/blog/2016/07/20/introducing-deploy-previews-in-netlify/
[keda.sh]: https://keda.sh


================================================
FILE: archetypes/blog.md
================================================
+++
title = "{{ replace .Name "-" " " | title }}"
date = {{ dateFormat "2006-01-02" .Date }}
author = "Scaley McAutoscaler"
+++


================================================
FILE: archetypes/provider.md
================================================
+++
title = "{{ replace .Name "-" " " | title }}"
+++

Authentication provider description.

```yaml
code
```


================================================
FILE: archetypes/scaler.md
================================================
+++
title = "{{ replace .Name "-" " " | title }}"
availability = ""
maintainer = ""
description = "Insert description here"
+++

### Trigger Specification

This specification describes the `*Scaler Type*` trigger that scales based on a Huawei Cloudeye.

```yaml
triggers:
  - type: *Scaler Type*
    metadata:
      namespace: SYS.ELB
```

**Parameter list:**

- `namespace` - Namespace of the metric. The format is service.item; service and item must be strings, must start with a letter, can only contain 0-9/a-z/A-Z/_, the total length of service.item is 3, the maximum is 32.

### Authentication Parameters

You can use `TriggerAuthentication` CRD to configure the authenticate by providing a set of IAM credentials.

**Credential based authentication:**

- `IdentityEndpoint` - Endpoint to verify the identity against.

The user will need access to read data from Huawei Cloudeye.

### Example

*Provide an example of how to configure the trigger, preferably using TriggerAuthentication*


================================================
FILE: archetypes/troubleshooting.md
================================================
+++
title = "Replace this with a question"
+++

And provide the answer here...


================================================
FILE: assets/js/alpine.js
================================================
import Alpine from "alpinejs";

window.Alpine = Alpine;
Alpine.start();


================================================
FILE: assets/js/docsearch.js
================================================
import docsearch from "@docsearch/js";
import * as params from "@params";

function meta(name) {
  const element = document.querySelector(`meta[name="docsearch:${name}"]`);
  return element ? element.content : "";
}

const currentTag = meta("tag");
const currentProduct = meta("product");

// Each tag encodes product + version in one value (e.g. "docs-2.19").
// This avoids needing a cross-attribute filter like (product AND version)
// which Algolia's filter syntax does not support in OR groups.
const tags = {
  docs: "docs-" + params.latestDocs,
  "http-add-on": "http-add-on-" + params.latestHttpAddon,
};
if (currentProduct in tags && currentTag) {
  tags[currentProduct] = currentTag;
}

const facetFilters = Object.values(tags)
  .map((tag) => "tag:" + tag)
  .concat("tag:blog");

try {
  docsearch({
    apiKey: params.apiKey,
    appId: params.appId,
    indices: [
      {
        name: params.indexName,
        searchParameters: { facetFilters: [facetFilters] },
      },
    ],
    container: "#navbar-search",
    insights: true,
  });
} catch (err) {
  console.error("DocSearch failed to initialize:", err);
}


================================================
FILE: assets/js/scaler-search.js
================================================
import lunr from "lunr";

window.addEventListener("DOMContentLoaded", () => {
  "use strict";

  const input = document.getElementById("search-input");
  if (!input) return;

  let index;
  let debounceTimer;
  const currentUrl = window.location.pathname;
  const currentLocation = String(currentUrl).split("/");
  const currentVersion = currentLocation[2];
  const form = document.getElementById("search");
  const target = document.querySelector(".is-search-result");
  const filterIcon = document.querySelector(".filter-icon");
  const filterOptions = document.querySelector(".filter-options");
  const searchResultCount = document.querySelector(".results");
  const template = document.getElementById("is-search-template");
  const interval = 500;
  let query = input.value.trim();
  let parse = {};
  let searchQueue = [];
  let checkboxes = document.querySelectorAll('input[name="resource_filter"]');

  // fetch all scalers on initial load
  if (!query) {
    initSearchIndex();
  }

  // logic for input search
  input.addEventListener(
    "input",
    function (event) {
      event.preventDefault();
      clearTimeout(debounceTimer);
      const keywords = input.value.trim();

      query = keywords;

      debounceTimer = setTimeout(initSearchIndex, interval);

      // clear out all the scaler item card during search
      while (target.firstChild.nextSibling) {
        target.removeChild(template.nextSibling.nextElementSibling);
      }
    },
    false,
  );

  // logic for category filter
  checkboxes.forEach((checkbox) => {
    checkbox.addEventListener("change", function (event) {
      if (checkbox.checked) {
        const inputValue = event.target.value.split(" ");
        // for single queries with spacing, use the first word
        const inputQuery = inputValue[0];
        searchQueue.push(inputQuery);
        query = searchQueue.join(" ");
        initSearchIndex();
      }

      if (!checkbox.checked) {
        const inputValue = event.target.value.split(" ");
        // for single queries with spacing, use the first word
        const inputQuery = inputValue[0];
        searchQueue = searchQueue.filter((word) => word != inputQuery);
        query = searchQueue.join(" ");
        initSearchIndex();
      }

      // clear out all the scaler item card during search
      while (target.firstChild.nextSibling) {
        target.removeChild(template.nextSibling.nextElementSibling);
      }
    });
  });

  // show filter options on mobile
  filterIcon.addEventListener("click", function () {
    if (filterOptions.style.display === "none" || filterOptions.style.display === "") {
      filterOptions.style.display = "flex";
    } else {
      filterOptions.style.display = "none";
    }
  });

  async function initSearchIndex() {
    const builtInScalers = await fetch("/index.json", { method: "GET" })
      .then((response) => response.json())
      .then((data) => {
        return data;
      })
      .catch((err) => console.error("error:", err));

    const externalScalerUrl =
      "https://artifacthub.io/api/v1/packages/search?offset=0&limit=20&facets=false&kind=8&deprecated=false&sort=relevance";
    const externalScalersData = await fetch(externalScalerUrl)
      .then((response) => response.json())
      .then((data) => {
        return data.packages;
      })
      .catch((err) => console.error("error:", err));

    const externalScalers = (externalScalersData || []).map((scaler) => ({
      type: "external",
      availability: `v${scaler.version}+`,
      title: scaler.display_name,
      maintainer:
        scaler.repository.organization_name ?? scaler.repository.user_alias,
      href:
        "https://artifacthub.io/packages/keda-scaler/" +
        scaler.repository.name +
        "/" +
        scaler.normalized_name,
      version: currentVersion,
      description: scaler.description,
      category: null,
    }));

    const scalers = [...(builtInScalers || []), ...externalScalers];

    index = lunr(function () {
      const documents = scalers;

      this.ref("title");
      this.field("title", {
        boost: 20,
        usePipeline: true,
        wildcard: lunr.Query.wildcard.TRAILING,
        presence: lunr.Query.presence.REQUIRED,
      });
      this.field("maintainer", {
        boost: 15,
      });
      this.field("href", {
        boost: 15,
      });
      this.field("description", {
        boost: 10,
      });
      this.field("availability", {
        boost: 5,
      });
      this.field("category", {
        boost: 10,
      });
      this.field("type", {
        boost: 20,
      });

      documents.forEach(function (doc) {
        if (doc.version === currentVersion) {
          this.add(doc);
          parse[doc.title] = {
            href: doc.href,
            title: doc.title,
            maintainer: doc.maintainer,
            description: doc.description,
            availability: doc.availability,
            category: doc.category,
            type: doc.type,
          };
        }
      }, this);
    });

    search(query);
  }

  function search(keywords) {
    // show all scalers by default
    let queryString = index.search("");

    /* Lunr only matches complete words by default. If an exact match fails,
    retry with a trailing wildcard to support prefix matching. */
    if (keywords.length > 0) {
      queryString = index.search(keywords);
      queryString =
        queryString.length <= 0 ? index.search(`${keywords}*`) : queryString;
    }

    const results = queryString;

    if ("content" in template) {
      // show result count
      const title = document.createElement("h3");
      title.id = "search-results";
      title.className = "subtitle is-size-3";

      if (results.length == 0) title.textContent = `No results found`;
      else if (results.length == 1) title.textContent = `Found 1 result`;
      else if (results.length > 1 && keywords === "")
        title.textContent = `${results.length} scalers available`;
      else title.textContent = `Found ${results.length} results`;
      searchResultCount.replaceChildren(title);

      // show the matched result
      results.forEach(function (result) {
        const doc = parse[result.ref];
        const element = template.content.cloneNode(true);
        element.querySelector(".badge").textContent = doc.type;
        element.querySelector(".scaler-title").textContent = doc.title;
        element.querySelector(".scaler-title").setAttribute("href", doc.href);
        if (doc.type === "external") {
          element.querySelector(".badge").style.color = "purple";
        }
        if (doc.description) {
          element.querySelector(".description").textContent = doc.description;
        }
        if (doc.maintainer) {
          element.querySelector(".maintainer").textContent = doc.maintainer;
        }
        if (doc.availability) {
          element.querySelector(".availability").textContent = doc.availability;
        }
        target.appendChild(element);
      }, this);
    }
  }
});


================================================
FILE: assets/js/site.js
================================================
// Anchor link scroll offset — compensates for the fixed navbar.
const navbar = document.getElementsByClassName("navbar")[0];
const navbarHeight = navbar ? navbar.offsetHeight : 0;
const extraPadding = 15;
const navbarOffset = -1 * (navbarHeight + extraPadding);
function shiftWindow() {
  scrollBy(0, navbarOffset);
}
window.addEventListener("hashchange", shiftWindow);
window.addEventListener("pageshow", shiftWindow);
if (window.location.hash) shiftWindow();

// Copy-to-clipboard for FAQ / troubleshooting permalink buttons.
function copyPermalink(id) {
  const url = `${window.location.origin}${window.location.pathname}#${id}`;
  const container = document.getElementById(id);
  if (!navigator.clipboard) {
    console.error("Clipboard API not available");
    return;
  }
  navigator.clipboard.writeText(url).then(() => {
    container.classList.add("copy-text-active");
    setTimeout(() => container.classList.remove("copy-text-active"), 2500);
  }, (err) => {
    console.error("Could not copy text:", err);
  });
}

const copyBtns = document.querySelectorAll(".copyBtn");
copyBtns.forEach((btn) => {
  btn.addEventListener("click", (event) => {
    event.stopPropagation();
    copyPermalink(btn.getAttribute("id"));
  });
});

// Expand collapsed FAQ/troubleshooting section matching the URL hash.
window.addEventListener("DOMContentLoaded", () => {
  "use strict";
  const hash = window.location.hash.slice(1);
  const cardContents = document.querySelectorAll(".card-content-dropdown");
  cardContents.forEach((item) => {
    const id = item.getAttribute("id");
    if (hash === id) {
      item.style.display = "";
    } else {
      item.style.display = "none";
    }
  });
});


================================================
FILE: assets/sass/card.sass
================================================
.card
  height: 100%
  box-shadow: 5px 10px 15px #e4e4e4;
  border-radius: 5px

  display: flex
  flex-direction: column

  &.is-dark
    background-color: $black-bis
    color: $white-bis

  &-content
    flex: 1

  &-is-wrapped
    flex-wrap: wrap
  
  &.is-collapsible
    & + &
      margin-top: 0.5rem


================================================
FILE: assets/sass/content.sass
================================================
.doc-hero
  margin-bottom: 1.5rem

  .title sup
    line-height: 0

.content
  a sup
    margin-left: 0.1rem

  ol li pre
    margin-bottom: 1rem

  .highlight
    margin-bottom: 1rem

  // Allow horizontal scrolling for larger tables
  table
    display: block
    overflow-x: auto
    max-width: 100%

  &.is-constrained
    max-width: 90ch

  &.has-bottom-margin
    margin-bottom: 8rem

  // Headline hashes
  .headline-hash
    display: none
    margin-left: 0.25rem
    color: $secondary

  @for $i from 1 through 6
    h#{$i}
      &:hover > .headline-hash
        display: inline

  figure img
    +desktop
      width: 100%

  @media screen and (min-width: 769px)
    .is-search-result > .column, .is-external-search-result > .column 
      width: 50%


================================================
FILE: assets/sass/nav.sass
================================================
=active
  font-weight: $weight-bold

  a
    color: $primary !important

=split-x
  display: flex
  flex-direction: row
  justify-content: space-between

.nav
  padding-bottom: 2rem

  &-subsection
    &-title
      a
        font-weight: 500
        color: $dark

      +split-x

      &.is-active
        +active

  &-section
    &-title
      a
        font-weight: 600
        color: $dark

      +split-x

      &.is-active
        +active

  &-section, &-subsection
    &-toc
      padding: 0.35rem 0 0.75rem 1rem
      //padding: 0.75rem 0 0.75rem 1rem

      li a
        color: $grey

      ul + ul
        margin-top: 0.3rem

    ul.nav-section-links
      margin: 0.5rem 0 0.75rem 1rem

      li.nav-section-link
        font-size: 1.1rem

        a
          color: $dark

        &.is-active
          +active

        & + li.nav-section-link
          margin-top: 0.4rem

    & + &
      margin-top: 1rem

.docs-menu--desktop
  display: flex

.docs-menu--mobile
  display: none

.scrolled
    background: #1d1c29 !important
    transition: background 1000ms

.navbar-link, .navbar-item
	color: white;

.navbar-link, .navbar-end .navbar-item
	&:hover
		color:#00aeff

.navbar-dropdown .navbar-item
	color: #4a4a4a

@media screen and (max-width: 1024px)
  .is-fixed-top
    overflow: hidden

  .is-left-padded
    padding-left: 40px

  .docs-menu--mobile
    display: flex

  .docs-menu--desktop
    display: none

@media screen and (max-width: 1023px)
  .navbar-link, .navbar-item
    color: $dark


================================================
FILE: assets/sass/style.sass
================================================
@charset "utf-8"


// Site-specific variables here
$keda-blue: #326de6 
$keda-light-blue: #679bf0
$twitter-blue: rgb(29, 161, 242)
$slack-green: #2EB67D
$k8s-blue: #326ce5

// Initial Bulma imports
@import "bulma/sass/utilities/initial-variables"
@import "bulma/sass/utilities/functions"

// Bulma-specific overrides
$primary: $keda-blue
$secondary: $keda-light-blue
$footer-color: $white-bis
$footer-background-color: $black
$navbar-height: 4rem
$navbar-burger-color: $primary
$code: $primary
$code-background: $white-bis
$modal-content-width: 50%
$list-radius: none
$input-icon-color: $secondary
$input-icon-active-color: $primary
$input-color: $black

// Font overrides
{{ if $fonts := site.Params.fonts }}
// Sans-serif font
{{ with (index (where $fonts ".type" "sans_serif") 0).name }}
$family-sans-serif: "{{ . }}", BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif
{{ end }}

// Monospace font
{{ with (index (where $fonts ".type" "monospace") 0).name }}
$family-monospace: "{{ . }}", monospace
{{ end }}
{{ end }}

// Final Bulma imports
@import "bulma/sass/utilities/derived-variables"

$card-border: 1.5px solid $grey-lighter

$colors: mergeColorMaps(("secondary": ($secondary, $white-bis), "slack-green": ($slack-green, $white), "twitter-blue": ($twitter-blue, $white), "orange": ($orange, $white)), $colors)

$card-shadow: none
$card-color: $black
//$card-content-padding: 1.5rem 2rem
//$card-header-padding: 1rem $card-content-padding
$card-shadow: none
$card-header-weight: $weight-bold
$card-header-shadow:  0 0.125em 0.125em rgba($scheme-invert, 0.1)
$card-footer-border-top: $card-border
$message-header-color: $dark !important
$message-body-color: $dark !important
$message-header-padding: 1em 1.25em
$message-body-padding: $message-header-padding
$hero-body-padding: 4rem 1.5rem

// Bulma core
@import "bulma/sass/utilities/_all"
@import "bulma/sass/base/_all"
@import "bulma/sass/elements/container"
@import "bulma/sass/grid/columns"
@import "bulma/sass/grid/tiles"
@import "bulma/sass/layout/hero"
@import "bulma/sass/layout/section"
@import "bulma/sass/layout/footer"

// Elements

// @import "bulma/sass/elements/box"
@import "bulma/sass/elements/button"
@import "bulma/sass/elements/content"
@import "bulma/sass/elements/icon"
// @import "bulma/sass/elements/image"
// @import "bulma/sass/elements/notification"
// @import "bulma/sass/elements/progress"
// @import "bulma/sass/elements/table"
@import "bulma/sass/elements/tag"
@import "bulma/sass/elements/title"
// @import "bulma/sass/elements/other"

// Forms
@import "bulma/sass/form/shared"
@import "bulma/sass/form/input-textarea"
// @import "bulma/sass/form/checkbox-radio"
// @import "bulma/sass/form/select"
// @import "bulma/sass/form/file"
@import "bulma/sass/form/tools"

// Components
// @import "bulma/sass/components/breadcrumb"
@import "bulma/sass/components/card"
@import "bulma/sass/components/dropdown"
@import "bulma/sass/components/level"
@import "bulma/sass/components/list"
@import "bulma/sass/components/media"
@import "bulma/sass/components/menu"
@import "bulma/sass/components/message"
@import "bulma/sass/components/modal"
@import "bulma/sass/components/navbar"
@import "bulma/sass/components/pagination"
// @import "bulma/sass/components/panel"
// @import "bulma/sass/components/tabs"

// Custom CSS
@import "card"
@import "content"
@import "nav"

*, *::before, *::after 
  max-width: 100vw

.has-extra-top-margin
  margin-top: 1.5rem

.has-extra-sm-right-margin
  margin-right: 0.5rem

.list-item
  padding: 1rem 1.5rem

  .content
    margin-top: 0.5rem
  
.title, .subtitle
  &.has-shadow
    text-shadow: 0 0 10px #000

.card
  &.is-borderless
    border: none

  &.has-extra-bottom-margin
    margin-bottom: 2rem

.has-mouse-icon
  &:hover
    cursor: pointer

.is-sticky
  position: sticky
  position: -webkit-sticky
  top: $navbar-height + 2.5rem

.is-page
  display: flex
  flex-direction: column
  min-height: 100vh

  .is-main
    flex: 1
    overflow: hidden

=logo($desk, $tab, $touch)
  +desktop
    width: $desk
  +tablet-only
    width: $tab
  +mobile
    width: $touch

.is-cncf-logo
  +logo(40%, 20%, 70%)

.is-hero-logo
  +logo(75%, 80%, 50%)

.is-footer-logo
  +logo(40%, 60%, 40%)

.is-org-logo
  width: auto
  max-height: 8rem

.is-bold-letter
  color: $secondary
  border-bottom: 4px solid $primary

.title
  .icon
    margin-left: 0.75rem

.has-background-pattern
	background-color: transparent 
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1600 800'%3E%3Cg stroke='%23000' stroke-width='66.7' stroke-opacity='0.05' %3E%3Ccircle fill='%2324CEFF' cx='0' cy='0' r='1800'/%3E%3Ccircle fill='%232fc2f4' cx='0' cy='0' r='1700'/%3E%3Ccircle fill='%2337b6e8' cx='0' cy='0' r='1600'/%3E%3Ccircle fill='%233daadc' cx='0' cy='0' r='1500'/%3E%3Ccircle fill='%23419ecf' cx='0' cy='0' r='1400'/%3E%3Ccircle fill='%234492c2' cx='0' cy='0' r='1300'/%3E%3Ccircle fill='%234587b5' cx='0' cy='0' r='1200'/%3E%3Ccircle fill='%23467ca8' cx='0' cy='0' r='1100'/%3E%3Ccircle fill='%2345719b' cx='0' cy='0' r='1000'/%3E%3Ccircle fill='%2344668e' cx='0' cy='0' r='900'/%3E%3Ccircle fill='%23425c81' cx='0' cy='0' r='800'/%3E%3Ccircle fill='%233f5274' cx='0' cy='0' r='700'/%3E%3Ccircle fill='%233b4867' cx='0' cy='0' r='600'/%3E%3Ccircle fill='%23363f5a' cx='0' cy='0' r='500'/%3E%3Ccircle fill='%2331364e' cx='0' cy='0' r='400'/%3E%3Ccircle fill='%232c2d42' cx='0' cy='0' r='300'/%3E%3Ccircle fill='%23252536' cx='0' cy='0' r='200'/%3E%3Ccircle fill='%231F1D2B' cx='0' cy='0' r='100'/%3E%3C/g%3E%3C/svg%3E") 
	background-attachment: fixed 
	background-size: cover 

.has-extra-padding
  margin: 1.5rem 0


.is-youtube-embed
  width: 100%
  height: 20rem

.pagination
  &.has-bottom-margin
    margin-bottom: 4rem

.footer
  .buttons
    +touch
      margin-top: 1rem

  a
    color: $secondary

    &:hover
      color: #00aeff
	
#cncf
	&:hover 
		color: #00aeff

hr
  &.is-thick
    margin: 3rem 0

.subtitle
  a
    color: $secondary !important

    &:hover
      color: $keda-blue !important

.navbar-item
  .icon
    margin-left: 0.1rem

.buttons
  &.are-spaced
    .button:not(:first-child)
      margin-left: 0.5rem
	
.has-no-shadow 
	box-shadow: none !important

.is-info-light
	background: hsl(206, 70%, 96%)

.badge
  border: 1px solid #dbdbdb
  border-radius: 20px
  padding: 3px 6px
  color: blue
  font-size: 1rem

.copyBtn 
  padding: 10px
  background: none
  height: 50%
  margin-right: 10px
  margin-top: 5px
  color: #ffffff
  font-size: 18px
  border: none
  outline: none
  border-radius: 10px
  cursor: pointer
  &:focus
      outline: 2px solid #5784f5
  &:hover
      outline: 2px solid #5784f5
  &:active
      background: #809ce2
  &:before
      content: "Copied"
      position: absolute
      top: -45px
      right: 0px
      background: #5c81dc
      padding: 8px 10px
      border-radius: 20px
      font-size: 15px
      display: none
  &:after
      content: ""
      position: absolute
      top: -20px
      right: 25px
      width: 10px
      height: 10px
      background: #5c81dc
      transform: rotate(45deg)
      display: none

.copy-text-active .copyBtn:before, .copy-text-active .copyBtn:after,
  display: block

@media screen and (max-width: 1024px)
  .section
    width: 100vw
	
.underline--magical
  background-image: linear-gradient(to right, rgb(250, 112, 154) 0%, rgb(254, 225, 64) 100%)
  background-repeat: no-repeat
  background-size: 100% 0.2em
  background-position: 0 88%
  transition: background-size 0.25s ease-in-out
  &:hover
    background-size: 100% 88%

.underline--magical-1
  background-image: linear-gradient(to right, #B2FEFA 0%, #0ED2F7 100%)
  background-repeat: no-repeat
  background-size: 100% 0.2em
  background-position: 0 88%
  transition: background-size 0.25s ease-in-out
  &:hover
    background-size: 100% 88%

.underline--magical-2
  background-image: linear-gradient(to right, #E29587 0%, #D66D75 100%)
  background-repeat: no-repeat
  background-size: 100% 0.2em
  background-position: 0 88%
  transition: background-size 0.25s ease-in-out
  &:hover
    background-size: 100% 88%

.underline--magical-3
  background-image: linear-gradient(to right, #A7BFE8 0%, #6190E8 100%)
  background-repeat: no-repeat
  background-size: 100% 0.2em
  background-position: 0 88%
  transition: background-size 0.25s ease-in-out
  &:hover
    background-size: 100% 88%

.underline--magical-4
  background-image: linear-gradient(to right, #F8FFAE 0%, #43C6AC 100%)
  background-repeat: no-repeat
  background-size: 100% 0.2em
  background-position: 0 88%
  transition: background-size 0.25s ease-in-out
  &:hover
    background-size: 100% 88%

.underline--magical-5
  background-image: linear-gradient(to right, #FDB99B 0%, #CF8BF3 100%)
  background-repeat: no-repeat
  background-size: 100% 0.2em
  background-position: 0 88%
  transition: background-size 0.25s ease-in-out
  &:hover
    background-size: 100% 88%
 
@media screen and (min-width: 769px)
  .md-height-desktop
      height: 9rem

  .filter-icon
    display: none

  .filter-options
    display: inline-block

  .filter-pane
    padding-left: 0
    padding-top: 20px

@media screen and (max-width: 769px)
  .filter-icon
      padding: 0.5rem
      cursor: pointer
      border: 1px solid #DBDBDB
      font-size: 18px
      border-radius: 0.4rem
      display: inline-block
      &:hover
        border: 1px solid #000000

  .filter-options
    display: none

  .filter-pane
    padding-left: 20px
    padding-top: 10px


================================================
FILE: content/blog/2020-03-31-keda-cncf-sandbox.md
================================================
+++
title = "Kubernetes Event-driven Autoscaling (KEDA) is now an official CNCF Sandbox project 🎉"
date = 2020-03-31
author = "KEDA Maintainers"
aliases = [
    "/blog/keda-cncf-sandbox/"
]
+++

Over the past year, We've been contributing to Kubernetes Event-Driven Autoscaling (KEDA), which makes application autoscaling on Kubernetes dead simple. If you have missed it, read about it in our ["Exploring Kubernetes-based event-driven autoscaling (KEDA)"](https://blog.tomkerkhove.be/2019/06/11/a-closer-look-at-kubernetes-based-event-driven-autoscaling-keda/) blog post.

We started the KEDA project to address an essential missing feature in the Kubernetes autoscaling story. Namely, the ability to autoscale on arbitrary metrics. Before KEDA, users were only able to autoscale based on metrics such as memory and CPU usage. While these values are essential for autoscaling, they disregard a rich world of external metrics from sources such as Azure, AWS, GCP, Redis, and Kafka (among many more).

To address this need, KEDA provides a simple, unified API to autoscale deployments without  an in-depth knowledge of Kubernetes internals. With KEDA, users can now treat their Kubernetes deployments like FaaS or PaaS applications with ease!

In the incredible year since we announced KEDA publicly, adoption has been increasing, and every week we find more passionate and excited members in our weekly community standups. Members of the Kubernetes community have been incredibly accepting. They have been providing feedback, contributing features, and offering great suggestions for the future of our project.

On November 19, 2019, we released [Kubernetes Event-Driven Autoscaling (KEDA) v1.0](https://cloudblogs.microsoft.com/opensource/2019/11/19/keda-1-0-release-kubernetes-based-event-driven-autoscaling/). This release introduced a ton of features including support for multiple workloads (deployments & jobs), simplified deployment with Helm, documentation on [keda.sh](https://keda.sh/), and (my personal favorite) enterprise-class security with TriggerAuthentication CRD (which allows you to use pod identities such as Azure Managed Identity for pods).

Over time our community has grown - More and more companies such as IBM, Pivotal, VMware, [Astronomer](https://www.astronomer.io/),  and more started contributing to KEDA, we are collaborating with [Knative project](https://knative.dev/) to provide seamless integration with each other and our user base started growing with companies such as, [Purefacts](https://www.purefacts.com/), [SwissRe](https://www.swissre.com/) and more!

We want to give KEDA more room to grow independently and ensure it has a vendor-agnostic focus. That's why on Jan 14, 2020, we proposed KEDA to  the CNCF as a new Sandbox project.

**Today, we are happy to announce that KEDA is now an [official CNCF Sandbox project](https://www.cncf.io/sandbox-projects/)!** By contributing KEDA to the CNCF we hope to ensure the adoption of KEDA continues to increase and hope to see more companies contribute scalers, integrate it in their products and give it a neutral home. This is a major step and I'm sure the best is yet to come.

We would love to explicitly thank Liz Rice, Michelle Noorali & Xiang Lifor being our CNCF TOC sponsors and supporting KEDA as well as SIG-Runtime, especially Ricardo Aravena, for recommending us to TOC!

So... what's next?

In the near-term, we plan to focus on two major topics:  Autoscaling HTTP workloads and scalers!

Currently, we do not support HTTP-based autoscaling out-of-the-box, so we hope to create on a Service Mesh Interface (SMI) scaler for autoscaling service mesh workloads!

In parallel, we have started plans for implementing add-on scalers. What are add-on scalers? We’re glad you've asked! Add-on scalers make it easy for users to define custom [external scalers](https://keda.sh/scalers/external/) without needing to contribute code to KEDA directly. One example of an external scaler is the [Azure Durable Function scaler](https://github.com/kedacore/keda-scaler-durable-functions).

As this project evolves, our main focus will be to provide guidelines around when to add a scaler to the core and when  to offer it as an external add-on. Next to that, we can create a centralized hub for all add-on scalers to improve discoverability similar to what [Helm Hub](https://hub.helm.sh/) provides.

We have a lot of ideas and plans but we mainly are interested in what you want! Are you missing scalers, features or capabilities? Let us know!

Thanks for reading, and happy scaling!

KEDA Maintainers.


================================================
FILE: content/blog/2020-09-11-keda-2.0-beta.md
================================================
+++
title = "Give KEDA 2.0 (Beta) a test drive"
date = 2020-09-11
author = "KEDA Maintainers"
aliases = [
    "/blog/keda-2.0-beta/"
]
+++

Today, we are happy to share that our first **beta version of KEDA 2.0 is available**! 🎊

# Highlights

With this release, we are shipping majority of our planned features.

Here are some highlights:

- **Making scaling more powerful**
    - Introduction of `ScaledJob` ([docs](https://keda.sh/docs/2.0/concepts/scaling-jobs/))
    - Introduction of  Azure Log Analytics scaler ([docs](https://keda.sh/docs/2.0/scalers/azure-log-analytics/))
    - Support for scaling Deployments, Stateful Sets and/or any Custom Resources ([docs](https://keda.sh/docs/2.0/concepts/scaling-deployments/))
    - Support for scaling on standard resource metrics (CPU/Memory)
    - Support for multiple triggers in a single `ScaledObject` ([docs](https://keda.sh/docs/2.0/concepts/scaling-deployments/))
    - Support for scaling to original replica count after deleting `ScaledObject` ([docs](https://keda.sh/docs/2.0/concepts/scaling-deployments/))
    - Support for controlling scaling behavior of underlying HPA
- **Easier to operate KEDA**
    - Introduction of readiness and liveness probes
    - Introduction of Prometheus metrics for Metrics Server ([docs](https://keda.sh/docs/2.0/operate/))
    - Provide more information when querying KEDA resources with `kubectl`
- **Extensibility**
    - Introduction of External Push scaler ([docs](https://keda.sh/docs/2.0/scalers/external-push/))
    - Introduction of Metric API scaler ([docs](https://keda.sh/docs/2.0/scalers/metrics-api/))
    - Provide KEDA client-go library

For a full list of changes, we highly recommend going through [our changelog](https://github.com/kedacore/keda/blob/v2/CHANGELOG.md#v200)! With our stable release, we'll provide a full overview of what's released in a new blog post.

# Getting started

Get started now, and install our beta with Helm:

>`$ helm repo add kedacore https://kedacore.github.io/charts`

>`$ kubectl create namespace keda`

>`$ helm install keda kedacore/keda --namespace keda --version 2.0.0-beta1.2`

As an alternative, you can use our deployment YAML:

>`$ kubectl apply -f https://github.com/kedacore/keda/releases/download/v2.0.0-beta/keda-2.0.0-beta.yaml`

# Migrating to KEDA 2.0

We want it to be super simple to use 2.0 as an existing customer! But what has changed?

- API namespace for KEDA Custom Resources Definitions (CRD) has changed from `keda.k8s.io` to `keda.sh`
- Scaling jobs is now done through `ScaledJob` CRD, instead of `ScaledObject` CRD
- `ScaledObject` is now using `spec.scaleTargetRef.name`, instead of `spec.scaleTargetRef.deploymentName`
- `ScaledObject` no longer requires `deploymentName` label _(last couple of v1 releases were already ignoring it)_

Learn more on how to migrate by using our [migration guide](https://keda.sh/docs/2.0/migration/)!

With our official release we will provide [migration scripts](https://github.com/kedacore/keda/issues/946) allowing you to migrate your KEDA resources automatically.

> **⚠ Running KEDA 1.x & 2.0 Beta side-by-side is not supported.**
> 
> KEDA comes with a metrics server and Kubernetes only allows you to run one of them in a cluster.
> 
>*Learn more about how KEDA is architected in [our docs](https://keda.sh/docs/concepts/#keda-architecture).*

# Conclusion

We are looking forward to hearing your feedback:

- What do you like and/or what could be improved?
- What issues did you find?
- How can the migration be smoother?

While we are eagerly waiting for feedback, we plan to release KEDA 2.0 stable around early September, 2020!

Thanks for reading, and happy scaling!

KEDA Maintainers.


================================================
FILE: content/blog/2020-11-04-keda-2.0-release.md
================================================
+++
title = "Announcing KEDA 2.0 - Taking app autoscaling to the next level"
date = 2020-11-04
author = "KEDA Maintainers"
aliases = [
    "/blog/keda-2.0-release/"
]
+++

A year ago, we were excited to **announce our 1.0 release with a core set of scalers**, allowing the community to start autoscaling Kubernetes deployments.  We were thrilled with the response and encouraged to see many users leveraging KEDA for event driven and serverless scale within any Kubernetes cluster.

With KEDA, any container can scale to zero and burst scale based directly on event source metrics.

![Logo](/img/logos/keda-horizontal-color.png)

While KEDA was initially started by Microsoft & Red Hat **we have always strived to be an open & vendor-neutral project** in order to support everybody who wants to scale applications.

That's why earlier this year we donated and were accepted as a CNCF Sandbox project. We feel this is a strong signal to the community to fully align with the CNCF open mindset and vendor neutrality.

**Since KEDA 1.0 was released we’ve been growing** with new scalers for many different sources including IBM MQ, Postgres, and Huawei Cloudeye, supporting new authentication providers such as HashiCorp Vault, and constantly improving the user experience to make application auto scaling dead-simple.

Today, we are happy to announce another milestone - **KEDA 2.0 is now generally available and ready to scale all your workloads!** 🎊

## Getting started

There are many ways to get started with KEDA:

- Install with [OperatorHub.io](https://operatorhub.io/operator/keda)

- Install with Helm:

>$ helm repo add kedacore https://kedacore.github.io/charts
>
>$ kubectl create namespace keda
>
>$ helm install keda kedacore/keda --namespace keda --version 2.0.0

- Install with deployment YAML:

> $ kubectl apply -f https://github.com/kedacore/keda/releases/download/v2.0.0/keda-2.0.0.yaml

Want to see it in action? Try one of [our samples](https://github.com/kedacore/samples#keda-20).

## What’s new? 🚀

KEDA 2.0 brings a ton of improvements and fixes. Please check the [changelog](https://github.com/kedacore/keda/blob/main/CHANGELOG.md#v200) to see the full list of changes and improvements in this release.

There are two types of workloads that can be autoscaled in Kubernetes cluster: a deployment-like workload or job-like workload. KEDA 1.x supported scaling of both types by specifying it in the ScaledObject resource, and was limited to only scaling Kubernetes `Deployment` or `Jobs` resources.

With KEDA 2.0 we have split both options and introduce a separate resource to describe both types, to better accommodate different needs for the configuration and behavior - **ScaledObject and ScaledJob resources**.

KEDA 2.0 brings another long awaited feature, **you can specify multiple triggers on one ScaledObject/ScaledJob**, this way your workload can be autoscaled based on different triggers (eg. Kafka and Prometheus), KEDA will select the maximum value from the scalers to define the scaling decision, ie. the target number of replicas.

### ScaledObject improvements

ScaledObject describes the specification for deployment-like workloads. And we are not talking just about `Kubernetes Deployments`, with **KEDA 2.0 you can scale `StatefulSets` or any other `CustomResource` that implements `/scale` subresource (eg. Argo Rollouts)**. This brings more scenarios and use cases that could benefit from KEDA and its autoscaling capabilities. Users can simply implement /scale endpoint on their Custom Resources and get autoscaling working out of the box!

If you are running KEDA on Kubernetes version >= 1.18, you can benefit from configurable scaling behavior, which allows you to **specify the behavior for scaling up and down**. This exposes these new capabilities of the Kubernetes Horizontal Pod Autoscaler to KEDA.

### Introducing ScaledJob

As mentioned earlier, KEDA 2.0 brings a separate custom resource for scaling of `Kubernetes Jobs`. This allows us to accommodate and simplify the specification and configuration, as scaling `Jobs` has different needs than scaling deployment-like workloads.

Scaling Jobs can have different use cases and those could be even different with different scalers. That’s why ScalingStrategy for ScaledJobs was introduced in KEDA 2.0, which allows users to **select different strategies for scaling of Kubernetes Jobs**.

### New scalers

KEDA 2.0 introduces **new scalers** for you to use.

For starters, our community worked together to add **Azure Log Analytics & IBM MQ scalers**.

By using our new CPU / Memory scaler you no longer have to mix & match Horizontal Pod Autoscalers (HPA) & ScaledObjects anymore - You can now **fully standardize on KEDA and we’ll handle all the HPAs for you!**

With our new **external push scaler**, you can build your own scaler and **trigger scaling actions in KEDA by using a push-model for more reactive autoscaling**, instead of a pull-model with our current pull-based model in our external scaler.

Finally, with our new **Metrics API scaler you can automatically scale on metrics provided through a REST API** without having to build your own scaler. This allows you to make autoscaling decisions based on a metric source that is available in your landscape (for example an in-house API or Microsoft Dynamics CRM API to automate processes).

On top of these new scalers, we’ve made a variety of improvements to the current scalers to optimize our scaling.

### Operations & Extensibility

KEDA now exposes **Liveness and Readiness probes** on both Operator and Metrics server pods, so administrators have a better overview of the state and health of KEDA.

KEDA Metrics Server now **exposes Prometheus metrics about each used scaler**. Currently these metrics work with ScaledObject metrics when the HorizontalPodAutoscaler is active (> 0 replicas). In further releases of KEDA there are plans to extend this capability and serve metrics for ScaledJobs as well.

Developers can now use a **go-client library** that is [exposed](https://github.com/kedacore/keda/tree/main/pkg/generated) to allow easy manipulation of the KEDA API from within applications.

## Migrating to KEDA 2.0

We want it to be super simple to use 2.0 as an existing customer! But what has changed?

We’re making some general changes:

- API namespace for KEDA Custom Resources Definitions (CRD) has changed from `keda.k8s.io` to `keda.sh`
- Scaling jobs is now done through `ScaledJob` CRD, instead of `ScaledObject` CRD
- `ScaledObject` is now using `spec.scaleTargetRef.name`, instead of `spec.scaleTargetRef.deploymentName`
- `ScaledObject` no longer requires `deploymentName` label _(last couple of v1 releases were already ignoring it)_

In order to provide a more consistent experience across all scalers, we’re introducing improved flexibility & usability of trigger metadata for which we had to do some [cross-scaler breaking changes](https://keda.sh/docs/2.0/migration/#improved-flexibility--usability-of-trigger-metadata) as well as improvements for [Azure Service Bus, Kafka & RabbitMQ scalers](https://keda.sh/docs/2.0/migration/#scalers).

Learn more about how to migrate by using our [migration guide](https://keda.sh/docs/2.0/migration/)!

> **⚠ Running KEDA 1.x & 2.0 side-by-side is not supported.**
>
> KEDA comes with a metrics server and Kubernetes only allows you to run one of them in a cluster.
>
>*Learn more about how KEDA is architected in [our docs](https://keda.sh/docs/concepts/#keda-architecture).*

## KEDA 💘 Community

**KEDA would not have been what it is today without our great community** - They have helped us shape our KEDA 2.0 release with their feature request, contributions, testing our release candidates and their support!

It is wonderful to see how **more and more people from [across the globe](https://keda.devstats.cncf.io/d/50/countries-statistics-in-repository-groups?orgId=1&var-period_name=Quarter&var-countries=All&var-repogroup_name=All&var-metric=contributions&var-cum=countries) start to contribute back** from companies such as IBM, Oracle, Pivotal, Polidea, Tripadvisor, VMWare, Zapier and [so many more](https://keda.devstats.cncf.io/d/4/company-statistics-by-repository-group?orgId=1&var-period=m&var-metric=activity&var-repogroup_name=All&var-companies=All) - We could not have done this without them!

We’re honored to see other technologies adopting KEDA to use in their own products, here are a few of them:

- **Apache Airflow & Astronomer** are using KEDA to autoscale workflows. ([blog post](https://www.astronomer.io/blog/the-keda-autoscaler/))
- **Dapr** is recommending KEDA to autoscale Dapr apps ([walkthrough](https://docs.dapr.io/developing-applications/integrations/autoscale-keda/) & [sample](https://github.com/dapr/samples/blob/master/functions-and-keda/README.md))
- **Fission** is building a catalog of KEDA connectors to scale their serverless functions on Kubernetes ([GitHub](https://github.com/fission/keda-connectors))
- **Knative** is using KEDA to autoscale Knative Event Sources ([GitHub](https://github.com/knative-sandbox/eventing-autoscaler-keda))

We are super thankful that these companies and technologies have adopted KEDA:

{{< user-icons >}}

Another user of KEDA is Alibaba Cloud who has adopted KEDA for all their autoscaling:

> “Alibaba's [Enterprise Distributed Application Service (EDAS)](https://www.alibabacloud.com/product/edas) which is built with [KubeVela](https://github.com/oam-dev/kubevela/) project adopts KEDA as the implementation for its auto-scaling trait (see: [trait system of Open Application Model](https://github.com/oam-dev/spec/blob/master/6.traits.md)) from mid of 2020. In Alibaba, EDAS has served more than 1000+ applications from both Alibaba Cloud's customers and internal scenarios. EDAS's KEDA based auto-scaling trait uses Alibaba's ARMS (i.e. Application Real-Time Monitoring Service) as the trigger by default, and it's also under integration with AIOps system of EDAS for advanced scenarios such as capacity diagnose based auto-scaling.”
>
> -- *Yan Xun, Senior Engineer of Alibaba Cloud*

Are you using KEDA in production as well? Don’t hesitate and [let us know](https://github.com/kedacore/keda#become-a-listed-keda-user)!

## Looking ahead 🧭

We’ve been working on this milestone for a while and are happy to finally be able to officially release KEDA 2.0! But we’re not stopping there and have already started working on v2.1.

Transparency is essential to become a successful open-source project and we want to be open on the future of KEDA. Because of that, we’re introducing a **public high-level roadmap of KEDA** ([link](https://github.com/kedacore/keda/projects/3)) allowing you to get an idea of where we are going with the project and allow you to provide suggestions so we can adapt.

Next, we are going to **further improve KEDA as a project and focus on making it more robust** by introducing a security policy, automated vulnerability scanning, and such to ensure we are shipping secure software so that you don’t have to worry about it.

As KEDA continues to grow, many organizations have contributed back and shared a number of very interesting use cases that rely on KEDA. We are working on writing a reference case to show the value of KEDA for customers.

As we continue to work with the community, our goal is to **propose to graduate to CNCF Incubation** ([issue](https://github.com/kedacore/keda/issues/1143)) **later this year / early next year**. Any support we can get from the community will be extremely helpful as we move to make the next steps in bringing the benefits of KEDA to every user.

Last but not least, we want people to be able to show their support for KEDA and are working on **providing merchandise** that you can purchase which you can wear with pride! Sit back and wait for our swag to show up.

Thanks for reading, and happy scaling!

KEDA Maintainers.


================================================
FILE: content/blog/2021-03-26-migrating-to-github-container-registry.md
================================================
+++
title = "Migrating our container images to GitHub Container Registry"
date = 2021-03-26
author = "KEDA Maintainers"
aliases = [
    "/blog/migrating-to-github-container-registry/"
]
+++

We provide **various ways to [deploy KEDA](https://keda.sh/docs/latest/deploy/) in your cluster** including by using [Helm chart](https://github.com/kedacore/charts), [Operator Hub](https://operatorhub.io/operator/keda) and raw YAML specifications.

These deployment options all rely on the container images that we provide which are available on **[Docker Hub](https://hub.docker.com/u/kedacore), the industry standard for public container images**.

However, we have found that Docker Hub is no longer the best place for our container images and are migrating to GitHub Container Registry (Preview).

## Why are making this change?

### Docker Hub is introducing rate limiting and image retention

Over the past couple of years, Docker Hub has become the industry standard for hosting public container images. This has become a big burden for Docker to manage all the traffic and decided in 2020 to make some changes:

- Anonymous image pulls are being rate limited
- Unused images will no longer be retained

Because we want to ensure that our end-users can use KEDA without any issues, we want to make them available to anyone without any limitations.

Learn more about these changes in [Docker's FAQ](https://www.docker.com/pricing/resource-consumption-updates) and our issue on [GitHub](https://github.com/kedacore/keda/issues/995).

### Gaining insights on KEDA adoption

As maintainers, **we find it hard to measure the adoption of KEDA** to understand how many end-users are using older versions of KEDA and what the growth is over time.

Docker Hub provides a vague total pull count per container image, but it does not give in-depth details concerning the tags and what the pull growth is over time.

In GitHub Container Registry, however, **metrics are provided out-of-the-box on a per-tag basis** allowing us to better understand what our customers are using and make better decisions when we no longer support a given version.

### Bringing our artifacts closer to home

Lastly, we want to **bring our artifacts closer to our home on GitHub**. By using more of the GitHub ecosystem, we believe that this integration will only improve and get tighter integration with our releases and such.

## What is changing?

Our container images are being published on [GitHub Container Registry](https://github.com/orgs/kedacore/packages?type=source) for end-users to pull them.

Because of this, the names of our container images are changing:

| Component      | New Image (GitHub Container Registry)     | Legacy Image (Docker Hub)         |
| :------------- | :---------------------------------------- | --------------------------------- |
| Metrics Server | `ghcr.io/kedacore/keda-metrics-apiserver` | `kedacore/keda-metrics-apiserver` |
| Operator       | `ghcr.io/kedacore/keda`                   | `kedacore/keda`                   |

## When is this taking place?

As of v2.2, we have started publishing our new container images to GitHub Container Registry in parallel to Docker Hub.

This allows customers to already migrate to our new registry and consume our artifacts there.

**Once GitHub Container Registry becomes generally available (GA), we will no longer publish new versions to Docker Hub.**

## What is the impact for end-users?

**If you are using one of our deployment options, end-users are not be impacted.**

Since v2.2, we are using GitHub Container Registry by default and you are good to go.

If you are using your own deployment mechanism, then you will have to pull the container images from GitHub Container Registry instead.

## Join the conversation

Do you have questions or remarks? Feel free to join the conversation on [GitHub Discussions](https://github.com/kedacore/keda/discussions/1700).

Thanks for reading, and happy scaling!

KEDA Maintainers.

================================================
FILE: content/blog/2021-04-06-why-alibaba-cloud-uses-keda-for-app-autoscaling.md
================================================
+++
title = "Why Alibaba Cloud uses KEDA for application autoscaling"
date = 2021-04-06
author = "Yan Xun, Andy Shi, and Tom Kerkhove"
aliases = [
    "/blog/why-alibaba-cloud-uses-keda-for-app-autoscaling/"
]
+++

> This blog post was initially posted on [CNCF blog](https://www.cncf.io/blog/2021/03/30/why-alibaba-cloud-uses-keda-for-application-autoscaling/) and is co-authored by Yan Xun, Senior Engineer from Alibaba Cloud EDAS team & Andy Shi, Developer Advocator from Alibaba Cloud.

When scaling Kubernetes there are a few areas that come to mind, but if you are new to Kubernetes this can be a bit overwhelming.

In this blog post; we will briefly explain the areas that need to be considered, how KEDA aims to make application auto-scaling simple, and why Alibaba Cloud’s [Enterprise Distributed Application Service (EDAS)](https://www.alibabacloud.com/product/edas) has fully standardized on KEDA.

## An introduction to scaling Kubernetes

When managing Kubernetes clusters & applications, you need to carefully monitor a variety of things such as :

- **Cluster capacity** – Do we have enough resources available to run our workloads?
- **App Workload** – Does the application have enough resources available? Can it keep up with the pending work (ie. queue depth)

In order to automate this, you’d typically set up alerts to get notified or even use auto-scaling. Kubernetes is a great platform and helps you with this out-of-the-box.

**Scaling your cluster** can be easily done by using the **Cluster Autoscaler** component that will monitor your cluster for pods that are unable to be scheduled due to resource starvation and start adding/removing nodes accordingly.

Since Cluster Autoscaler only kicks in when your pods are over-scheduled, you may have a time gap during which your workloads are not up and running.

**Virtual Kubelet**, a CNCF sandbox project, is a tremendous help that allows you to add a “virtual node” to your Kubernetes cluster on which pods can be scheduled.

![Virtual Kubelet](/img/blog/alibaba-cloud-ref-case/virtual-kubelet.png)

By doing this, platform providers (such as Alibaba, Azure, HashiCorp and [others](https://github.com/virtual-kubelet/virtual-kubelet#providers)) allow you to **overflow your pending pods outside of your cluster until it provides the required cluster capacity to mitigate this issue**.

In addition to scaling the cluster, Kubernetes allows you to easily **scale your application**:

- Horizontal Pod Autoscaler ([HPA](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)) allows you to add/remove more pods to your workloads to scale in/out (adding or removing replicas)
- Vertical Pod Autoscaler ([VPA](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler)) allows you to add/remove resources to your pods to scale up/down (adding or removing CPU or memoru)
All of this combined gives you a very good starting point to scale your application.

## The limitations of Horizontal Pod Autoscaler (HPA)

While the HPA is a great place to start, it is mainly focused on metrics of the pods themselves allowing you to scale it based on CPU & memory. That said, you can fully configure how it should be autoscaled which makes it powerful.

While that is ideal for some workloads, you’d typically want to scale on metrics that are available somewhere else such as Prometheus, Kafka, a cloud provider, or other events.

Thanks to the [external metric support](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/hpa-external-metrics.md), users can install metric adapters that serve a variety of metrics from external services and make them available to autoscale on by using a metric server.

There is one caveat, though, you can only run one metric server inside your cluster which means that you’ll have to choose where your custom metrics come from.

![Standard App Autoscaling](/img/blog/alibaba-cloud-ref-case/vanilla-autoscaling.png)

You could use Prometheus and use tools, such as Promitor, to bring your metrics from other providers and use that as a single-source-of-truth to scale on but that requires a lot of plumbing and work to scale.

There must be a simpler way… Yes, use Kubernetes Event-Driven Autoscaling (KEDA)!

## What is Kubernetes Event-Driven Autoscaling (KEDA)?

Kubernetes Event-Driven Autoscaling (KEDA) is a single-purpose event-driven autoscaler for Kubernetes that can be easily added to your Kubernetes cluster to scale your applications.

It aims to make application auto-scaling dead-simple and optimize for cost by supporting scale-to-zero.

KEDA takes away all the scaling infrastructure and manages everything for you, allowing you to scale on 30+ systems or extend it with your own scalers.

Users only need to create a ScaledObject or ScaledJob that defines what you want to scale and what triggers you want to use; KEDA will handle all the rest!

![App Autoscaling with KEDA](/img/blog/alibaba-cloud-ref-case/keda-autoscaling.png)

And you can literally scale anything; even if it’s a CRD from another tool you are using, as long as it implements /scale subresource.

So, does KEDA reinvent the wheel? No! Instead, it extends Kubernetes by using HPAs under the hood that use our external metrics which are served from our own metrics adapter that replaces all the other adapters.

![KEDA Architecture](/img/blog/alibaba-cloud-ref-case/architecture.png)

Last year, KEDA joined the CNCF as CNCF Sandbox project and is planning to propose to graduate to Incubation later this year.

## Introduce Alibaba’s practice based on OAM/KubeVela and KEDA

As the major enterprise PaaS offering on Alibaba Cloud, [Enterprise Distributed Application Service (EDAS)](https://www.alibabacloud.com/product/edas) has been serving countless developers on the public cloud with massive scale for years. From an architectural perspective, EDAS is built with the [KubeVela project](https://kubevela.io/). Its overall architecture is like the below.

![EDAS Overview](/img/blog/alibaba-cloud-ref-case/edas-overview.png)

In production, EDAS integrated ARMS monitoring service on Alibaba Cloud to provide monitoring and fine-grained metrics of the application.

EDAS team added an ARMS Scaler to the KEDA project to perform autoscaling. They also added a couple of features and fixed some bugs in the KEDA v1 release. Including:

- When there are multiple Triggers, the values will be summed up rather than leaving them as individual values.
- When creating KEDA HPA, the length of the name will be limited to 63 characters to avoid triggering DNS complaints.
- Triggers can not be disabled and this might cause trouble in production.

EDAS team is actively working on sending these fixes to KEDA upstream, though some of them have already been added to the V2 release.

## Why Alibaba Cloud standardized on KEDA as their application autoscaler

When it comes to auto-scaling features, EDAS originally used the upstream Kubernetes HPA with the CPU and Memory as the two metrics in the beginning. However, as the user base grows and requirement diversifies, the EDAS team soon found the limitations of the upstream HPA:

1. **Limited support for customized metrics, especially for application-level fine-grained metrics**
The upstream HPA focuses on the container level metrics, such as CPU and Memory, which is too coarse for the applications. Metrics that reflect the application loads, such as RT and QPS are not supported out of the box. Yes, HPA can be extended. However, that capability is limited when it comes to application-level metrics. EDAS team was often forced to fork code when trying to introduce fine-grained application-level metrics.
2. **No support for scale-to-zero**
Many users have the requirement of Scale to Zero when their microservices are not being consumed. This requirement is not limited just to FaaS/Serverless workloads. It saves costs and resources for all users. Currently, upstream HPA doesn’t support this feature.
3. **No support for scheduled scaling**
Another strong requirement from the EDAS users is the scheduled scaling capability. Again, upstream HPA doesn’t provide this feature, and the EDAS team needs to look for non-vendor lock alternatives.
Based on those requirements, the EDAS team started planning the new version of EDAS auto-scaling feature. In the meantime, EDAS went through an overhaul of its underlying core components by introducing OAM at the beginning of 2020. OAM gives EDAS the standardized, pluggable application definition to replace its in-house Kubernetes Application CRD. And the extensibility of this model makes it possible for EDAS to integrate with any new capability from the Kubernetes community with ease. In that context, the EDAS team tried to align the need for new auto-scaling features for EDAS with looking for a standard implementation for OAM’s autoscaling trait.

Base on the use cases, the EDAS team summarized three criteria:

1. The auto-scaling feature should present itself as a simple atomic capability without attachment to any complex solutions.
2. The metrics should be pluggable, so the EDAS team can customize it and build on top of it to support various requirements.
3. It should support Scale to Zero out of the box.

After detailed evaluation, the EDAS team picked the project KEDA, which was open-sourced by Microsoft & Red Hat and has been donated to CNCF. KEDA has several useful Scalers that come by default and supports Scale to Zero out of the box. It provides fine-grained auto scaling for applications. It has the concept of Scalar and Metrics adapter, which enables powerful plugin architecture while providing a unified API layer. Most importantly, the design of KEDA focuses on autoscaling only so it can be integrated as an OAM trait at ease. Overall, KEDA is a good fit for EDAS.

## Looking Ahead

As the next step, Alibaba is actively working on making KEDA trait driven by AIOps, with the goal to bring intelligent decision making to its autoscaling behavior. This will essentially enable autoscaling decisions based on expert system and historical data analysis with leverage of newly implemented application QoS trigger and database metrics trigger etc in Alibaba’s KEDA components. Thus, we will expect a more powerful, intelligent, and stable KEDA based auto-scaling capability will be shipped in KEDA soon.


================================================
FILE: content/blog/2021-05-27-azure-pipelines-scaler.md
================================================
+++
title = "Autoscaling Azure Pipelines agents with KEDA"
date = 2021-05-27
author = "Troy Denorme"
+++

With the addition of Azure Piplines support in KEDA, it is now possible to autoscale your Azure Pipelines agents based on the agent pool queue length.

Self-hosted Azure Pipelines agents are the perfect workload for this scaler. By autoscaling the agents you can create a scalable CI/CD environment.

> 💡 The number of concurrent pipelines you can run is limited by your [parallel jobs](https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/agents#parallel-jobs).
> 
> KEDA will autoscale to the maximum defined in the ScaledObject and does not limit itself to the parallel jobs count defined for the Azure DevOps organization.

## What are Azure Pipelines self-hosted agents?

Azure Pipelines jobs can run on different kinds of agents ([docs](https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/agents)). But if you want full control, you are going to have to use self-hosted agents.
Agents are able to run on Linux, macOS or Windows machines and can be packaged in to a container.

When running self-hosted agents on Kubernetes, there is no out-of-the-box support for autoscaling. However, with KEDA v2.3 you can now autoscale your self-hosted agents on Kubernetes based on the amount of pending jobs in your agent pool.

You can run the agents as a `Deployment` or a `Job` in Kubernetes and scale them accordingly with a `ScaledObject` or a `ScaledJob`.

## Deploying a self-hosted agent on Kubernetes as a Deployment

### Create the container image

To create a basic Azure Pipelines agent image you can follow the instructions from [the official docs](https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker#linux).

### Deploy on Kubernetes

You can easily deploy the agent as a Kubernetes deployment by using this Kubernetes manifest:

```yaml
apiVersion: v1
kind: Secret
metadata:
  name: azdevops
data:
  AZP_TOKEN: <base64 encoded PAT>
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: azdevops-deployment
  labels:
    app: azdevops-agent
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azdevops-agent
  template:
    metadata:
      labels:
        app: azdevops-agent
    spec:
      containers:
      - name: azdevops-agent
        image: <azdevops-image>
        env:
          - name: AZP_URL
            value: "https://dev.azure.com/<organization>"
          - name: AZP_POOL
            value: "<agent pool name>"
          - name: AZP_TOKEN
            valueFrom:
              secretKeyRef:
                name: azdevops
                key: AZP_TOKEN
        volumeMounts:
        - mountPath: /var/run/docker.sock
          name: docker-volume
      volumes:
      - name: docker-volume
        hostPath:
          path: /var/run/docker.sock
```

### Autoscaling with KEDA

After the deployment is created you need to create the `ScaledObject` in order for KEDA to start scaling the deployment.

To scale based on the queue length of an Azure Pipelines agent pool, you can use the `azure-pipelines` trigger as of KEDA v2.3.

```yaml
apiVersion: v1
kind: Secret
metadata:
  name: pipeline-auth
data:
  personalAccessToken: <base64 encoded PAT>
---
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  name: pipeline-trigger-auth
spec:
  secretTargetRef:
    - parameter: personalAccessToken
      name: pipeline-auth
      key: personalAccessToken
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: azure-pipelines-scaledobject
spec:
  scaleTargetRef:
    name: azdevops-deployment
  minReplicaCount: 1
  maxReplicaCount: 5 
  triggers:
  - type: azure-pipelines
    metadata:
      poolID: "1"
      organizationURLFromEnv: "AZP_URL"
    authenticationRef:
     name: pipeline-trigger-auth
```

The default `targetPipelinesQueueLength` is `1`, so there will be one agent for each job.

> ⚠ The Azure Pipelines scaler supports scaling to zero but you need at least one agent registered in the agent pool in order for new jobs to be scheduled on the pool.

### Running Azure Pipelines jobs

After deploying the agent and the KEDA `ScaledObject` it is time to see the autoscaling in action.

First, check the current pods running in the deployment:
```sh
$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
azdevops-deployment-5854bbbf84-r86qv   1/1     Running   0          75s
```

![deployment agents](/img/blog/azure-pipelines-scaler/deployment-agents.png)

Now let's queue some builds.

![azure devops builds](/img/blog/azure-pipelines-scaler/deployment-builds.png)

As a result, you see that KEDA starts scaling out the pods to meet the pending jobs:

```sh
$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
azdevops-deployment-5854bbbf84-4gfbx   1/1     Running   0          36s
azdevops-deployment-5854bbbf84-r86qv   1/1     Running   0          12m
azdevops-deployment-5854bbbf84-tm47k   1/1     Running   0          36s
```

And they appear on Azure Pipelines as well:

![deployment agents](/img/blog/azure-pipelines-scaler/deployment-agents-autoscaled.png)

## Run the self-hosted agent as a Job

When running your agents as a deployment you have no control on which pod gets killed when scaling down. ([see KEDA docs](https://keda.sh/docs/1.4/concepts/scaling-deployments/#long-running-executions))

If you run your agents as a `Job`, KEDA will start a Kubernetes job for each job that is in the agent pool queue. The agents will accept one job when they are started and terminate afterwards.
Since an agent is always created for every pipeline job, you can achieve fully isolated build environments by using Kubernetes jobs.

The following manifest is an example of a `ScaledJob` combined with the Azure Pipelines agent.
You have to use a modified image for this where the agent terminates itself after running a job. ([docs](https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-linux#run-once))

```yaml
apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
  name: azdevops-scaledjob
spec:
  jobTargetRef:
    template:
      spec:
        containers:
        - name: azdevops-agent-job
          image: <azdevops-image>
          imagePullPolicy: Always
          env:
          - name: AZP_URL
            value: "<organizationUrl>"
          - name: AZP_TOKEN
            value: "<token>"
          - name: AZP_POOL
            value: "<agentpool>"
          volumeMounts:
          - mountPath: /var/run/docker.sock
            name: docker-volume
        volumes:
        - name: docker-volume
          hostPath:
            path: /var/run/docker.sock
  pollingInterval: 30
  successfulJobsHistoryLimit: 5
  failedJobsHistoryLimit: 5
  maxReplicaCount: 10   
  scalingStrategy:
    strategy: "default"               
  triggers:
  - type: azure-pipelines
    metadata:
      poolID: "1"
      organizationURLFromEnv: "AZP_URL"
      personalAccessTokenFromEnv: "AZP_TOKEN"
```

### Placeholder agent

You cannot queue an Azure Pipelines job on an empty agent pool because Azure Pipelines cannot validate if the pool matches the requirements for the job.

When you try to do this you will encounter the following error:

> ##[error]No agent found in pool keda-demo which satisfies the specified demands: Agent.Version -gtVersion 2.163.1

You can, however, use a workaround to register an agent as a placeholder which allows you to queue jobs on an agent pool that has no agents that are online.


Make sure you don't execute any cleanup code in your container to unregister the agent when removing it to keep the placeholder agent registered in the agent pool.

### Seeing `ScaledJobs` in action

To allow scaling to zero and create agents on-demand, a template agent was created as a placeholder to be able to queue jobs.

![placeholder agent](/img/blog/azure-pipelines-scaler/placeholder-agent.png)

Now, let's queue some pipelines:

![azure devops builds](/img/blog/azure-pipelines-scaler/jobs-builds.png)

KEDA will create a Kubernetes job for each pending job in the queue for the specified agent pool.

```sh
$ kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
azdevops-scaledjob-2hshf-mp5jl   1/1     Running   0          24s
azdevops-scaledjob-5gzr5-p8625   1/1     Running   0          24s
azdevops-scaledjob-mmlzc-rw5gm   1/1     Running   0          24s
```

Once that happens, you will see the agents are starting to process the pending Azure Pipelines jobs:

Once that happens, you will see the jobs in the Azure Pipelines' agent pool:

![scaledjobs agents](/img/blog/azure-pipelines-scaler/jobs-agents-autoscaled.png)

Using a `ScaledJob` is the preferred way to autoscale your Azure Pipelines agents if you have long-running jobs.
The other option is using a `deployment` and leveraging the container lifecycle. ([docs](https://keda.sh/docs/1.4/concepts/scaling-deployments/#leverage-the-container-lifecycle))


================================================
FILE: content/blog/2021-06-24-announcing-http-add-on.md
================================================
+++
title = "Announcing KEDA HTTP Add-on v0.1.0"
date = 2021-06-24
author = "Aaron Schlesinger and Tom Kerkhove"
+++

Over the past few months, we’ve been adding more and more scalers to KEDA making it easier for users to scale on what they need. Today, we leverage more than 30 scalers out-of-the-box, supporting all major cloud providers & industry-standard tools such as Prometheus that can scale any Kubernetes resource.

But, we are missing a major feature that many modern, distributed applications need - the ability to scale based on HTTP traffic.

It’s time to change this.

>Note: You can build your own custom HTTP autoscaling system using the [Prometheus scaler](https://keda.sh/docs/2.2/scalers/prometheus/) per our FAQ. The new HTTP Addon adds first-class, end-to-end support for HTTP.

## Introducing our HTTP add-on for KEDA

Autoscaling HTTP is often not as straightforward as other event sources. You don't know how much traffic will be coming and, given its synchronous nature, supporting scale-to-zero HTTP applications requires an intelligent intermediate routing layer to “hold” the incoming request(s) until new instances of the backend application are created and running.

We’re happy to announce our experimental HTTP add-on for KEDA which is purely focused on solving this problem. This new project introduces an `HTTPScaledObject` CRD, which you use to autoscale a Kubernetes `Deployment`, including scale-to-zero.

We’ve taken a “batteries included with reasonable defaults” approach to designing and building the HTTP add-on. This means that you don’t have to run other tools such as Prometheus. At the same time, the system is made up of well-defined, reusable components that can run independently. You can opt-out of the defaults and customize components as you see fit. In many cases, you can even run most of the components independently.

Scaling based on incoming HTTP traffic is different from core KEDA triggers for two reasons:

- There is no standard existing API you can call to get a counter or other metric to scale on. For example, we cannot call the Kafka API to get the length of a queue.
- You need to set up the infrastructure to route HTTP requests to the server you’re autoscaling

You can see the HTTP add-on as just another trigger in your scaling toolbox.

⚠ Given its experimental state of this project, breaking changes can occur and the HTTP add-on is not supported for production workloads yet.

### How does it work?

Since KEDA already does an excellent job listening for events and autoscaling, the HTTP add-on simply adds an HTTP-aware layer on top.

The system is made up of 3 components:

- **Interceptor**: This component accepts HTTP requests into the system, reports pending HTTP request queue metrics to the external scaler, and forwards requests to the target application.
  - If the application is currently scaled to zero replicas, the interceptor will hold requests until it scales up
- **External scaler**: This is an [external push scaler](https://keda.sh/docs/2.1/scalers/external-push/) that constantly pings the interceptor to get pending HTTP queue metrics. It transforms these data and sends them directly down to KEDA, which then makes a scaling decision
- **Operator**:  This is an [Operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) that runs for the convenience of the user. It listens for new [CRD](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) resources, called `HTTPScaledObject`s, and creates and configures interceptors and scalers so that your existing [`Deployment`](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) will begin autoscaling according to incoming HTTP traffic.

![architecture diagram](/img/blog/http-add-on/arch.png)

## Seeing it in action

We’ve aimed to make the HTTP add-on approximately as simple to operate and use as KEDA. 

There are two major steps to using it:

1. Install the KEDA HTTP add-on operator
2. Create a new `HTTPScaledObject`

### Installing the Operator

This is an optional step, but we highly recommend it because the operator makes interacting with the HTTP add-on more convenient. We’ve packaged the operator up in a [Helm](https://helm.sh) chart, which you can install by following the instructions below.

_The commands below have been tested on Mac and Linux (Ubuntu). They likely work on Windows WSL2, but won’t work on Powershell. You’ll also need to ensure you have access to a Kubernetes cluster with a Kubernetes configuration file properly configured._

#### Install KEDA

First, make sure you’ve set up an environment variable for the namespace you’d like to install everything into:

```shell
export NAMESPACE=mynamespace
```

Next, install KEDA:

```shell
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install --create-namespace -n ${NAMESPACE} keda kedacore/keda
```

#### Install the Operator

Now that KEDA is installed, you can install the operator:

```shell
helm install --create-namespace -n ${NAMESPACE} http-add-on kedacore/keda-add-ons-http
```

### Install an `HTTPScaledObject`

The `HTTPScaledObject` CRD instructs the operator to install and configure the interceptor and scaler for a specified `Deployment`. For this to work, you’ll need to have a Deployment running in the same `$NAMESPACE` and a Service configured to route traffic to the pods in that `Deployment`.

>We've created a sample application [here](https://github.com/kedacore/http-add-on/tree/main/examples/xkcd) as a Helm chart for you. It comes complete with a properly configured `HTTPScaledObject`, so when you install the chart, everything will be automatically configured for you and you can skip the rest of this section. If you install this chart, you can skip the rest of this section.

After you have your application set up, copy the following YAML into a file called myautoscaledapp.yaml:

```yaml
kind: HTTPScaledObject
apiVersion: http.keda.sh/v1alpha1
metadata:
    name: myapp
spec:
    scaleTargetRef:
        deployment: myAppDeployment
        service: myAppService
        port: 8080
```

And finally, submit it to your Kubernetes cluster:

```shell
kubectl create -f -n $NAMESPACE myautoscaledapp.yaml
```

The operator will pick up the CRD and, when it’s done installing and configuring, you’ll see a new `Service` (among other things!) that’s ready to route HTTP traffic to your Deployment. Send all of your HTTP to the Service, and the Deployment will begin autoscaling!

### Cleaning up

To clean up, remove the HTTPScaledObject you created, then delete the two Helm charts you installed:

```shell
kubectl delete -n $NAMESPACE httpscaledobject myapp
helm delete -n ${NAMESPACE} kedahttp
helm delete -n ${NAMESPACE} keda
```

## What's next?

With this release, we've built a solid foundation and are now focusing on testing, quality, and expanding the feature set appropriately.

We encourage you to try the software out in your own non-production Kubernetes clusters and share feedback on what you think and we are open to contributions to make it even better.

Today we support autoscaling any HTTP traffic sent to a Kubernetes Services, but we are planning to support more specific traffic patterns including “north-south” with `Ingress` or the [Gateway API](https://github.com/kedacore/http-add-on/issues/33) and “east-west” with service-to-service communication or [service meshes](https://github.com/kedacore/http-add-on/issues/6).

In order to achieve this, we are working with the community to support as many existing products that exist today. For example, we will fully rely on the [Service Mesh Interface (SMI)](https://smi-spec.io/) specification which has become a solid industry standard for service-mesh workloads.

But why stop there? We are talking to various SIGs to determine if we need a general Traffic Metrics specification that takes the learnings from SMI spec and apply it to all traffic components for a unified traffic metrics approach in Kubernetes.

We’re also looking for feedback and contributors! Please feel free to [submit suggestions](https://github.com/kedacore/http-add-on/discussions/new) or [ask questions](https://github.com/kedacore/http-add-on/discussions/new), and if you’re interested in contributing, see our [contributing documentation](https://github.com/kedacore/http-add-on/blob/main/docs/contributing.md).

Lastly, we’d like to thank the following folks for building the initial prototype of the HTTP add-on and creating this project:

- [Aaron Schlesinger](https://github.com/arschles)
- [Lucas Santos](https://github.com/khaosdoctor)
- [Aaron Wislang](https://github.com/asw101)
- [Tom Kerkhove](https://github.com/tomkerkhove/) and the rest of the [KEDA core Maintainers](https://github.com/orgs/kedacore/teams/keda-maintainers)

Thanks for reading,

Aaron Schlesinger on behalf of the KEDA HTTP Add-on contributors and KEDA maintainers.


================================================
FILE: content/blog/2021-08-04-keda-cast-ai.md
================================================
+++
title = "How CAST AI uses KEDA for Kubernetes autoscaling"
date = 2021-08-04
author = "Žilvinas Urbonas (CAST AI), Annie Talvasto (CAST AI), and Tom Kerkhove (KEDA)"
aliases = [
    "/blog/how-cast-ai-uses-keda-for-kubernetes-autoscaling/"
]
+++

# How CAST AI uses KEDA for Kubernetes autoscaling

Kubernetes comes with several built-in [autoscaling mechanisms](https://cast.ai/blog/guide-to-kubernetes-autoscaling-for-cloud-cost-optimization/) - among them the Horizontal Pod Autoscaler (HPA). Scaling is essential for the producer-consumer workflow, a common use case in the IT world today. It’s especially useful for monthly reports and transactions with a huge load where teams need to spin up many workloads to process things faster and cheaper (for example, by using spot instances).

Based on the provided CPU and memory-based metrics, the HPA can scale a setup up by adding more replicas - or down by removing idle replicas (this mechanism is called in/out). But it doesn’t have access to a source of metrics by default. The default HPA features aren’t flexible enough to cover custom scenarios like the producer/consumer. 

This is where KEDA comes in.  

Optimizing Kubernetes workloads for cost efficiency is the core mission of CAST AI. The platform helps teams reduce their cloud bills by up to 50% with no extra DevOps effort by automatically selecting optimal instances for running clusters, using spot instances whenever possible, and - of course - autoscaling with the help of KEDA.

By automating routine DevOps tasks via Terraform or CLI, CAST AI saves teams many hours they would spend on researching, installing, maintaining, patching, and observing their Kubernetes infrastructure. It also helps to prevent downtime with its multi-cloud capabilities.

## KEDA & Horizontal Pod Autoscaler

KEDA is available as a Policy/Add-on for clusters running in CAST AI. Users can easily install it by enabling the Horizontal Pod Autoscaler (HPA) policy in the console’s interface.

KEDA includes two components:

- operator - it watches Kubernetes for ScaledObject resources and configures the HPA accordingly,
- metrics-apiserver - this is a bridge between Kubernetes and various scaling sources (including Prometheus).

These two components configure the HPA and set up custom metric sources, helping teams to autoscale almost any workload: Deployment, ReplicaSet, ReplicationController, or StatefulSet. KEDA supports autoscaling Jobs too.

## Enabling KEDA in CAST AI

To autoscale with the Horizontal Pod Autoscaler, users need to enable the KEDA add-on on the Policies page available for every cluster in CAST AI.

![CAST AI KEDA Policies](/img/blog/cast-ai-ref-case/cast-ai-keda-1.png "Tom's title")

Once enabled, KEDA will start working on a given cluster once users configure the associated scaled object. KEDA automatically changes pod replica counts based on the provided metrics.

## Use case 1: Autoscaling based on CPU and/or Memory usage

Let’s imagine that a user created a Deployment and a Service that they want to autoscale.

```yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-app
  labels:
    app: sample-app
spec:
  # Note that we omit the replica count so
  # when we redeploy, we wouldn't override
  # replica count set by the autoscaler
  #replicas: 1
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      containers:
      - image: luxas/autoscale-demo:v0.1.2
        name: sample-app
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: sample-app
  labels:
    app: sample-app
spec:
  ports:
  - port: 8080
    name: http
    targetPort: 8080
    protocol: TCP
  selector:
    app: sample-app
```

Note that the user doesn’t specify a particular ReplicaCount.

Now it’s time to set up a [CPU-based Autoscaler](https://keda.sh/docs/latest/scalers/cpu/):

```yml
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: sample-app
spec:
  scaleTargetRef:
    name:          sample-app
  minReplicaCount: 1        # Optional. Default: 0
  maxReplicaCount: 10       # Optional. Default: 100
  triggers:
    # Either of the triggers can be omitted.
    - type: cpu
      metadata:
        # Possible values: `Value`, `Utilization`, or `AverageValue`.
        # More info at: https://keda.sh/docs/latest/scalers/cpu/#trigger-specification
        type: "Value"
        value: "30"
    - type: memory
      metadata:
        # Possible values: `Value`, `Utilization`, or `AverageValue`.
        # More info at: https://keda.sh/docs/latest/scalers/memory/
        type: "Value"
        value: "512"
```

Deployment autoscaling will be triggered by CPU or Memory usage. Users can specify any other trigger or remove the triggers altogether - for example, to autoscale only on the basis of the CPU or only using the Memory trigger.

## Use case 2: Autoscaling based on a Prometheus metric

CAST AI users can also autoscale their clusters based on the results of arbitrary Prometheus queries. CAST AI clusters come with Prometheus deployed out-of-the-box.

So, let’s deploy a sample application again - but this time, we’ll instruct Prometheus to scrape some metrics:


```yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-app
  labels:
    app: sample-app
spec:
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
      annotations:
        # These annotations the main difference!
        prometheus.io/path: "/metrics"
        prometheus.io/port: "8080"
        prometheus.io/scrape: "true"
    spec:
      containers:
      - image: luxas/autoscale-demo:v0.1.2
        name: sample-app
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: sample-app
  labels:
    app: sample-app
spec:
  ports:
  - port: 8080
    name: http
    targetPort: 8080
    protocol: TCP
  selector:
    app: sample-app
```

Then the user can deploy the Autoscaler.

```yml
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: sample-app
spec:
  scaleTargetRef:
    name:          sample-app
  minReplicaCount: 1        # Optional. Default: 0
  maxReplicaCount: 10       # Optional. Default: 100
  triggers:
    - type: prometheus
      metadata:
        serverAddress: http://prom.castai:9090
        threshold: '1'
        # Note: query must return a vector/scalar single element response
        query: sum(rate(http_requests_total{app="sample-app"}[2m]))
```

Let’s check whether it all works by generating some load. You can see how the replica count increases.

```bash
# Deploy busybox image
kubectl run -it --rm load-generator --image=busybox /bin/sh

# Hit ENTER for command prompt

# trigger infinite requests to the php-apache server
while true; do wget -q -O- http://sample-app:8080/metrics; done

# in order to cancel, hold CTRL+C
# in order to quit, initiate CTRL+D sequence
```

## Batch processing with spot instances & KEDA

Let’s go back to the producer-consumer problem we talked about earlier. Imagine that your company needs to process a large set of invoices at the end of each month. Your team has to spin up many workloads to process these jobs faster.

You switch on the Pod Autoscaler policy and then turn to the KEDA configuration.

![CAST AI KEDA Policies](/img/blog/cast-ai-ref-case/cast-ai-keda-1.png)

Note: The KEDA-based setup can also be used with CAST AI’s cluster autoscaler and spot instances to scale compute-intensive workloads in a cost-effective way. This is done by enabling the Unschedulable pods and Spot Instances policies. By enabling the node deletion policy, users ensure that idle instances are removed immediately.

The policy settings above will help to achieve cost savings for workloads like batch data processing. By moving data processing jobs to spot instances, teams can reduce their cloud bills and become more cloud-agnostic.

![CAST AI KEDA Policies](/img/blog/cast-ai-ref-case/cast-ai-keda-2.png)

In the system depicted above, we simulated a real-world scenario of producer-consumer-based work processing. The queue length triggers our built-in KEDA component to create pods used to process jobs stored in the queue. These pods are all scheduled on spot instances. When jobs are done, empty nodes are deleted.

CAST AI handles potential spot instance interruptions gracefully. If an interruption occurs and a job is in-flight, the job is marked as failed and reschedules on another node.

## Looking towards the future with KEDA

KEDA is an extremely powerful tool for scaling workloads horizontally. It allows workloads to scale to zero, taking up no resources when a job/process is not required. KEDA handles higher-order metrics with ease, enabling the next generation of auto-scaling solutions at CAST AI.

So, where are we going with KEDA next? One of the challenges to solve automatically is choosing scaling parameters. Settings such as minReplicaCount and maxReplicaCount, along with the trigger threshold, have to be set manually today. For the most part, these are educated estimates and trial-and-error experiments performed by the engineering team. CAST AI is working on making these settings more automated based on application performance and the reaction to change in settings.

We believe that is the next great KEDA challenge, so stay tuned for more!

## Glossary:

*Add-on*

An add-on is an application that helps another application perform more tasks or do it better. Apart from KEDA, CAST AI offers access to add-ons like Grafana, Grafana Loki, Evictor, Ingress Nginx, Cert Manager, Kubernetes Dashboard.

*Policy*

CAST AI users can turn on and manage policies that automate the process of scaling clusters up and down to optimize and reduce costs.


================================================
FILE: content/blog/2022-02-09-predictkube-scaler.md
================================================
+++
title = "Introducing PredictKube - an AI-based predictive autoscaler for KEDA made by Dysnix"
date = 2022-02-14
author = "Daniel Yavorovych (Dysnix), Yuriy Khoma (Dysnix), Zbynek Roubalik (KEDA), Tom Kerkhove (KEDA)"
aliases = [
"/blog/introducing-predictkube-for-keda-by-dysnix"
]
+++

## Introducing PredictKube—an AI-based predictive autoscaler for KEDA made by Dysnix

[Dysnix](https://dysnix.com/) has been working with high-traffic backend systems for a long time,
and the efficient scaling demand is what their team comes across each day.
The engineers have understood that manually dealing with traffic fluctuations and preparations of infrastructure is
inefficient because you need to deploy more resources _before_ the traffic increases,
not at the moment the event happens. This strategy is problematic for two reasons: first, because it's often too late to scale when traffic has already arrived and second, resources will be overprovisioned and idle during the times that traffic isn't present.

And when it comes to deciding how to wrap up this solution, Dysnix decided to rely on KEDA as it is the most
universal and applicable component for application autoscaling in Kubernetes.

KEDA is being used as a component on the client side of PredictKube that is responsible for transferring requests
and scaling replicas.

## Dysnix's PredictKube integrates with KEDA

Dysnix has built [PredictKube](https://predictkube.com/), a solution that can be used as a KEDA scaler that
is responsible for resource balancing, and an AI model that has learned to react proactively to patterns of traffic activity,
to help with both in-time scaling and solving the problem of overprovision.

![Overprovision](/img/blog/predictkube-scaler/overprovision.png "Overprovision")

The predictive autoscaling process is possible thanks to an AI model that observes the requests-per-second (RPS)
or CPU values for a period of time during a project and then shows the trend for up to 6 hours.
PredictKube used customer and open data sources (we used data sets like [HTTP NASA logs](ftp://ita.ee.lbl.gov/html/contrib/NASA-HTTP.html)) to train the model and be specific about the cloud data and traffic trends.

With this tool, Dysnix wants to decrease costs on the projects, analyze the data about traffic more efficiently,
use cloud resources more responsibly, and build infrastructures that are &quot;greener&quot; and more performative
(with fewer downtimes and delays) than others.

## How does PredictKube work?

PredictKube works in two parts:

1. **On the KEDA side**
   The interface connects via API to the data sources about your traffic.
   PredictKube uses [Prometheus](https://prometheus.io/)—the industry standard for storing metrics.
   There, it anonymizes the data about the traffic on the client's side before sending it to the API,
   where the model then works with information that is completely impersonal.
2. **On the AI model side**
   Next, it is linked with a prediction mechanism—the AI model starts to get data about things that happen in
   your cloud project. Unlike standard rules-based algorithms such as Horizontal Pod Autoscaling (HPA),
   PredictKube uses Machine Learning models for time series data predicting, like CPU or RPS metrics.

The more data you can provide to it from the start, the more precise the prediction will be. The 2+ weeks data will be enough for the beginning.

![PredictKube Scaler Diagram](/img/blog/predictkube-scaler/diagram.png)

The rest is up to you! You can visualize the trend of prediction in, for example, [Grafana](https://grafana.com/).

## Launch of PredictKube

1. [Install KEDA](https://keda.sh/docs/latest/deploy/)
2. Get PredictKube API Key
- Go to the [PredictKube website](https://predictkube.com/)
- Register to get the API key in your email
3. Create PredictKube Credentials secret[​](https://docs.predictkube.com/quickstart-with-keda#create-predictkube-credentials-secret)

```bash
API_KEY="<change-me>"
$ kubectl create secret generic predictkube-secrets --from-literal=apiKey=${API_KEY}
```

4. Configure Predict Autoscaling[​](https://docs.predictkube.com/quickstart-with-keda#configure-predict-autoscaling)

```yml
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  name: keda-trigger-auth-predictkube-secret
spec:
  secretTargetRef:
  - parameter: apiKey
    name: predictkube-secrets
    key: apiKey
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: example
spec:
  scaleTargetRef:
    name: example-app
  pollingInterval: 60
  cooldownPeriod: 300
  minReplicaCount: 3
  maxReplicaCount: 50
  triggers:
  - type: predictkube
    metadata:
      predictHorizon: "2h"
      historyTimeWindow: "7d"  # We recommend using a minimum of a 7-14 day time window as historical data
      prometheusAddress: http://kube-prometheus-stack-prometheus.monitoring:9090
      query: sum(irate(http_requests_total{pod=~"example-app-.*"}[2m]))
      queryStep: "2m" # Note: query step duration for range prometheus queries
      threshold: '2000' # Value to start scaling for
    authenticationRef:
      name: keda-trigger-auth-predictkube-secret
```


5. Check the status and get stats[​](https://docs.predictkube.com/quickstart-with-keda#get-stats)

To check the configuration and status of the scaling created in the previous step, use the following command:

```bash
$ kubectl get scaledobject example
```

To get stats to use for the scaling, use the following command:

```bash
$ kubectl get hpa example
```

Now you can look at how scaling works at a graph in your visualization tool.
This is an example of a graph Dysnix gets in one of their projects after using PredictKube:

![Grafana dashboard](/img/blog/predictkube-scaler/grafana.png "Grafana dashboard")

On this graph, you'll see the graphs of stats for the environment with 2 hours cooldown period.
The green trend shows predicted replicas number, a yellow one—ready replicas at a certain moment,
and the ideal—the blue trend—showing the closest replicas number covering the RPS trend.
If you need a template of such a dashboard to make your own, feel free to contact [Daniel](https://github.com/daniel-yavorovich) to get one.

After everything is connected and deployed, you'll be able to change the time frame you're observing or just monitor the data as it comes.

## What's next?

With this release, Dysnix has created the first milestone of predictive autoscaling for Kubernetes workloads.
The team hopes you'll find it interesting and help to test it and improve it.
If you have any questions to ask about the core functionality of PredictKube,
you may contact the developers' team [here](https://predictkube.com/contact).
And for all KEDA-related issues, share your feedback [via GitHub](https://github.com/kedacore/keda/discussions/2605).

In the future, PredictKube plans to add more integrations with other data sources to autoscale
based on other configurations of the projects. Also, there is an idea for implementing
an event-based predictive scaling to make it possible to react on not only a trend but event appearance.

You can contact the Dysnix team with any questions concerning the mechanics of PredictKube
or learn more about the data usage in its [privacy policy](https://predictkube.com/privacy-policy).
The following people will be happy to help:

- [Daniel Yavorovych](https://github.com/daniel-yavorovich) — KEDA integration and Kubernetes-related questions;
- [Yurij Khoma](https://www.linkedin.com/in/yuriy-khoma-5657a461/) — can comment more about the AI model that was created.

Thanks for reading,

Daniel Yavorovych and Yuriy Khoma on behalf of the PredictKube developers team.


================================================
FILE: content/blog/2022-03-10-how-zapier-uses-keda.md
================================================
+++
title = "How Zapier uses KEDA"
date = 2022-03-10
author = "Ratnadeep Debnath (Zapier)"
aliases = [
"/blog/how-zapier-uses-keda"
]
+++

[RabbitMQ](https://www.rabbitmq.com/) is at the heart of Zap processing at [Zapier](https://zapier.com). We enqueue messages to RabbitMQ for each step in a Zap. These messages get consumed by our backend workers, which run on [Kubernetes](https://kubernetes.io). To keep up with the varying task loads in Zapier we need to scale our workers with our message backlog.

For a long time, we scaled with CPU-based autoscaling using Kubernetes native Horizontal Pod Autoscale (HPA), where more tasks led to more processing, increasing CPU usage, and triggering our workers' autoscaling. It seemed to work pretty well, except for certain edge cases.

We do a lot of [blocking I/O](https://medium.com/coderscorner/tale-of-client-server-and-socket-a6ef54a74763) in Python (we don’t use an event-based loop in our workers written in Python). This means that we could have a fleet of workers idling on blocking I/O with low CPU profiles while the queue keeps growing unbounded, as low CPU usage would prevent autoscaling from kicking in. In a situation where workers are idle while waiting for I/O, we could have a growing backlog of messages that a CPU-based autoscaler would miss. This situation allowed a traffic jam to form and introduce delays in processing Zap tasks.

Ideally, we would like to scale our workers on both CPU and our backlog of ready messages in RabbitMQ. Unfortunately, Kubernetes’ native HPA does not support scaling based on RabbitMQ queue length out of the box. There is a potential solution by collecting RabbitMQ metrics in Prometheus, creating a custom metrics server, and configuring HPA to use these metrics. However, this is a lot of work and why reinvent the wheel when there’s KEDA.

We have installed KEDA in our Kubernetes clusters and started opting into KEDA for autoscaling. Our goal is to autoscale our workers not just based on CPU usage, but also based on the number of ready messages in RabbitMQ queues they are consuming from.

At Zapier, we use KEDA to autoscale our workers not just based on CPU usage, but also based on the number of ready messages in RabbitMQ queues they are consuming from. We monitor our KEDA setup in Grafana using Prometheus metrics, and use Prometheus rules to alert on errors. Using KEDA to autoscale our workers significantly prevented delays in our Zap processing due to blocked I/O calls. We are slowly updating apps at Zapier to use KEDA.

**Read the rest of this [post on how Zapier uses KEDA](https://www.cncf.io/blog/2022/01/21/keda-at-zapier/) on the Cloud Native Computing Foundation blog.**


================================================
FILE: content/blog/2022-08-10-keda-2.8.0-release.md
================================================
+++
title = "Announcing KEDA v2.8 🎉"
date = 2022-08-10
author = "Jeff Hollan (KEDA), Tom Kerkhove (KEDA)"
aliases = [
"/blog/2.8.0-release"
]
+++

We recently completed our most recent release: 2.8.0 🎉!

Here are some highlights:

- Introduction of new AWS DynomoDB Streams & NATS JetStream scalers.
- Introduction of new Azure AD Workload Identity authentication provider.
- Support for specifying `minReplicaCount` in ScaledJob.
- Support to customize the HPA name.
- Support for permission segregation when using Azure AD Pod / Workload Identity
- Additional features to various scalers such as AWS SQS, Azure Pipelines, CPU, GCP Stackdriver, Kafka, Memory, Prometheus

Here are the new deprecation(s) as of this release:

- `rolloutStrategy` in ScaledJob is deprecated in favor of `rollout.strategy`

Let's have a closer look.

## New & Improved Scalers

KEDA now has 50+ built-in scalers, giving you instant access to provide event driven scale across a variety of sources. New with this release are:
- AWS DynamoDB Streams ([docs](https://keda.sh/docs/2.8/scalers/aws-dynamodb-streams/))
- NATS JetStream ([docs](https://keda.sh/docs/2.8/scalers/nats-jetstream/))

In addition to new scalers, various new features and improvements were added to AWS SQS, Azure Pipelines, CPU, GCP Stackdriver, Kafka, Memory, and Prometheus scalers.

## Activation and Scaling Thresholds

Previously in KEDA, when scaling from 0 to 1, KEDA would "activate" (scale to 1) a resource when *any* activity happened on that event source. For example, if using a queue, a single message on the queue would trigger activation and scale.

As of this release, we now allow you to set an `activationThreshold` for many scalers which is the metric that must be hit before scaling to 1.

This would allow you to delay scaling up to 1 until *n* number of messages were unprocessed. This pairs with other thresholds and target values for scaling from 1 to *n* instances, where the HPA will scale out to *n* instances based on the current event metric and the defined threshold values.

Details on thresholds and the new activation thresholds can be found [in the KEDA concept docs](https://keda.sh/docs/2.8/concepts/scaling-deployments/#activating-and-scaling-thresholds)

## Introducing support for Azure AD Workload Identity & identity segregation

One critical piece of functionality in KEDA is the ability to authenticate with different event sources. The `TriggerAuthentication` CRD allows you to define secure secrets and identities to use within your scaled objects and jobs.

As of v2.8.0, you can now use [Azure AD Workload Identity](https://azure.github.io/azure-workload-identity/docs/) which is supported by using `azure-workload` as a valid pod identity provider.

We want to strive to be as secure as we can and reduce the risk of breach by allowing end-users to use least-privilege principle. This is crucial because KEDA is installed once and available to the whole Kubernetes cluster. However, identities used for Azure AD Pod Identity and Azure AD Workload Identity providers are applied on KEDA itself which means it can be used by all applications.

That is why we are **introducing segregation of permissions within KEDA and its used identity/identities**.

This means you don't have to grant the KEDA pod too many permissions to too many sources, and can now specify an `identityId` in your `TriggerAuthentication` allowing to define the identity to use which has more scoped permissions for specific triggers.

More details can be found in the KEDA [Authentication documentation](https://keda.sh/docs/2.8/concepts/authentication/).

## `rolloutStrategy` in ScaledJob is deprecated in favor of `rollout.strategy`

As of this release, `rolloutStrategy` in ScaledJob is deprecated in favor of `rollout.strategy` and ask all end-users to migrate to `rollout.strategy` instead.

This change has been introduced so that end-users have more control over how rollouts are performed and have introduced new capabilities such as `rollout.propagationPolicy` to compliment this.

End-users who are still using `rolloutStrategy` will not be impacted, until it will be removed in KEDA 3.x.

Learn more in our [new documentation](https://keda.sh/docs/2.8/concepts/scaling-jobs/) and join our [GitHub Discussion](https://github.com/kedacore/keda/discussions/3552) if you have questions/problems migrating.

## Simplified end-to-end testing experience for contributors

We've added some new features to our end to end testing and PR process. The test framework used to coordinate end to end tests was moved from TypeScript to Go, so contributors can stick within a single language for the codebase. We also improved the Pull Request process so that all PRs will be blocked until e2e tests pass or until a label `ok-to-merge` is added, and created a new team `keda-e2e-test-executors` who can now trigger end to end tests to run.

## And more...

This is just some of the highlights for the latest release. You can find the full release notes can be [found here](https://github.com/kedacore/keda/releases/tag/v2.8.0).

The next KEDA release is scheduled for the first week of November 2022.

Thanks to everyone for helping make KEDA better!

================================================
FILE: content/blog/2022-09-27-http-add-on-is-on-hold.md
================================================
+++
title = "HTTP add-on is looking for contributors by end of November"
date = 2022-09-27
author = "Tom Kerkhove (KEDA)"
aliases = []
+++

On Nov 25, 2020, we started the HTTP add-on based on [@arschles](https://github.com/arschles) his initial POC which closed a big gap in KEDA's story - HTTP autoscaling without a dependency on an external system, such as Prometheus.

To this day, the autoscaling community has a very high demand for a solution in this area that auto scales and works in the same manner as the KEDA core.

With the add-on, we want to cover all traffic patterns ranging from ingress, to service meshes and service-to-service communication and make it super simple to autoscale (and with scale-to-zero support).

As time passed by, we've seen [@arschles](https://github.com/arschles) lead the HTTP add-on to a beta stage and have defined the [requirements for it to become a GA add-on](https://github.com/orgs/kedacore/projects/6/views/9).

Unfortunately we have seen very few contributions to the project and [@arschles](https://github.com/arschles) has switched roles and is unable to maintain it anymore.

📢 **Because of that, we are doing an active call for contributors and will assess the future of the HTTP add-on by the end of November based on the community and (hopefully) contribution growth. Until then, the project is on-hold.** 📢

**If we do not have at least 3 contributors take charge we will have to see what alternatives we have.**

We'd also want to take the time to say a big thank you to [@arschles](https://github.com/arschles) for his hard work on this and hopefully we can continue taking it forward!

Join our discussion on [GitHub](https://github.com/kedacore/http-add-on/discussions/523) if you want to stay up-to-date or want to get involved.


================================================
FILE: content/blog/2022-12-12-keda-2.9.0-release.md
================================================
+++
title = "Announcing KEDA v2.9 🎉"
date = 2022-12-12
author = "Jeff Hollan (Snowflake), Tom Kerkhove (Microsoft) and Zbynek Roubalik (Red Hat)"
aliases = [
"/blog/releases/2.9.0"
]
+++

We recently completed our most recent release: 2.9.0 🎉!

Here are some highlights:

- Newly published Deprecations and Breaking Change policy ([docs](https://github.com/kedacore/governance/blob/main/DEPRECATIONS.md))
- Introduce new CouchDB, Etcd & Loki scalers
- Introduce off-the-shelf Grafana dashboard for application autoscaling
- Introduce improved operational metrics in Prometheus
- Introduce capability to cache metric values for a scaler during the polling interval (experimental feature)
- Performance improvements and architecture changes on how metrics are exposed to Kubernetes
- Azure Key Vault authentication provider now supports pod identities for authentication
- A ton of new features and fixes for some of our 50+ scalers

Potential breaking changes and deprecations include:
- As per our [support policy](https://github.com/kedacore/governance/blob/main/SUPPORT.md), Kubernetes v1.23 or above is required and support for Kubernetes v1.22 or below was removed ([docs](https://keda.sh/docs/2.9/operate/cluster/#kubernetes-compatibility))
- Upgrading the API version of managed HPA objects from `autoscaling/v2beta2` to `autoscaling/v2`
- Prometheus metrics on KEDA Metric Server are deprecated in favor of Prometheus metrics on KEDA Operator ([#3972](https://github.com/kedacore/keda/issues/3972) | [Discussion](https://github.com/kedacore/keda/discussions/3973))

You can keep an eye and join the discussion for future breaking changes and deprecations [in our GitHub issues](https://github.com/kedacore/keda/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Abreaking-change).

## New & Improved Scalers

KEDA now has 50+ built-in scalers, giving you instant access to provide event driven scale across a variety of sources.

New scalers in this release are:
- Etcd ([docs](https://keda.sh/docs/scalers/etcd/))
- CouchDB ([docs](https://keda.sh/docs/scalers/couchdb/))
- Loki ([docs](https://keda.sh/docs/scalers/loki/))

In addition to new scalers, various new features and improvements were added to Kafka, Azure Event Hubs, Azure Pipelines, GCP Storage, Metrics, NATS Jetstream, Prometheus, Pulsar, Azure Blob, GCP Stackdriver, and New Relic scalers.

Here are a few improvement highlights:

- **AWS Scalers:** Introduce new AWS endpoint URL settings
- **Apache Kafka Scaler:** Support for SASL/OAuth bearer authentication and/orlimiting Kafka partitions KEDA will monitor
- **Azure Event Hubs Scaler:** Support Azure Active Directory Pod & Workload Identity authentication for Storage Blobs, Dapr checkpointing and using connection strings for Event Hub namespace instead of the Event Hub itself.
- **Azure Service Bus Scaler:** Support for Shared Access Signature (SAS) tokens for authentication and use of regex in `queueName` / `subscriptionName`
- **ElasticSearch Scaler:** Support for Elastic Cloud
- **GCP Storage Scaler:** Support for blob prefix & delimiters
- **Metrics API Scaler:** Support for unsafeSsl parameter to skip certificate validation when connecting over HTTPS
- **NATS Jetstream Scaler:** Support for clustered scenarios
- **NATS Scalers:** Support HTTPS protocol
- **Prometheus Scaler:** Introduce skipping of certificate check for unsigned certs
- **Pulsar Scaler:** Add support for basic and bearer token authentication along with support for partitioned topics

Details on the underlying fixes can be found in the [changelog](https://github.com/kedacore/keda/blob/main/CHANGELOG.md#v290).

## Production-grade operating experience for autoscaling applications

There are a number of improvements into the ways KEDA provides operational information in Prometheus and how you can consume it.

For starters, **our operator now exposes Prometheus metrics** which can be scraped on port `8080` at `/metrics`. It provides the same set of metrics as the metric server (although renamed) offers today, in addition to a few new metrics and the introduction of a `ScalerName` label.

The metrics are moving given we are changing how KEDA is integrating with external systems so that we can improve the performance and reduce the load on those external systems.

As part of this, **we are deprecating the KEDA-specific metrics in our metric server** and recommend end-users to use the metrics in the operator. Join our [conversation there](https://github.com/kedacore/keda/discussions/3973).

Next, we have **introduced `keda_resource_totals` and `keda_trigger_totals` as metrics** that provide insights into your autoscaling landscape and the various autoscaling triggers that are being used.

Metrics are great - But they have to be consumed. That's why we **introduced a new Grafana dashboard allows end-users to easily visualize the KEDA metrics in Grafana** to see how your applications are scaling:

![Grafana Dashboard](/img/blog/v2.9-release/grafana-dashboard.png)

Lastly, **end-users using `ScaledJobs` can now see what the minimum replica count is when inspecting resources** through the Kubernetes API.

Learn more about our available Prometheus metrics and our Grafana dashboard in our [docs](https://keda.sh/docs/operate/prometheus/).

## Change in the architecture and metrics caching

In this release we focused on performance improvements. Let's talk about these changes: KEDA has two main components - the Operator and the Metrics Server. The Operator monitors ScaledObjects and ScaledJobs resources, and checks activity on the external service. The Metrics Server handles requests and queries about metric values used for scaling from Kubernetes' Horizontal Pod Autoscaler (HPA) by checking the external service.

In previous versions of KEDA, each component needed to handle its own connection to the external service. In version 2.9, we have changed this and moved the connection logic to the Operator component. We are now using gRPC for the connection between the Metrics Server and Operator. This has several benefits, including reduced load on the external service, as there is only one connection from the Operator.

We have also introduced an experimental feature called metrics value caching. This caches the values in the Operator and can be reused in future. It can even further reduce the load on the external service. By default, Kubernetes' HPA asks for a metric value every few seconds (as defined b `--horizontal-pod-autoscaler-sync-period` flag set by Kuberentes admins, which is usually set to 15 seconds). This can create unnecessary load on the external service. Caching metric values per trigger in a ScaledObject can help to overcome this problem. This is an optional feature, and can be enabled by setting the `useCachedMetrics` flag, then metric values are cached during polling interval as defined by `pollingInterval` flag and request comming from HPA to KEDA Metrics Server are served from this cache.

We are excited about the potential uses for this feature in the future, including using AI and machine learning models to affect metric values. Stay tuned for more updates and improvements in future releases of KEDA.

## New ways to authenticate

In this release we have added some additional configuration options for triggers:

Azure Key Vault authentication provider now allows end-users to use pod identities for authentication for improved simplicity & security:

```diff
azureKeyVault:                                          # Optional.
  vaultUri: https://keda.vault.azure.net
+ podIdentity:
+   provider: azure-workload
    # Optionally, you can specify a user-assigned identity: identityId: <identity-id>
  secrets:                                              # Required.
  - parameter: connection
    name: ServiceBus-ConnectionString  
```

Our Azure AD Pod Identity authentication now also has improved logs around integration with `aad-pod-identity` for simplified troubleshooting.

## And more...

This is just some of the highlights for the latest release. You can find the full release notes [here](https://github.com/kedacore/keda/releases/tag/v2.9.0).

The next KEDA release is [scheduled for March 2023](https://github.com/kedacore/keda/blob/main/ROADMAP.md).

Thanks to everyone for helping make KEDA better!


================================================
FILE: content/blog/2023-05-02-certificate-improvements.md
================================================
+++
title = "Securing autoscaling with the newly improved certificate management in KEDA 2.10"
date = 2023-05-16
author = "Jorge Turrado (SCRM Lidl International Hub)"
aliases = [
"/blog/exploring-new-certificate-management"
]
+++

Recently, we have release KEDA v2.10 that introduced a key improvement for managing certificates and your autoscaling security: 

- Encryption of any communication between KEDA components.
- Support for providing your own certificates for internal communications.
- Support for using customs certificate authorities (CA).

With these new improvements, we can dramatically improve the security between KEDA components, the Kubernetes API server and scaler sources. Let's take a closer look.

## Where do we come from?

KEDA is a component that runs on kubernetes, receiving request from kubernetes API server (from the HPA Controller) but also integrates with multiple external sources (upstreams). 

To improve our integration with Kubernetes' API server, we decided to skip the certificate validation using a built-in property, `insecureSkipTLSVerify`. Thanks to it, we could use self generate the metrics server certificate on every restart, not having to manage it and simplifying the process, but using at least an encrypted channel between kubernetes and KEDA metrics server.

The second case was more complicated... We really trust in the encryption as the way to achieve secure connections, so we wanted to support encrypted connection wherever a user wants to use them, but using self-signed certificates is a really common scenario and that was complex to manage. As a first and fast option, we decided to support an extra parameter in some scalers to skip the certificate validation, allowing these scenarios.

Before version 2.9, KEDA was composed by 2 different components with totally different goals, the operator and the metrics server. As both components were independent by design, so we didn't need to secure anything between them, but it changed in version v2.9. [As we announced in KEDA v2.9 release](/blog/releases/2.9.0), we introduced an important change in the architecture. Now we have 2 components, but they are strong related and they need to have a secured channel for the internal communications. At that point, we decided to release v2.9 with this gap in terms of encryption for internal communications, but having the commitment of solving this for the next version.

## Securing connections between KEDA components and Kubernetes API server

As part of version 2.10, we have released a mechanism to generate a self-signed certificate that will be used to encrypt all the traffic between various KEDA components but also patching `apiservice` and the new validating webhook to include the `caBundle`. Thanks to this mechanism, we can encrypt all the traffic between KEDA components with mutual TLS (TLSv1.3). Additionally, it allows us to remove the `insecureSkipTLSVerify` flag for the Kubernetes API Server making all our communications more secure between Kubernetes and KEDA.

By default, KEDA uses self-signed certificates for various things and the operator is in charge of generating and rotating them. Certificates are stored in a Kubernetes secret (`kedaorg-certs`) that is mounted to all KEDA components to `/certs`. Generated files are named `tls.crt` and `tls.key` for TLS certificate and `ca.crt` and `ca.key` for CA certificate. KEDA also patches Kubernetes resources to include the `caBundle`, making Kubernetes to trust in the CA.

While this is a good starting point, some end-users may want to use their own certificates which are generated from their own CA in order to improve security. This can be done by disabling the certificate generation/rotation in the operator and updating default values in other components (if required). 

The KEDA operator is responsible for generating certificates for all the services, this behaviour can be disabled removing the console argument `--enable-cert-rotation=true` or setting it to `false`. Once this setting is disabled, end-user specific certificates can be stored in the `kedaorg-certs` secret and will automatically update all components (this can be done through helm values too).

All components inspect the folder `/certs` for any certificates inside it. Argument `--cert-dir` can be used to specify another folder to be used as a source for certificates, this argument can be patched in the manifests or using Helm values.

## Register your own CA in KEDA Operator Trusted Store

With our recent architecture changes in v2.9, our operator is the only component that needs to interact with the (scaler) dependencies. This has been the last requirement for solving the problem of registering CAs to avoid the usage of `unsafeSsl` because even though it works, it also allows any certificate, which is not totally secure.

To overcome this problem, KEDA supports registering custom CAs that will be used by various SDKs where possible. To register custom CAs, you need to ensure that the certs are in `/custom/ca` folder and KEDA will try to register as trusted CAs all certificates inside this folder.

## A practical example using helm

With KEDA, we strive to make application autoscaling simple and that is why we have integrated cert-manager manifests as an optional component of our Helm chart. By doing so, you can use cert-manager to generate, rotate and patch services as part of the Helm installation (cert manager needs to be installed up front).

```yaml
certificates:
  autoGenerated: false # disables the cert-generation by the operator
  certManager:
    enabled: true # enables the certificate generation using cert manager
    generateCA: true # uses a self-signed generated CA
    # caSecretName: "kedaorg-ca"
```

To provide a CA to be used for generating certificates, you can store it as a secret (in the same namespace where KEDA is installed) and configure the secret. This will register an issuer based on it for generating the certificates.

```yaml
certificates:
  autoGenerated: false # disables the cert-generation by the operator
  certManager:
    enabled: true # enables the certificate generation using cert manager
    generateCA: false # uses a self-signed generated CA
    caSecretName: "kedaorg-ca" # secret name where the CA is stored
```

> Note: As KEDA requires the services to be correctly patched, when the cert manager integration is enabled, the manifests are annotated. If you provide a CA via secret, the secret has to be annotated with `cert-manager.io/allow-direct-injection: "true"`. Otherwise, the cert manager cannot patch the resources with the CA.

## Conclusion

The improvements made to certificate management in KEDA 2.10 are a significant step forward in enhancing security and reliability, but they are not the only ones. We are working to make KEDA even more secure by default with small actions like limiting the default minimum TLS version or correctly using security contexts in Kubernetes.

If you want to dive deeper, don't hesitate to check the [repo changelog](https://github.com/kedacore/keda/blob/main/CHANGELOG.md), where every change is listed. And stay tuned to future posts about other security tips! ;)

================================================
FILE: content/blog/2023-05-04-keda-survey.md
================================================
+++
title = "Help shape the future of KEDA with our survey 📝"
date = 2023-05-04
author = "KEDA Maintainers"
aliases = [
"/blog/keda-survey"
]
+++

As maintainers, we are always eager to learn who is using KEDA ([become a listed end-user!](https://github.com/kedacore/keda#adopters---become-a-listed-keda-user)) and how they are using KEDA to scale their cloud-native workloads.

Our job is to make sure that your are able to scale the workloads that you run with as less friction as possible, production-grade security, insights on what is going on, etc.

In order to be successful, we need to learn how big of KEDA deployments end-users are running, what is causing frustration and what we can improve. This is why we have created a survey to gain more insights and make KEDA better.

**If you want to help shape KEDA's future, feel free to fill in [our 2-minute survey](https://forms.gle/nC393JzCqK1evjcH9).**

Proud of your autoscaling infrastructure? You're more then welcome to show it in our [KEDA deployment show & tell discussion](https://github.com/kedacore/keda/discussions/4410) as well!

Thank you for helping make KEDA better!


================================================
FILE: content/blog/2023-08-22-keda-cncf-graduation.md
================================================
+++
title = "KEDA is graduating to CNCF Graduated project 🎉"
date = 2023-08-22
author = "KEDA Maintainers"
aliases = [
"/blog/keda-cncf-graduation"
]
+++

In 2019, KEDA embarked on a mission to make application autoscaling on Kubernetes dead-simple. Our aim was to make sure that every Kubernetes platform can use it to scale applications without having to worry about the underlying autoscaling infrastructure.

As part of that mission, we wanted to build a vendor-neutral project that is open to everyone and nicely integrates with other tools. Because of that, the KEDA maintainers decided that the Cloud Native Computing Foundation (CNCF) was a natural fit and got accepted as a sandbox project in 2020.

KEDA started evolving and became a more mature autoscaler which came with more scalers out-of-the-box and introduced new concepts such as scaled jobs, trigger authentication, operational metrics, and more. The community started growing as well, the project governance matured and KEDA became a CNCF Incubation project in 2021.

In the past year and a half, KEDA started focussing on making it easier to use for larger enterprises and use KEDA at-scale serving thousands of scaled objects with low performance impact.

Today is another important milestone in KEDA's journey - **We are excited to announce that the [CNCF has accepted to move KEDA to a CNCF Graduated project](https://www.cncf.io/announcements/2023/08/22/cloud-native-computing-foundation-announces-graduation-of-kubernetes-autoscaler-keda/) next to projects such as Kubernetes, Prometheus, Istio and others! 🎉.**

It has been great to see how KEDA has been adopted and is being used by more than 45+ listed end-users:

![architecture diagram](/img/blog/keda-cncf-graduation/keda-graduation-end-users.gif)

We would like to thank everyone who has contributed to KEDA, installed KEDA, gave feedback or talked about it in the community. Additionally, we want to thank our CNCF TOC sponsors (Cathy Zhang & Ricardo Rocha) for their support, help and trust in our project as part of the graduation process!

We are excited about this new phase of KEDA and are looking forward to making KEDA even better!

Happy scaling,

KEDA maintainers.


================================================
FILE: content/blog/2025-09-15-gcp-deprecations.md
================================================
+++
title = "Google Cloud deprecations"
date = 2025-09-15
author = "Jorge Turrado (SCRM Lidl International Hub)"
aliases = [
"/blog/gcp-deprecations"
]
+++

One year ago, Google Cloud deprecated its [Monitoring Query Language](https://cloud.google.com/monitoring/mql) in favor of a PromQL-based API:

> Announcement: Starting on October 22, 2024, Monitoring Query Language (MQL) will no longer be a recommended query language for Cloud Monitoring. Certain usability features will be disabled, but you can still run MQL queries in Metrics Explorer, and dashboards and alerting policies that use MQL will continue to work. For more information, see the [deprecation notice for MQL](https://cloud.google.com/stackdriver/docs/deprecations/mql).


Although the deprecation announcement also says that "***MQL is not being shut down**. You will still be able to create and run MQL queries, and dashboards and alerting policies that use MQL queries will continue to work.*"
we have decided to deprecate our current GCP scalers which rely on MQL ("[Cloud Tasks](https://keda.sh/docs/latest/scalers/gcp-cloud-tasks/)", "[Pub/Sub](https://keda.sh/docs/latest/scalers/gcp-pub-sub/)" and "[Stackdriver](https://keda.sh/docs/latest/scalers/gcp-stackdriver/)") keeping those that don't rely on MQL but use other SDKs, untouched (currently only "[Storage](https://keda.sh/docs/latest/scalers/gcp-storage/)" remains supported).

Does this mean KEDA no longer supports Google Cloud Platform? Absolutely not! We are committed to making the autoscaling dead simple on any vendor! In this case, we suggest moving the current deprecated scalers to [Prometheus scaler](https://keda.sh/docs/latest/scalers/prometheus/) for GCP.

> **Note**: GCP exposes the metrics via Prometheus endpoints without any extra configuration or services; you don't need to deploy anything else to get these metrics via Prometheus.

**We don't plan to remove these affected scalers as long as GCP supports MQL** but we strongly encourage migrating to a Prometheus-like approach to avoid service disruptions in case of any change on GCP.

## How to migrate

The migration path differs slightly depending on the scaler, but these are some examples:

### Migrate Google Cloud Platform Cloud Tasks

From the current trigger spec:
- `projectID` is not included as part of `serverAddress` value (`https://monitoring.googleapis.com/v1/projects/{{projectID}}/location/global/prometheus`).
- `value` and `activationValue` are replaced by `threshold` and `activationThreshold`.
- `queueName` is now included as part of `query` value (`{"__name__"="cloudtasks.googleapis.com/queue/depth","monitored_resource"="cloud_tasks_queue","queue_id"="{{queueName}}"}`).
- `GoogleApplicationCredentials`, `credentialsFromEnv`, `credentialsFromEnvFile` don't change.

For example, these scalers are equivalent:
```yaml
- type: gcp-cloudtasks
  metadata:
    projectID: "my-keda-project"
    queueName: "consumer-queue"
    value: "5"
    activationValue: "0"
    credentialsFromEnv: GOOGLE_APPLICATION_CREDENTIALS_JSON
```

```yaml
- type: prometheus
  metadata:
    serverAddress: https://monitoring.googleapis.com/v1/projects/my-keda-project/location/global/prometheus
    query: '{"__name__"="cloudtasks.googleapis.com/queue/depth","monitored_resource"="cloud_tasks_queue","queue_id"="consumer-queue"}'
    threshold: "5"
    activationThreshold: "0"
    credentialsFromEnv: GOOGLE_APPLICATION_CREDENTIALS_JSON
```

### Migrate Google Cloud Platform Stackdriver

From the current trigger spec:
- `projectID` is not included as part of `serverAddress` value (`https://monitoring.googleapis.com/v1/projects/{{projectID}}/location/global/prometheus`).
- `targetValue ` and `activationTargetValue` are replaced by `threshold` and `activationThreshold`.
- `filter` is replaced by `query`.
- `alignmentPeriodSeconds` is now included as part of `query` value.
- `alignmentAligner` is now included as part of `query` value.
- `GoogleApplicationCredentials`, `credentialsFromEnv`, `credentialsFromEnvFile` don't change.


For example, these scalers are equivalent:
```yaml
- type: gcp-stackdriver
  metadata:
    projectId: "my-keda-project"
    filter: 'metric.type="pubsub.googleapis.com/topic/num_unacked_messages_by_region" AND resource.type="pubsub_topic" AND resource.label.topic_id="my-keda-topic"'
    targetValue: "5"
    activationTargetValue: "0"
    alignmentPeriodSeconds: "60"
    alignmentAligner: max
    credentialsFromEnv: GOOGLE_APPLICATION_CREDENTIALS_JSON
```

```yaml
- type: prometheus
  metadata:
    serverAddress: https://monitoring.googleapis.com/v1/projects/my-keda-project/location/global/prometheus
    query: 'max(max_over_time({"__name__"="pubsub.googleapis.com/topic/num_unacked_messages_by_region","monitored_resource"="pubsub_topic","topic_id"="my-keda-topic"}[1m]))'
    threshold: "5"
    activationThreshold: "0"
    credentialsFromEnv: GOOGLE_APPLICATION_CREDENTIALS_JSON
```

### Migrate Google Cloud Platform Pub/Sub

From the current trigger spec:
- `value ` and `activationValue` are replaced by `threshold` and `activationThreshold`.
- `topicName` and `subscriptionName` are now included as part of `query` value.
- `aggregation` is now included as part of `query` value.
- `mode` is now included as part of `query` value.
- `GoogleApplicationCredentials`, `credentialsFromEnv`, `credentialsFromEnvFile` don't change.


For example, these scalers are equivalent:
```yaml
- type: gcp-pubsub
  metadata:
    topicName: my-topic
    mode: MessageSizes
    aggregation: count
    value: "5"
    activationValue: "0"
    credentialsFromEnv: GOOGLE_APPLICATION_CREDENTIALS_JSON
```

```yaml
- type: prometheus
  metadata:
    serverAddress: https://monitoring.googleapis.com/v1/projects/my-keda-project/location/global/prometheus
    query: 'increase({"__name__"="pubsub.googleapis.com:topic_message_sizes_count","monitored_resource"="pubsub_topic","topic_id"="my-topic"}[2m])'
    threshold: "5"
    activationThreshold: "0"
    credentialsFromEnv: GOOGLE_APPLICATION_CREDENTIALS_JSON
```

KEDA maintainers.


================================================
FILE: content/blog/_index.md
================================================
+++
title = "The KEDA Blog"
description = "Updates, tutorials, and more"
+++


================================================
FILE: content/community.md
================================================
+++
title = "Community"
description = "How you can get involved with the KEDA ecosystem"
+++

## Get Involved

{{< include "get-involved.md" >}}

## End-Users

 A variety of users are autoscaling applications with KEDA:

{{< user-icons >}}

## Partners

 KEDA is community-supported and built by our community, including the following companies:

{{< partners-icons >}}

## Supported by

KEDA community is supported by the following companies that provide their services for free:

{{< supportedby-icons >}}


================================================
FILE: content/docs/1.4/_index.md
================================================
+++
title = "The KEDA Documentation"
weight = 1
+++

Welcome to the documentation for **KEDA**, the Kubernetes Event-driven Autoscaler. Use the navigation to the left to learn more about how to use KEDA and its components.  

Additions and contributions to these docs are managed on [the keda-docs GitHub repo](https://github.com/kedacore/keda-docs).


================================================
FILE: content/docs/1.4/concepts/_index.md
================================================
+++
title = "KEDA Concepts"
description = "What KEDA is and how it works"
weight = 1
+++

## What is KEDA?

**KEDA** is a [Kubernetes](https://kubernetes.io)-based Event Driven Autoscaler.  With KEDA, you can drive the scaling of any container in Kubernetes based on the number of events needing to be processed.

**KEDA** is a single-purpose and lightweight component that can be added into any Kubernetes cluster.  KEDA works alongside standard Kubernetes components like the [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) and can extend functionality without overwriting or duplication.  With KEDA you can explicitly map the apps you want to use event-driven scale, with other apps continuing to function.  This makes KEDA a flexible and safe option to run alongside any number of any other Kubernetes applications or frameworks.

## How KEDA works

KEDA performs two key roles within Kubernetes:

1. **Agent** — KEDA activates and deactivates Kubernetes [Deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment) to scale to and from zero on no events. This is one of the primary roles of the `keda-operator` container that runs when you install KEDA.
1. **Metrics** — KEDA acts as a [Kubernetes metrics server](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-custom-metrics) that exposes rich event data like queue length or stream lag to the Horizontal Pod Autoscaler to drive scale out.  It is up to the Deployment to consume the events directly from the source.  This preserves rich event integration and enables gestures like completing or abandoning queue messages to work out of the box.  The metric serving is the primary role of the `keda-operator-metrics-apiserver` container that runs when you install KEDA.

## Architecture

The diagram below shows how KEDA works in conjunction with the Kubernetes Horizontal Pod Autoscaler, external event sources, and Kubernetes' [etcd](https://etcd.io) data store:

![KEDA architecture](/img/keda-arch-no-webhooks.png)

### Event sources and scalers

KEDA has a wide range of [**scalers**](/scalers) that can both detect if a deployment should be activated or deactivated, and feed custom metrics for a specific event source. The following scalers are available:

{{< scalers-compact >}}

### Custom Resources (CRD)

When you install KEDA, it creates two custom resources:

1. `scaledobjects.keda.k8s.io`
1. `triggerauthentications.keda.k8s.io`

These custom resources enable you to map an event source (and the authentication to that event source) to a deployment or job for scaling.  The `ScaledObjects` represent the desired mapping between an event source (e.g. Rabbit MQ) and the Kubernetes deployment.  A `ScaledObject` may also reference a `TriggerAuthentication` which contains the authentication configuration or secrets to monitor the event source.

## Deploy KEDA

See the [Deployment](../deploy) documentation for instructions on how to deploy KEDA into any cluster using tools like [Helm](../deploy/#helm).


================================================
FILE: content/docs/1.4/concepts/authentication.md
================================================
+++
title = "Authentication"
weight = 500
+++

Often a scaler will require authentication or secrets and config to check for events.

KEDA provides a few secure patterns to manage authentication flows:

* Configure authentication per `ScaledObject`
* Re-use credentials or delegate authentication with `TriggerAuthentication`

## Defining secrets and config maps on ScaledObject

Some metadata parameters will not allow resolving from a literal value, and will instead require a reference to a secret, config map, or environment variable defined on the target container.

> 💡 ***TIP:*** *If creating a deployment yaml that references a secret, be sure the secret is created before the deployment that references it, and the scaledObject after both of them to avoid invalid references.*

### Example

If using the [RabbitMQ scaler](https://keda.sh/docs/1.4/scalers/rabbitmq-queue/), the `host` parameter may include passwords so is required to be a reference.  You can create a secret with the value of the `host` string, reference that secret in the deployment, and map it to the `ScaledObject` metadata parameter like below:

```yaml
apiVersion: v1
kind: Secret
metadata:
  name: {secret-name}
data:
  {secret-key-name}: YW1xcDovL3VzZXI6UEFTU1dPUkRAcmFiYml0bXEuZGVmYXVsdC5zdmMuY2x1c3Rlci5sb2NhbDo1Njcy #base64 encoded per secret spec
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {deployment-name}
  namespace: default
  labels:
    app: {deployment-name}
spec:
  selector:
    matchLabels:
      app: {deployment-name}
  template:
    metadata:
      labels:
        app: {deployment-name}
    spec:
      containers:
      - name: {deployment-name}
        image: {container-image}
        envFrom:
        - secretRef:
            name: {secret-name}
---
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
  name: {scaled-object-name}
  namespace: default
spec:
  scaleTargetRef:
    deploymentName: {deployment-name}
  triggers:
  - type: rabbitmq
    metadata:
      queueName: hello
      host: {secret-key-name}
      queueLength  : '5'
```

If you have multiple containers in a deployment, you will need to include the name of the container that has the references in the `ScaledObject`.  If you do not include a `containerName` it will default to the first container.  KEDA will attempt to resolve references from secrets, config maps, and environment variables of the container.

### The downsides

While this method works for many scenarios, there are some downsides:

* **Difficult to efficiently share auth** config across `ScaledObjects`
* **No support for referencing a secret directly**, only secrets that are referenced by the container
* **No support for other types of authentication flows** such as *pod identity* where access to a source could be acquired with no secrets or connection strings

For these and other reasons, we also provide a `TriggerAuthentication` resource to define authentication as a separate resource to a `ScaledObject`. This allows you to reference secrets directly, configure to use pod identity or use authentication object managed by a different team.

## Re-use credentials and delegate auth with TriggerAuthentication

`TriggerAuthentication` allows you to describe authentication parameters separate from the `ScaledObject` and the deployment containers.  It also enables more advanced methods of authentication like "pod identity", authentication re-use or allowing IT to configure the authentication.

```yaml
apiVersion: keda.k8s.io/v1alpha1
kind: TriggerAuthentication
metadata:
  name: {trigger-authentication-name}
  namespace: default # must be same namespace as the ScaledObject
spec:
  podIdentity:
      provider: none | azure | aws-eks | aws-kiam # Optional. Default: none
  secretTargetRef: # Optional.
  - parameter: {scaledObject-parameter-name} # Required.
    name: {secret-name} # Required.
    key: {secret-key-name} # Required.
  env: # Optional.
  - parameter: {scaledObject-parameter-name} # Required.
    name: {env-name} # Required.
    containerName: {container-name} # Optional. Default: scaleTargetRef.containerName of ScaledObject
```

Based on the requirements you can mix and match the reference types providers in order to configure all required parameters.

Every parameter you define in `TriggerAuthentication` definition does not need to be included in the `metadata` of the trigger for your `ScaledObject` definition. To reference a `TriggerAuthentication` from a `ScaledObject` you add the `authenticationRef` to the trigger.

```yaml
# some Scaled Object
# ...
  triggers:
  - type: {scaler-type}
    metadata:
      param1: {some-value}
    authenticationRef:
      name: {trigger-authentication-name} # this may define other params not defined in metadata
```

### Environment variable(s)

You can pull information via one or more environment variables by providing the `name` of the variable for a given `containerName`.

```yaml
env: # Optional.
  - parameter: region # Required - Defined by the scale trigger
    name: my-env-var # Required.
    containerName: my-container # Optional. Default: scaleTargetRef.containerName of ScaledObject
```

**Assumptions:** `containerName` is in the same deployment as the configured `scaleTargetRef.deploymentName` in the ScaledObject, unless specified otherwise.

### Secret(s)

You can pull one or more secrets into the trigger by defining the `name` of the Kubernetes Secret and the `key` to use.

```yaml
secretTargetRef: # Optional.
  - parameter: connectionString # Required - Defined by the scale trigger
    name: my-keda-secret-entity # Required.
    key: azure-storage-connectionstring # Required.
```

**Assumptions:** `namespace` is in the same deployment as the configured `scaleTargetRef.deploymentName` in the ScaledObject, unless specified otherwise.

### Pod Authentication Providers

Several service providers allow you to assign an identity to a pod. By using that identity, you can defer authentication to the pod & the service provider, rather than configuring secrets.

Currently we support the following:

```yaml
podIdentity:
  provider: none | azure | aws-eks | aws-kiam # Optional. Default: none
```

#### Azure Pod Identity

Azure Pod Identity is an implementation of [**Azure AD Pod Identity**](https://github.com/Azure/aad-pod-identity) which let's you bind an [**Azure Managed Identity**](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/) to a Pod in a Kubernetes cluster as delegated access - *Don't manage secrets, let Azure AD do the hard work*.

You can tell KEDA to use Azure AD Pod Identity via `podIdentity.provider`.

```yaml
podIdentity:
  provider: azure # Optional. Default: false
```

Azure AD Pod Identity will give access to containers with a defined label for `aadpodidbinding`.  You can set this label on the KEDA operator deployment.  This can be done for you during deployment with Helm with `--set aadPodIdentity={your-label-name}`.

#### AWS EKS Pod Identity Webhook

[**EKS Pod Identity Webhook**](https://github.com/aws/amazon-eks-pod-identity-webhook), which is described more in depth [here](https://aws.amazon.com/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/), allows you to provide the role name using an annotation on a service account associated with your pod.

You can tell KEDA to use EKS Pod Identity Webhook via `podIdentity.provider`.

```yaml
podIdentity:
  provider: aws-eks # Optional. Default: false
```

#### AWS Kiam Pod Identity

[**Kiam**](https://github.com/uswitch/kiam/) lets you bind an AWS IAM Role to a pod using an annotation on the pod.

You can tell KEDA to use Kiam via `podIdentity.provider`.

```yaml
podIdentity:
  provider: aws-kiam # Optional. Default: false
```


================================================
FILE: content/docs/1.4/concepts/external-scalers.md
================================================
+++
title = "External Scalers"
weight = 500
+++

While KEDA ships with a set of [built-in scalers](../scalers), users can also extend KEDA through a GRPC service that implements the same interface as the built-in scalers.

Built-in scalers run in the KEDA process/pod, while external scalers require an externally managed GRPC server that's accessible from KEDA with optional [TLS authentication](https://grpc.io/docs/guides/auth/). KEDA itself acts as a GRPC client and it exposes similar service interface for the built-in scalers, so external scalers can fully replace built-in ones.

This document describes the external scaler interfaces and how to implement them in Go, Node, and .NET; however for more details on GRPC refer to [the official GRPC documentation](https://grpc.io/docs/)

Want to learn about existing external scalers? Explore our [external scaler community](https://github.com/kedacore/external-scalers).

## Overview

### Built-in scalers interface

Built-in scalers implement one of the following go interface:

```go
type Scaler interface {
	GetMetrics(ctx context.Context, metricName string, metricSelector labels.Selector) ([]external_metrics.ExternalMetricValue, error)
	GetMetricSpecForScaling() []v2beta2.MetricSpec
	IsActive(ctx context.Context) (bool, error)
	Close() error
}
```

The `Scaler` interface defines 4 methods:

- `IsActive` is called on `pollingInterval` defined in the ScaledObject/ScaledJob CRDs and scaling to 1 happens if this returns true.
- `Close` is called to allow the scaler to clean up connections or other resources.
- `GetMetricSpec` returns the target value for the HPA definition for the scaler. For more details refer to [Implementing `GetMetricSpec`](#4-implementing-getmetricspec).
- `GetMetrics` returns the value of the metric referred to from `GetMetricSpec`. For more details refer to [Implementing `GetMetrics`](#5-implementing-getmetrics).
  > Refer to the [HPA docs](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/) for how HPA calculates replicaCount based on metric value and target value.

### External Scaler GRPC interface

KEDA comes with an external scaler [`external`](../scalers/external.md).

The configuration in the ScaledObject points to a GRPC service endpoint that implements the following GRPC contract [`externalscaler.proto`](https://github.com/kedacore/keda/blob/v1.4.0/pkg/scalers/externalscaler/externalscaler.proto):

```proto
service ExternalScaler {
    rpc IsActive(ScaledObjectRef) returns (IsActiveResponse) {}
    rpc GetMetricSpec(ScaledObjectRef) returns (GetMetricSpecResponse) {}
    rpc GetMetrics(GetMetricsRequest) returns (GetMetricsResponse) {}
}
```

- `GetMetrics` and `GetMetricsSpec` mirror their counterparts in the `Scaler` interface for creating HPA definition.
- `IsActive` maps to the `IsActive` method on the `Scaler` interface.

Few things to notice:

- `IsActive`, `StreamIsActive`, and `GetMetricsSpec` are called with a `ScaledObjectRef` that contains the scaledObject name/namespace as well as the content of `metadata` defined in the trigger.

For example the following `ScaledObject`:

```yaml
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
  name: scaledobject-name
  namespace: scaledobject-namespace
spec:
  scaleTargetRef:
    deploymentName: deployment-name
  triggers:
    - type: external
      metadata:
        scalerAddress: service-address.svc.local:9090
        key1: value1
        key2: value2
```

KEDA will attempt a connection to `service-address.svc.local:9090` and calls `IsActive`, and `GetMetricsSpec` with the following `ScaledObjectRef`

```json
{
  "name": "scaledobject-name",
  "namespace": "scaledobject-namespace",
  "scalerMetadata": {
    "scalerAddress": "service-address.svc.local:9090",
    "key1": "value1",
    "key2": "value2"
  }
}
```

## Implementing KEDA external scaler GRPC interface

### Implementing an external scaler:

#### 1. Download [`externalscaler.proto`](https://github.com/kedacore/keda/blob/v1.4.0/pkg/scalers/externalscaler/externalscaler.proto)

#### 2. Prepare project:

{{< collapsible "Golang" >}}

2.1. Download [`./protoc`](https://github.com/protocolbuffers/protobuf/releases) for your platform

2.2. get `protoc-gen-go`

```bash
go get github.com/golang/protobuf/protoc-gen-go@v1.3.2
```

2.3. Prepare project

```bash
go mod init example.com/external-scaler/sample
mkdir externalscaler
protoc externalscaler.proto --go_out=plugins=grpc:externalscaler
```

{{< /collapsible >}}

{{< collapsible "C#" >}}
2.1. Create a new project

```bash
dotnet new console -o ExternalScalerSample
cd ExternalScalerSample

# add Grpc.AspNetCore
dotnet add package Grpc.AspNetCore
dotnet add package Newtonsoft.Json

# Create a Protos and Services folders
mkdir Protos
mkdir Services
```

2.2. Move `externalscaler.proto` to `Protos` folder

2.3. Compile `externalscaler.proto` using this in `ExternalScalerSample.csproj`

```xml
  <ItemGroup>
    <Protobuf Include="Protos\externalscaler.proto" GrpcServices="Server" />
  </ItemGroup>
```

{{< /collapsible >}}

{{< collapsible "Javascript" >}}
2.1. Prepare the project

```bash
npm install --save grpc request
```

{{< /collapsible >}}

#### 3. Implementing `IsActive`

Just like `IsActive(ctx context.Context) (bool, error)` in the go interface, `IsActive` method in the GRPC interface is called every `pollingInterval` with a `ScaledObjectRef` object that contains the scaledObject name, namespace, and scaler metadata. This section implements an external scaler that queries earthquakes from https://earthquake.usgs.gov/ and scales the deployment if there has been more than 2 earthquakes with `magnitude > 1.0` around a particular longitude/latitude in the previous day

`ScaledObject`

```yaml
apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
  name: scaledobject-name
  namespace: scaledobject-namespace
spec:
  scaleTargetRef:
    name: deployment-name
  triggers:
    - type: external
      metadata:
        scalerAddress: earthquake-scaler:9090
        longitude: "-122.335167"
        latitude: "47.608013"
```

{{< collapsible "Golang" >}}

Full implementation can be found here: https://github.com/kedacore/external-scaler-samples

`main.go`

```golang
func (e *ExternalScaler) IsActive(ctx context.Context, scaledObject *pb.ScaledObjectRef) (*pb.IsActiveResponse, error) {
	// request.Scalermetadata contains the `metadata` defined in the ScaledObject
	longitude := scaledObject.ScalerMetadata["longitude"]
	latitude := scaledObject.ScalerMetadata["latitude"]

	if len(longitude) == 0 || len(latitude) == 0 {
		return nil, status.Error(codes.InvalidArgument, "longitude and latitude must be specified")
	}

	startTime := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
	endTime := time.Now().Format("2006-01-02")
	radiusKM := 500
	query := fmt.Sprintf("format=geojson&starttime=%s&endtime=%s&longitude=%s&latitude=%s&maxradiuskm=%d", startTime, endTime, longitude, latitude, radiusKM)

	resp, err := http.Get(fmt.Sprintf("https://earthquake.usgs.gov/fdsnws/event/1/query?%s", query))
	if err != nil {
		return nil, status.Error(codes.Internal, err.Error())
	}

	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, status.Error(codes.Internal, err.Error())
	}

	payload := USGSResponse{}
	err = json.Unmarshal(body, &payload)
	if err != nil {
		return nil, status.Error(codes.Internal, err.Error())
	}

	// count how many earthquakes with mag > 1.0
	count := 0
	for _, f := range payload.Features {
		if f.Properties.Mag > 1.0 {
			count++
		}
	}

	// return true if there is more than 2
	return &pb.IsActiveResponse{
		Result: count > 2,
	}, nil
}
```

{{< /collapsible >}}

{{< collapsible "C#" >}}
Full implementation can be found here: https://github.com/kedacore/external-scaler-samples

`Services/ExternalScalerService.cs`

```csharp
public class ExternalScalerService : ExternalScaler.ExternalScalerBase
{
  private static readonly HttpClient _client = new HttpClient();

  public override async Task<IsActiveResponse> IsActive(ScaledObjectRef request, ServerCallContext context)
  {
    // request.Scalermetadata contains the `metadata` defined in the ScaledObject
    if (!request.ScalerMetadata.ContainsKey("latitude") ||
      !request.ScalerMetadata.ContainsKey("longitude")) {
      throw new ArgumentException("longitude and latitude must be specified");
    }

    var longitude = request.ScalerMetadata["longitude"];
    var latitude = request.ScalerMetadata["latitude"];
    var startTime = DateTime.UtcNow.AddDays(-1).ToString("yyyy-MM-dd");
    var endTime = DateTime.UtcNow.ToString("yyyy-MM-dd");
    var radiusKm = 500;
    var query = $"format=geojson&starttime={startTime}&endtime={endTime}&longitude={longitude}&latitude={latitude}&maxradiuskm={radiusKm}";

    var resp = await _client.GetAsync($"https://earthquake.usgs.gov/fdsnws/event/1/query?{query}");
    resp.EnsureSuccessStatusCode();
    var payload = JsonConvert.DeserializeObject<USGSResponse>(await resp.Content.ReadAsStringAsync());

    return new IsActiveResponse
    {
      // return true if there is more than 2 Earthquakes with mag > 1.0
      Result = payload.features.Count(f => f.properties.mag > 1.0) > 2
    };
  }
}
```

{{< /collapsible >}}

{{< collapsible "Javascript" >}}
`index.js`

```js
const grpc = require("grpc");
const request = require("request");
const externalScalerProto = grpc.load("externalscaler.proto");

const server = new grpc.Server();
server.addService(externalScalerProto.externalscaler.ExternalScaler.service, {
  isActive: (call, callback) => {
    const longitude = call.request.scalerMetadata.longitude;
    const latitude = call.request.scalerMetadata.latitude;
    if (!longitude || !latitude) {
      callback({
        code: grpc.status.INVALID_ARGUMENT,
        details: "longitude and latitude must be specified",
      });
    } else {
      const now = new Date();
      const yesterday = new Date(new Date().setDate(new Date().getDate() - 1));

      const startTime = `${yesterday.getUTCFullYear()}-${yesterday.getUTCMonth()}-${yesterday.getUTCDay()}`;
      const endTime = `${now.getUTCFullYear()}-${now.getUTCMonth()}-${now.getUTCDay()}`;
      const radiusKm = 500;
      const query = `format=geojson&starttime=${startTime}&endtime=${endTime}&longitude=${longitude}&latitude=${latitude}&maxradiuskm=${radiusKm}`;

      request.get(
        {
          url: `https://earthquake.usgs.gov/fdsnws/event/1/query?${query}`,
          json: true,
        },
        (err, resp, data) => {
          if (err) {
            callback({
              code: grpc.status.INTERNAL,
              details: err,
            });
          } else if (resp.statusCode !== 200) {
            callback({
              code: grpc.status.INTERNAL,
              details: `expected status 200, got ${resp.statusCode}`,
            });
          } else {
            // count how many earthquakes with mag > 1.0
            let count = 0;
            data.features.forEach((i) => {
              if (i.properties.mag > 1.0) {
                count++;
              }
            });
            callback(null, {
              result: count > 2,
            });
          }
        }
      );
    }
  },
});

server.bind("127.0.0.1:9090", grpc.ServerCredentials.createInsecure());
console.log("Server listening on 127.0.0.1:9090");

server.start();
```

{{< /collapsible >}}

#### 4. Implementing `GetMetricSpec`

`GetMetricSpec` returns the `target` value for [the HPA definition for the scaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/). This scaler will define a static target of 10, but the threshold value is often specified in the metadata for other scalers.

{{< collapsible "Golang" >}}

```golang
func (e *ExternalScaler) GetMetricSpec(context.Context, *pb.ScaledObjectRef) (*pb.GetMetricSpecResponse, error) {
	return &pb.GetMetricSpecResponse{
		MetricSpecs: []*pb.MetricSpec{{
			MetricName: "earthquakeThreshold",
			TargetSize: 10,
		}},
	}, nil
}
```

{{< /collapsible >}}

{{< collapsible "C#" >}}

```csharp
public override async Task<GetMetricSpecResponse> GetMetricSpec(ScaledObjectRef request, ServerCallContext context)
{
  var resp = new GetMetricSpecResponse();

  resp.MetricSpecs.Add(new MetricSpec
  {
    MetricName = "earthquakeThreshold",
    TargetSize = 10
  });

  return Task.FromResult(resp);
}
```

{{< /collapsible >}}

{{< collapsible "Javascript" >}}

```js
server.addService(externalScalerProto.externalscaler.ExternalScaler.service, {
  // ...
  getMetricSpec: (call, callback) => {
    callback(null, {
      metricSpecs: [
        {
          metricName: "earthquakeThreshold",
          targetSize: 10,
        },
      ],
    });
  },
});
```

{{< /collapsible >}}

#### 5. Implementing `GetMetrics`

`GetMetrics` returns the value of the metric referred to from `GetMetricSpec`, in this example it's `earthquakeThreshold`.

{{< collapsible "Golang" >}}

```golang
func (e *ExternalScaler) GetMetrics(_ context.Context, metricRequest *pb.GetMetricsRequest) (*pb.GetMetricsResponse, error) {
	longitude := metricRequest.ScaledObjectRef.ScalerMetadata["longitude"]
	latitude := metricRequest.ScaledObjectRef.ScalerMetadata["latitude"]

	if len(longitude) == 0 || len(latitude) == 0 {
		return nil, status.Error(codes.InvalidArgument, "longitude and latitude must be specified")
	}

	earthquakeCount, err := getEarthQuakeCount(longitude, latitude, 1.0)
	if err != nil {
		return nil, status.Error(codes.Internal, err.Error())
	}

	return &pb.GetMetricsResponse{
		MetricValues: []*pb.MetricValue{{
			MetricName: "earthquakeThreshold",
			MetricValue: int64(earthquakeCount),
		}},
	}, nil
}
```

{{< /collapsible >}}

{{< collapsible "C#" >}}

```csharp
public override async Task<GetMetricsResponse> GetMetrics(GetMetricsRequest request, ServerCallContext context)
{
  if (!request.ScaledObjectRef.ScalerMetadata.ContainsKey("latitude") ||
    !request.ScaledObjectRef.ScalerMetadata.ContainsKey("longitude"))
  {
    throw new ArgumentException("longitude and latitude must be specified");
  }

  var longitude = request.ScaledObjectRef.ScalerMetadata["longitude"];
  var latitude = request.ScaledObjectRef.ScalerMetadata["latitude"];

  var earthquakeCount = await GetEarthQuakeCount(longitude, latitude);

  var resp = new GetMetricsResponse();
  resp.MetricValues.Add(new MetricValue
  {
    MetricName = "earthquakeThreshold",
    MetricValue_ = earthquakeCount
  });

  return resp;
}
```

{{< /collapsible >}}

{{< collapsible "Javascript" >}}

```js
server.addService(externalScalerProto.externalscaler.ExternalScaler.service, {
  // ...
  getMetrics: (call, callback) => {
    const longitude = call.request.scaledObjectRef.scalerMetadata.longitude;
    const latitude = call.request.scaledObjectRef.scalerMetadata.latitude;
    if (!longitude || !latitude) {
      callback({
        code: grpc.status.INVALID_ARGUMENT,
        details: "longitude and latitude must be specified",
      });
    } else {
      getEarthquakeCount((err, count) => {
        if (err) {
          callback({
            code: grpc.status.INTERNAL,
            details: err,
          });
        } else {
          callback(null, {
            metricValues: [
              {
                metricName: "earthquakeThreshold",
                metricValue: count,
              },
            ],
          });
        }
      });
    }
  },
});
```

{{< /collapsible >}}


================================================
FILE: content/docs/1.4/concepts/scaling-deployments.md
================================================
+++
title = "Scaling Deployments"
weight = 200
+++

## Overview

Deployments are the most common way to scale workloads with KEDA.

It allows you to define the Kubernetes Deployment that you want KEDA to scale based on a scale trigger. KEDA will monitor that service and based on the events that occur it will automatically scale your deployment out/in accordingly.

Behind the scenes, KEDA acts to monitor the event source and feed that data to Kubernetes and the HPA (Horizontal Pod Autoscaler) to drive rapid scale of a deployment.  Each replica of a deployment is actively pulling items from the event source.  With KEDA and scaling deployments you can scale based on events while also preserving rich connection and processing semantics with the event source (e.g. in-order processing, retries, deadletter, checkpointing).

For example, if you wanted to use KEDA with an Apache Kafka topic as event source, the flow of information would be:

* When no messages are pending processing, KEDA can scale the deployment to zero.
* When a message arrives, KEDA detects this event and activates the deployment.
* When the deployment starts running, one of the containers connects to Kafka and starts pulling messages.
* As more messages arrive at the Kafka Topic, KEDA can feed this data to the HPA to drive scale out.
* Each replica of the deployment is actively processing messages.  Very likely, each replica is processing a batch of messages in a distributed manner.

## ScaledObject spec

This specification describes the `ScaledObject` custom resource definition which is used to define how
Download .txt
gitextract_gwzsnkkw/

├── .devcontainer/
│   └── devcontainer.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── renovate.json5
│   ├── reviewers.yml
│   └── workflows/
│       ├── auto-assign.yml
│       ├── check-links.yml
│       ├── pr-bot-welcome.yml
│       └── stale.yml
├── .gitignore
├── .htmltest.yml
├── .nvmrc
├── .whitesource
├── CONTRIBUTING.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── archetypes/
│   ├── blog.md
│   ├── provider.md
│   ├── scaler.md
│   └── troubleshooting.md
├── assets/
│   ├── js/
│   │   ├── alpine.js
│   │   ├── docsearch.js
│   │   ├── scaler-search.js
│   │   └── site.js
│   └── sass/
│       ├── card.sass
│       ├── content.sass
│       ├── nav.sass
│       └── style.sass
├── content/
│   ├── blog/
│   │   ├── 2020-03-31-keda-cncf-sandbox.md
│   │   ├── 2020-09-11-keda-2.0-beta.md
│   │   ├── 2020-11-04-keda-2.0-release.md
│   │   ├── 2021-03-26-migrating-to-github-container-registry.md
│   │   ├── 2021-04-06-why-alibaba-cloud-uses-keda-for-app-autoscaling.md
│   │   ├── 2021-05-27-azure-pipelines-scaler.md
│   │   ├── 2021-06-24-announcing-http-add-on.md
│   │   ├── 2021-08-04-keda-cast-ai.md
│   │   ├── 2022-02-09-predictkube-scaler.md
│   │   ├── 2022-03-10-how-zapier-uses-keda.md
│   │   ├── 2022-08-10-keda-2.8.0-release.md
│   │   ├── 2022-09-27-http-add-on-is-on-hold.md
│   │   ├── 2022-12-12-keda-2.9.0-release.md
│   │   ├── 2023-05-02-certificate-improvements.md
│   │   ├── 2023-05-04-keda-survey.md
│   │   ├── 2023-08-22-keda-cncf-graduation.md
│   │   ├── 2025-09-15-gcp-deprecations.md
│   │   └── _index.md
│   ├── community.md
│   ├── docs/
│   │   ├── 1.4/
│   │   │   ├── _index.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   └── redis-lists.md
│   │   │   └── troubleshooting.md
│   │   ├── 1.5/
│   │   │   ├── _index.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.0/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   └── cluster.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.1/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   └── cluster.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.10/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.11/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   └── solr.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.12/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   └── solr.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.13/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   └── solr.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.14/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   └── solr.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.15/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solr.md
│   │   │   │   └── splunk.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.16/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solr.md
│   │   │   │   └── splunk.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.17/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── bound-service-account-token.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── nsq.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solr.md
│   │   │   │   ├── splunk.md
│   │   │   │   └── temporal.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.18/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── bound-service-account-token.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   ├── schema.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── forgejo.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── nsq.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub-dm.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solarwinds.md
│   │   │   │   ├── solr.md
│   │   │   │   ├── splunk-observability.md
│   │   │   │   ├── splunk.md
│   │   │   │   ├── sumologic.md
│   │   │   │   └── temporal.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.19/
│   │   │   ├── _index.md
│   │   │   ├── addons/
│   │   │   │   └── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── bound-service-account-token.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── file-path.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   ├── schema.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── forgejo.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-resource.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── nsq.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub-dm.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solarwinds.md
│   │   │   │   ├── solr.md
│   │   │   │   ├── splunk-observability.md
│   │   │   │   ├── splunk.md
│   │   │   │   ├── sumologic.md
│   │   │   │   └── temporal.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.2/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   └── events.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.20/
│   │   │   ├── _index.md
│   │   │   ├── addons/
│   │   │   │   └── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-secret-manager.md
│   │   │   │   ├── aws.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── bound-service-account-token.md
│   │   │   │   ├── configmap.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── file-path.md
│   │   │   │   ├── gcp-secret-manager.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── istio-integration.md
│   │   │   │   ├── opentelemetry.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── admission-webhooks.md
│   │   │   │   ├── cloud-events.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── metrics-server.md
│   │   │   │   ├── schema.md
│   │   │   │   └── security.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── events.md
│   │   │   │   ├── faq.md
│   │   │   │   ├── glossary.md
│   │   │   │   ├── scaledjob-spec.md
│   │   │   │   └── scaledobject-spec.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka-go.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── arangodb.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── beanstalkd.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── dynatrace.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── forgejo.md
│   │   │   │   ├── gcp-cloud-tasks.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── github-runner.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-resource.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── nsq.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   ├── solace-pub-sub-dm.md
│   │   │   │   ├── solace-pub-sub.md
│   │   │   │   ├── solarwinds.md
│   │   │   │   ├── solr.md
│   │   │   │   ├── splunk-observability.md
│   │   │   │   ├── splunk.md
│   │   │   │   ├── sumologic.md
│   │   │   │   └── temporal.md
│   │   │   ├── setupscaler.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.3/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   └── events.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   └── redis-streams.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.4/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.5/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.6/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.7/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.8/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   ├── 2.9/
│   │   │   ├── _index.md
│   │   │   ├── authentication-providers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── aws-eks.md
│   │   │   │   ├── aws-kiam.md
│   │   │   │   ├── azure-ad-pod-identity.md
│   │   │   │   ├── azure-ad-workload-identity.md
│   │   │   │   ├── azure-key-vault.md
│   │   │   │   ├── environment-variable.md
│   │   │   │   ├── gcp-workload-identity.md
│   │   │   │   ├── hashicorp-vault.md
│   │   │   │   └── secret.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── authentication.md
│   │   │   │   ├── external-scalers.md
│   │   │   │   ├── scaling-deployments.md
│   │   │   │   ├── scaling-jobs.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── deploy.md
│   │   │   ├── integrations/
│   │   │   │   ├── _index.md
│   │   │   │   └── prometheus.md
│   │   │   ├── migration.md
│   │   │   ├── operate/
│   │   │   │   ├── _index.md
│   │   │   │   ├── cluster.md
│   │   │   │   ├── events.md
│   │   │   │   └── metrics-server.md
│   │   │   ├── reference/
│   │   │   │   └── faq.md
│   │   │   ├── scalers/
│   │   │   │   ├── _index.md
│   │   │   │   ├── activemq.md
│   │   │   │   ├── apache-kafka.md
│   │   │   │   ├── artemis.md
│   │   │   │   ├── aws-cloudwatch.md
│   │   │   │   ├── aws-dynamodb-streams.md
│   │   │   │   ├── aws-dynamodb.md
│   │   │   │   ├── aws-kinesis.md
│   │   │   │   ├── aws-sqs.md
│   │   │   │   ├── azure-app-insights.md
│   │   │   │   ├── azure-data-explorer.md
│   │   │   │   ├── azure-event-hub.md
│   │   │   │   ├── azure-log-analytics.md
│   │   │   │   ├── azure-monitor.md
│   │   │   │   ├── azure-pipelines.md
│   │   │   │   ├── azure-service-bus.md
│   │   │   │   ├── azure-storage-blob.md
│   │   │   │   ├── azure-storage-queue.md
│   │   │   │   ├── cassandra.md
│   │   │   │   ├── couchdb.md
│   │   │   │   ├── cpu.md
│   │   │   │   ├── cron.md
│   │   │   │   ├── datadog.md
│   │   │   │   ├── elasticsearch.md
│   │   │   │   ├── etcd.md
│   │   │   │   ├── external-push.md
│   │   │   │   ├── external.md
│   │   │   │   ├── gcp-pub-sub.md
│   │   │   │   ├── gcp-stackdriver.md
│   │   │   │   ├── gcp-storage.md
│   │   │   │   ├── graphite.md
│   │   │   │   ├── huawei-cloudeye.md
│   │   │   │   ├── ibm-mq.md
│   │   │   │   ├── influxdb.md
│   │   │   │   ├── kubernetes-workload.md
│   │   │   │   ├── liiklus-topic.md
│   │   │   │   ├── loki.md
│   │   │   │   ├── memory.md
│   │   │   │   ├── metrics-api.md
│   │   │   │   ├── mongodb.md
│   │   │   │   ├── mssql.md
│   │   │   │   ├── mysql.md
│   │   │   │   ├── nats-jetstream.md
│   │   │   │   ├── nats-streaming.md
│   │   │   │   ├── new-relic.md
│   │   │   │   ├── openstack-metric.md
│   │   │   │   ├── openstack-swift.md
│   │   │   │   ├── postgresql.md
│   │   │   │   ├── predictkube.md
│   │   │   │   ├── prometheus.md
│   │   │   │   ├── pulsar.md
│   │   │   │   ├── rabbitmq-queue.md
│   │   │   │   ├── redis-cluster-lists.md
│   │   │   │   ├── redis-cluster-streams.md
│   │   │   │   ├── redis-lists.md
│   │   │   │   ├── redis-sentinel-lists.md
│   │   │   │   ├── redis-sentinel-streams.md
│   │   │   │   ├── redis-streams.md
│   │   │   │   ├── selenium-grid-scaler.md
│   │   │   │   └── solace-pub-sub.md
│   │   │   └── troubleshooting.md
│   │   └── _index.md
│   ├── enterprise.md
│   ├── http-add-on/
│   │   ├── 0.14/
│   │   │   ├── _index.md
│   │   │   ├── concepts/
│   │   │   │   ├── _index.md
│   │   │   │   ├── architecture.md
│   │   │   │   ├── routing.md
│   │   │   │   └── scaling.md
│   │   │   ├── getting-started/
│   │   │   │   └── _index.md
│   │   │   ├── operations/
│   │   │   │   ├── _index.md
│   │   │   │   ├── configure-interceptor.md
│   │   │   │   ├── configure-observability.md
│   │   │   │   ├── configure-tls.md
│   │   │   │   ├── installation.md
│   │   │   │   ├── migrate-httpscaledobject-to-interceptorroute.md
│   │   │   │   └── troubleshooting.md
│   │   │   ├── reference/
│   │   │   │   ├── _index.md
│   │   │   │   ├── environment-variables.md
│   │   │   │   ├── httpscaledobject.md
│   │   │   │   ├── interceptorroute.md
│   │   │   │   └── metrics.md
│   │   │   └── user-guide/
│   │   │       ├── _index.md
│   │   │       ├── autoscale-an-app.md
│   │   │       ├── configure-cold-start.md
│   │   │       ├── configure-ingress.md
│   │   │       ├── configure-routing.md
│   │   │       ├── configure-scaling.md
│   │   │       └── configure-timeouts.md
│   │   └── _index.md
│   ├── resources.md
│   ├── support.md
│   ├── troubleshooting/
│   │   ├── 2.17/
│   │   │   └── api-server-throttling.md
│   │   ├── 2.18/
│   │   │   └── api-server-throttling.md
│   │   ├── _index.md
│   │   ├── aws-keda-operator-iam.md
│   │   ├── context-deadline-exceeded.md
│   │   ├── gke-external-metrics.md
│   │   ├── helm-upgrade-crd.md
│   │   ├── istio-keda-faileddiscoverycheck.md
│   │   ├── keda-external-metrics-issue.md
│   │   ├── profiling-keda-components.md
│   │   ├── proxy-network.md
│   │   └── scaledobject-not-scale.md
│   └── videos.md
├── data/
│   ├── faq.toml
│   ├── faq20.toml
│   ├── faq2_14.toml
│   ├── faq2_15.toml
│   └── faq2_19.toml
├── hugo.toml
├── includes/
│   └── get-involved.md
├── layouts/
│   ├── 404.html
│   ├── _default/
│   │   ├── _markup/
│   │   │   ├── render-image.html
│   │   │   └── render-link.html
│   │   ├── baseof.html
│   │   ├── card-info.html
│   │   ├── list.lunr.json
│   │   ├── single.html
│   │   └── sitemap.xml
│   ├── blog/
│   │   ├── list.html
│   │   └── single.html
│   ├── docs/
│   │   ├── list.html
│   │   └── single.html
│   ├── http-add-on/
│   │   ├── list.html
│   │   └── single.html
│   ├── index.html
│   ├── index.redirects
│   ├── partials/
│   │   ├── article.html
│   │   ├── blog/
│   │   │   ├── article.html
│   │   │   ├── list-hero.html
│   │   │   ├── pagination.html
│   │   │   ├── post-hero.html
│   │   │   ├── posts.html
│   │   │   └── rss-button.html
│   │   ├── content.html
│   │   ├── css.html
│   │   ├── doc-version-selector.html
│   │   ├── docs/
│   │   │   └── hero.html
│   │   ├── favicon.html
│   │   ├── footer.html
│   │   ├── general-version-selector.html
│   │   ├── headline-hash.html
│   │   ├── hero.html
│   │   ├── home/
│   │   │   ├── cncf.html
│   │   │   ├── features.html
│   │   │   ├── get-involved.html
│   │   │   ├── hero.html
│   │   │   ├── samples.html
│   │   │   ├── scalers.html
│   │   │   ├── video.html
│   │   │   └── what-is.html
│   │   ├── include.html
│   │   ├── javascript.html
│   │   ├── logo-section.html
│   │   ├── meta.html
│   │   ├── nav.html
│   │   ├── navbar.html
│   │   ├── scaler-layout.html
│   │   ├── scaler-template.html
│   │   ├── scalers.html
│   │   ├── social-buttons.html
│   │   └── youtube-embed.html
│   ├── scalers/
│   │   └── list.html
│   └── shortcodes/
│       ├── authentication-providers.html
│       ├── collapsible.html
│       ├── enterprise.html
│       ├── faq.html
│       ├── faq20.html
│       ├── include.html
│       ├── integrations.html
│       ├── partners-icons.html
│       ├── scalers-compact.html
│       ├── supportedby-icons.html
│       ├── troubleshooting.html
│       └── user-icons.html
├── netlify.toml
├── package.json
├── schematics.pptx
└── static/
    ├── _redirects
    └── img/
        └── keda-arch-new-source.excalidraw
Download .txt
SYMBOL INDEX (5 symbols across 3 files)

FILE: assets/js/docsearch.js
  function meta (line 4) | function meta(name) {

FILE: assets/js/scaler-search.js
  function initSearchIndex (line 88) | async function initSearchIndex() {
  function search (line 171) | function search(keywords) {

FILE: assets/js/site.js
  function shiftWindow (line 6) | function shiftWindow() {
  function copyPermalink (line 14) | function copyPermalink(id) {
Copy disabled (too large) Download .json
Condensed preview — 2089 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (11,784K chars).
[
  {
    "path": ".devcontainer/devcontainer.json",
    "chars": 206,
    "preview": "{\n  \"name\": \"keda-docs\",\n  \"image\": \"mcr.microsoft.com/devcontainers/javascript-node:24\",\n  \"features\": {\n    \"ghcr.io/d"
  },
  {
    "path": ".editorconfig",
    "chars": 201,
    "preview": "root = true\n\n[*]\nend_of_line = lf\n\n[Makefile]\nindent_style = tab\n\n[*.{html,js,json,md,sass,toml,yaml}]\nindent_style = sp"
  },
  {
    "path": ".gitattributes",
    "chars": 165,
    "preview": "# normalize all introduced text files to LF line endings (recognized by git)\n *           text=auto\n # additionally decl"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 236,
    "preview": "# General owners\n*                      @kedacore/keda-docs\n# HTTP Add-on\ncontent/http-add-on/   @kedacore/keda-http-mai"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 316,
    "preview": "<!-- Thank you for contributing!\n\n     Read more about how you can contribute in our contribution guide:\n     https://gi"
  },
  {
    "path": ".github/renovate.json5",
    "chars": 908,
    "preview": "{\n  $schema: \"https://docs.renovatebot.com/renovate-schema.json\",\n  extends: [\n    // See https://docs.renovatebot.com/p"
  },
  {
    "path": ".github/reviewers.yml",
    "chars": 179,
    "preview": "# https://github.com/marketplace/actions/auto-assign-reviewer-by-files\n\"**/*\":\n  - team: keda-docs\n\n# Any datadog.md fil"
  },
  {
    "path": ".github/workflows/auto-assign.yml",
    "chars": 314,
    "preview": "name: Auto Assign\non:\n  - pull_request_target\n\njobs:\n  assign_reviewer:\n    runs-on: ubuntu-slim\n    steps:\n      - uses"
  },
  {
    "path": ".github/workflows/check-links.yml",
    "chars": 558,
    "preview": "# Adapted from @chalin's work on https://github.com/chalin/docsy-starter\n\nname: Links\n\non:\n  merge_group:\n  pull_request"
  },
  {
    "path": ".github/workflows/pr-bot-welcome.yml",
    "chars": 1347,
    "preview": "name: PR Welcome Bot\n\non:\n  pull_request_target:\n    types: [opened]\n    branches:\n    - 'main'\n\npermissions:\n  issues: "
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 1342,
    "preview": "name: \"Stale\"\n\non:\n  schedule:\n    - cron: \"0 2 * * *\"\n  workflow_dispatch:\n\npermissions:\n  actions: write\n  issues: wri"
  },
  {
    "path": ".gitignore",
    "chars": 135,
    "preview": "node_modules/\n/public\n.idea\nresources/\n.DS_Store\n.hugo_build.lock\n\n# Link checker artifacts\nbin/\ntmp/\n\n# Local Netlify f"
  },
  {
    "path": ".htmltest.yml",
    "chars": 440,
    "preview": "DirectoryPath: public\nEnforceHTTPS: true\nEnforceHTML5: true\nIgnoreDirectoryMissingTrailingSlash: true\nCheckExternal: fal"
  },
  {
    "path": ".nvmrc",
    "chars": 6,
    "preview": "lts/*\n"
  },
  {
    "path": ".whitesource",
    "chars": 213,
    "preview": "{\n  \"scanSettings\": {\n    \"baseBranches\": []\n  },\n  \"checkRunSettings\": {\n    \"vulnerableCheckRunConclusionLevel\": \"fail"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 14698,
    "preview": "# Contributing to KEDA\n\nThanks for helping make KEDA better 😍.\n\nThere are many areas we can use contributions - document"
  },
  {
    "path": "LICENSE",
    "chars": 11411,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "MAINTAINERS.md",
    "chars": 175,
    "preview": "# Kubernetes Event-driven Autoscaling (KEDA) Maintainers\n\nYou can find a recent update of the maintainers [here](https:/"
  },
  {
    "path": "Makefile",
    "chars": 1534,
    "preview": "HTMLTEST_DIR=tmp\nHTMLTEST?=htmltest # Specify as make arg if different\nHTMLTEST_ARGS?=--skip-external\n\nDOCS=public/docs\n"
  },
  {
    "path": "README.md",
    "chars": 841,
    "preview": "# KEDA - Docs\n\nDocumentation and landing page for the KEDA project at [keda.sh][].\n\n- [Become a listed KEDA user!](CONTR"
  },
  {
    "path": "archetypes/blog.md",
    "chars": 128,
    "preview": "+++\ntitle = \"{{ replace .Name \"-\" \" \" | title }}\"\ndate = {{ dateFormat \"2006-01-02\" .Date }}\nauthor = \"Scaley McAutoscal"
  },
  {
    "path": "archetypes/provider.md",
    "chars": 110,
    "preview": "+++\ntitle = \"{{ replace .Name \"-\" \" \" | title }}\"\n+++\n\nAuthentication provider description.\n\n```yaml\ncode\n```\n"
  },
  {
    "path": "archetypes/scaler.md",
    "chars": 993,
    "preview": "+++\ntitle = \"{{ replace .Name \"-\" \" \" | title }}\"\navailability = \"\"\nmaintainer = \"\"\ndescription = \"Insert description he"
  },
  {
    "path": "archetypes/troubleshooting.md",
    "chars": 79,
    "preview": "+++\ntitle = \"Replace this with a question\"\n+++\n\nAnd provide the answer here...\n"
  },
  {
    "path": "assets/js/alpine.js",
    "chars": 72,
    "preview": "import Alpine from \"alpinejs\";\n\nwindow.Alpine = Alpine;\nAlpine.start();\n"
  },
  {
    "path": "assets/js/docsearch.js",
    "chars": 1129,
    "preview": "import docsearch from \"@docsearch/js\";\nimport * as params from \"@params\";\n\nfunction meta(name) {\n  const element = docum"
  },
  {
    "path": "assets/js/scaler-search.js",
    "chars": 7031,
    "preview": "import lunr from \"lunr\";\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n  \"use strict\";\n\n  const input = document."
  },
  {
    "path": "assets/js/site.js",
    "chars": 1693,
    "preview": "// Anchor link scroll offset — compensates for the fixed navbar.\nconst navbar = document.getElementsByClassName(\"navbar\""
  },
  {
    "path": "assets/sass/card.sass",
    "chars": 307,
    "preview": ".card\n  height: 100%\n  box-shadow: 5px 10px 15px #e4e4e4;\n  border-radius: 5px\n\n  display: flex\n  flex-direction: column"
  },
  {
    "path": "assets/sass/content.sass",
    "chars": 761,
    "preview": ".doc-hero\n  margin-bottom: 1.5rem\n\n  .title sup\n    line-height: 0\n\n.content\n  a sup\n    margin-left: 0.1rem\n\n  ol li pr"
  },
  {
    "path": "assets/sass/nav.sass",
    "chars": 1511,
    "preview": "=active\n  font-weight: $weight-bold\n\n  a\n    color: $primary !important\n\n=split-x\n  display: flex\n  flex-direction: row\n"
  },
  {
    "path": "assets/sass/style.sass",
    "chars": 9652,
    "preview": "@charset \"utf-8\"\n\n\n// Site-specific variables here\n$keda-blue: #326de6 \n$keda-light-blue: #679bf0\n$twitter-blue: rgb(29,"
  },
  {
    "path": "content/blog/2020-03-31-keda-cncf-sandbox.md",
    "chars": 4589,
    "preview": "+++\ntitle = \"Kubernetes Event-driven Autoscaling (KEDA) is now an official CNCF Sandbox project 🎉\"\ndate = 2020-03-31\naut"
  },
  {
    "path": "content/blog/2020-09-11-keda-2.0-beta.md",
    "chars": 3709,
    "preview": "+++\ntitle = \"Give KEDA 2.0 (Beta) a test drive\"\ndate = 2020-09-11\nauthor = \"KEDA Maintainers\"\naliases = [\n    \"/blog/ked"
  },
  {
    "path": "content/blog/2020-11-04-keda-2.0-release.md",
    "chars": 11930,
    "preview": "+++\ntitle = \"Announcing KEDA 2.0 - Taking app autoscaling to the next level\"\ndate = 2020-11-04\nauthor = \"KEDA Maintainer"
  },
  {
    "path": "content/blog/2021-03-26-migrating-to-github-container-registry.md",
    "chars": 3983,
    "preview": "+++\ntitle = \"Migrating our container images to GitHub Container Registry\"\ndate = 2021-03-26\nauthor = \"KEDA Maintainers\"\n"
  },
  {
    "path": "content/blog/2021-04-06-why-alibaba-cloud-uses-keda-for-app-autoscaling.md",
    "chars": 10403,
    "preview": "+++\ntitle = \"Why Alibaba Cloud uses KEDA for application autoscaling\"\ndate = 2021-04-06\nauthor = \"Yan Xun, Andy Shi, and"
  },
  {
    "path": "content/blog/2021-05-27-azure-pipelines-scaler.md",
    "chars": 8989,
    "preview": "+++\ntitle = \"Autoscaling Azure Pipelines agents with KEDA\"\ndate = 2021-05-27\nauthor = \"Troy Denorme\"\n+++\n\nWith the addit"
  },
  {
    "path": "content/blog/2021-06-24-announcing-http-add-on.md",
    "chars": 8961,
    "preview": "+++\ntitle = \"Announcing KEDA HTTP Add-on v0.1.0\"\ndate = 2021-06-24\nauthor = \"Aaron Schlesinger and Tom Kerkhove\"\n+++\n\nOv"
  },
  {
    "path": "content/blog/2021-08-04-keda-cast-ai.md",
    "chars": 9828,
    "preview": "+++\ntitle = \"How CAST AI uses KEDA for Kubernetes autoscaling\"\ndate = 2021-08-04\nauthor = \"Žilvinas Urbonas (CAST AI), A"
  },
  {
    "path": "content/blog/2022-02-09-predictkube-scaler.md",
    "chars": 7676,
    "preview": "+++\ntitle = \"Introducing PredictKube - an AI-based predictive autoscaler for KEDA made by Dysnix\"\ndate = 2022-02-14\nauth"
  },
  {
    "path": "content/blog/2022-03-10-how-zapier-uses-keda.md",
    "chars": 2701,
    "preview": "+++\ntitle = \"How Zapier uses KEDA\"\ndate = 2022-03-10\nauthor = \"Ratnadeep Debnath (Zapier)\"\naliases = [\n\"/blog/how-zapier"
  },
  {
    "path": "content/blog/2022-08-10-keda-2.8.0-release.md",
    "chars": 5218,
    "preview": "+++\ntitle = \"Announcing KEDA v2.8 🎉\"\ndate = 2022-08-10\nauthor = \"Jeff Hollan (KEDA), Tom Kerkhove (KEDA)\"\naliases = [\n\"/"
  },
  {
    "path": "content/blog/2022-09-27-http-add-on-is-on-hold.md",
    "chars": 1791,
    "preview": "+++\ntitle = \"HTTP add-on is looking for contributors by end of November\"\ndate = 2022-09-27\nauthor = \"Tom Kerkhove (KEDA)"
  },
  {
    "path": "content/blog/2022-12-12-keda-2.9.0-release.md",
    "chars": 8318,
    "preview": "+++\ntitle = \"Announcing KEDA v2.9 🎉\"\ndate = 2022-12-12\nauthor = \"Jeff Hollan (Snowflake), Tom Kerkhove (Microsoft) and Z"
  },
  {
    "path": "content/blog/2023-05-02-certificate-improvements.md",
    "chars": 7206,
    "preview": "+++\ntitle = \"Securing autoscaling with the newly improved certificate management in KEDA 2.10\"\ndate = 2023-05-16\nauthor "
  },
  {
    "path": "content/blog/2023-05-04-keda-survey.md",
    "chars": 1140,
    "preview": "+++\ntitle = \"Help shape the future of KEDA with our survey 📝\"\ndate = 2023-05-04\nauthor = \"KEDA Maintainers\"\naliases = [\n"
  },
  {
    "path": "content/blog/2023-08-22-keda-cncf-graduation.md",
    "chars": 2207,
    "preview": "+++\ntitle = \"KEDA is graduating to CNCF Graduated project 🎉\"\ndate = 2023-08-22\nauthor = \"KEDA Maintainers\"\naliases = [\n\""
  },
  {
    "path": "content/blog/2025-09-15-gcp-deprecations.md",
    "chars": 6074,
    "preview": "+++\ntitle = \"Google Cloud deprecations\"\ndate = 2025-09-15\nauthor = \"Jorge Turrado (SCRM Lidl International Hub)\"\naliases"
  },
  {
    "path": "content/blog/_index.md",
    "chars": 77,
    "preview": "+++\ntitle = \"The KEDA Blog\"\ndescription = \"Updates, tutorials, and more\"\n+++\n"
  },
  {
    "path": "content/community.md",
    "chars": 508,
    "preview": "+++\ntitle = \"Community\"\ndescription = \"How you can get involved with the KEDA ecosystem\"\n+++\n\n## Get Involved\n\n{{< inclu"
  },
  {
    "path": "content/docs/1.4/_index.md",
    "chars": 351,
    "preview": "+++\ntitle = \"The KEDA Documentation\"\nweight = 1\n+++\n\nWelcome to the documentation for **KEDA**, the Kubernetes Event-dri"
  },
  {
    "path": "content/docs/1.4/concepts/_index.md",
    "chars": 3094,
    "preview": "+++\ntitle = \"KEDA Concepts\"\ndescription = \"What KEDA is and how it works\"\nweight = 1\n+++\n\n## What is KEDA?\n\n**KEDA** is "
  },
  {
    "path": "content/docs/1.4/concepts/authentication.md",
    "chars": 7773,
    "preview": "+++\ntitle = \"Authentication\"\nweight = 500\n+++\n\nOften a scaler will require authentication or secrets and config to check"
  },
  {
    "path": "content/docs/1.4/concepts/external-scalers.md",
    "chars": 15513,
    "preview": "+++\ntitle = \"External Scalers\"\nweight = 500\n+++\n\nWhile KEDA ships with a set of [built-in scalers](../scalers), users ca"
  },
  {
    "path": "content/docs/1.4/concepts/scaling-deployments.md",
    "chars": 6822,
    "preview": "+++\ntitle = \"Scaling Deployments\"\nweight = 200\n+++\n\n## Overview\n\nDeployments are the most common way to scale workloads "
  },
  {
    "path": "content/docs/1.4/concepts/scaling-jobs.md",
    "chars": 2445,
    "preview": "+++\ntitle = \"Scaling Jobs\"\nweight = 300\n+++\n\n\n## Overview\n\nAs an alternate to [scaling event-driven code as deployments]"
  },
  {
    "path": "content/docs/1.4/concepts/troubleshooting.md",
    "chars": 740,
    "preview": "+++\ntitle = \"Troubleshooting\"\nweight = 600\n+++\n\n## KEDA logging and telemetry\n\nThe first place to look if something isn'"
  },
  {
    "path": "content/docs/1.4/deploy.md",
    "chars": 3529,
    "preview": "+++\ntitle = \"Deploying KEDA\"\n+++\n\nWe provide a few approaches to deploy KEDA runtime in your Kubernetes clusters:\n\n- [He"
  },
  {
    "path": "content/docs/1.4/reference/faq.md",
    "chars": 35,
    "preview": "+++\ntitle = \"FAQ\"\n+++\n\n{{< faq >}}\n"
  },
  {
    "path": "content/docs/1.4/scalers/_index.md",
    "chars": 176,
    "preview": "+++\ntitle = \"Scalers\"\nweight = 2\n+++\n\nKEDA **scalers** can both detect if a deployment should be activated or deactivate"
  },
  {
    "path": "content/docs/1.4/scalers/apache-kafka.md",
    "chars": 4057,
    "preview": "+++\ntitle = \"Apache Kafka\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on an"
  },
  {
    "path": "content/docs/1.4/scalers/aws-cloudwatch.md",
    "chars": 3982,
    "preview": "+++\ntitle = \"AWS CloudWatch\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/1.4/scalers/aws-kinesis.md",
    "chars": 3106,
    "preview": "+++\ntitle = \"AWS Kinesis Stream\"\navailability = \"v1.1+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based"
  },
  {
    "path": "content/docs/1.4/scalers/aws-sqs.md",
    "chars": 3029,
    "preview": "+++\ntitle = \"AWS SQS Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on A"
  },
  {
    "path": "content/docs/1.4/scalers/azure-event-hub.md",
    "chars": 2319,
    "preview": "+++\ntitle = \"Azure Event Hubs\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based o"
  },
  {
    "path": "content/docs/1.4/scalers/azure-monitor.md",
    "chars": 4172,
    "preview": "+++\ntitle = \"Azure Monitor\"\navailability = \"v1.3+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on A"
  },
  {
    "path": "content/docs/1.4/scalers/azure-service-bus.md",
    "chars": 3261,
    "preview": "+++\ntitle = \"Azure Service Bus\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on Azure Service Bus Qu"
  },
  {
    "path": "content/docs/1.4/scalers/azure-storage-blob.md",
    "chars": 2457,
    "preview": "+++\ntitle = \"Azure Blob Storage\"\navailability = \"v1.1+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based"
  },
  {
    "path": "content/docs/1.4/scalers/azure-storage-queue.md",
    "chars": 1846,
    "preview": "+++\ntitle = \"Azure Storage Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications base"
  },
  {
    "path": "content/docs/1.4/scalers/external.md",
    "chars": 1089,
    "preview": "+++\ntitle = \"External\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on an ext"
  },
  {
    "path": "content/docs/1.4/scalers/gcp-pub-sub.md",
    "chars": 1660,
    "preview": "+++\ntitle = \"Google Cloud Platform‎ Pub/Sub\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applic"
  },
  {
    "path": "content/docs/1.4/scalers/huawei-cloudeye.md",
    "chars": 4142,
    "preview": "+++\ntitle = \"Huawei Cloudeye\"\navailability = \"v1.1+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on"
  },
  {
    "path": "content/docs/1.4/scalers/liiklus-topic.md",
    "chars": 1459,
    "preview": "+++\ntitle = \"Liiklus Topic\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on L"
  },
  {
    "path": "content/docs/1.4/scalers/mysql.md",
    "chars": 2728,
    "preview": "+++\ntitle = \"MySQL\"\navailability = \"v1.2+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on MySQL que"
  },
  {
    "path": "content/docs/1.4/scalers/nats-streaming.md",
    "chars": 1396,
    "preview": "+++\ntitle = \"NATS Streaming\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/1.4/scalers/postgresql.md",
    "chars": 3436,
    "preview": "+++\ntitle = \"PostgreSQL\"\navailability = \"v1.2+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on a Po"
  },
  {
    "path": "content/docs/1.4/scalers/prometheus.md",
    "chars": 1338,
    "preview": "+++\ntitle = \"Prometheus\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on Prom"
  },
  {
    "path": "content/docs/1.4/scalers/rabbitmq-queue.md",
    "chars": 2412,
    "preview": "+++\ntitle = \"RabbitMQ Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/1.4/scalers/redis-lists.md",
    "chars": 2583,
    "preview": "+++\ntitle = \"Redis Lists\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on Red"
  },
  {
    "path": "content/docs/1.4/troubleshooting.md",
    "chars": 123,
    "preview": "+++\ntitle = \"Troubleshooting\"\ndescription = \"How to address commonly encountered KEDA issues\"\n+++\n\n{{< troubleshooting >"
  },
  {
    "path": "content/docs/1.5/_index.md",
    "chars": 351,
    "preview": "+++\ntitle = \"The KEDA Documentation\"\nweight = 1\n+++\n\nWelcome to the documentation for **KEDA**, the Kubernetes Event-dri"
  },
  {
    "path": "content/docs/1.5/concepts/_index.md",
    "chars": 3094,
    "preview": "+++\ntitle = \"KEDA Concepts\"\ndescription = \"What KEDA is and how it works\"\nweight = 1\n+++\n\n## What is KEDA?\n\n**KEDA** is "
  },
  {
    "path": "content/docs/1.5/concepts/authentication.md",
    "chars": 9545,
    "preview": "+++\ntitle = \"Authentication\"\nweight = 500\n+++\n\nOften a scaler will require authentication or secrets and config to check"
  },
  {
    "path": "content/docs/1.5/concepts/external-scalers.md",
    "chars": 15513,
    "preview": "+++\ntitle = \"External Scalers\"\nweight = 500\n+++\n\nWhile KEDA ships with a set of [built-in scalers](../scalers), users ca"
  },
  {
    "path": "content/docs/1.5/concepts/scaling-deployments.md",
    "chars": 6823,
    "preview": "+++\ntitle = \"Scaling Deployments\"\nweight = 200\n+++\n\n## Overview\n\nDeployments are the most common way to scale workloads "
  },
  {
    "path": "content/docs/1.5/concepts/scaling-jobs.md",
    "chars": 2453,
    "preview": "+++\ntitle = \"Scaling Jobs\"\nweight = 300\n+++\n\n\n## Overview\n\nAs an alternate to [scaling event-driven code as deployments]"
  },
  {
    "path": "content/docs/1.5/concepts/troubleshooting.md",
    "chars": 740,
    "preview": "+++\ntitle = \"Troubleshooting\"\nweight = 600\n+++\n\n## KEDA logging and telemetry\n\nThe first place to look if something isn'"
  },
  {
    "path": "content/docs/1.5/deploy.md",
    "chars": 3735,
    "preview": "+++\ntitle = \"Deploying KEDA\"\n+++\n\nWe provide a few approaches to deploy KEDA runtime in your Kubernetes clusters:\n\n- [He"
  },
  {
    "path": "content/docs/1.5/reference/faq.md",
    "chars": 35,
    "preview": "+++\ntitle = \"FAQ\"\n+++\n\n{{< faq >}}\n"
  },
  {
    "path": "content/docs/1.5/scalers/_index.md",
    "chars": 176,
    "preview": "+++\ntitle = \"Scalers\"\nweight = 2\n+++\n\nKEDA **scalers** can both detect if a deployment should be activated or deactivate"
  },
  {
    "path": "content/docs/1.5/scalers/apache-kafka.md",
    "chars": 4057,
    "preview": "+++\ntitle = \"Apache Kafka\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on an"
  },
  {
    "path": "content/docs/1.5/scalers/artemis.md",
    "chars": 2410,
    "preview": "+++\ntitle = \"ActiveMQ Artemis\"\navailability = \"v1.5+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based o"
  },
  {
    "path": "content/docs/1.5/scalers/aws-cloudwatch.md",
    "chars": 3981,
    "preview": "+++\ntitle = \"AWS CloudWatch\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/1.5/scalers/aws-kinesis.md",
    "chars": 3106,
    "preview": "+++\ntitle = \"AWS Kinesis Stream\"\navailability = \"v1.1+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based"
  },
  {
    "path": "content/docs/1.5/scalers/aws-sqs.md",
    "chars": 3029,
    "preview": "+++\ntitle = \"AWS SQS Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on A"
  },
  {
    "path": "content/docs/1.5/scalers/azure-event-hub.md",
    "chars": 2319,
    "preview": "+++\ntitle = \"Azure Event Hubs\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based o"
  },
  {
    "path": "content/docs/1.5/scalers/azure-monitor.md",
    "chars": 4172,
    "preview": "+++\ntitle = \"Azure Monitor\"\navailability = \"v1.3+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on A"
  },
  {
    "path": "content/docs/1.5/scalers/azure-service-bus.md",
    "chars": 3261,
    "preview": "+++\ntitle = \"Azure Service Bus\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on Azure Service Bus Qu"
  },
  {
    "path": "content/docs/1.5/scalers/azure-storage-blob.md",
    "chars": 2457,
    "preview": "+++\ntitle = \"Azure Blob Storage\"\navailability = \"v1.1+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based"
  },
  {
    "path": "content/docs/1.5/scalers/azure-storage-queue.md",
    "chars": 1846,
    "preview": "+++\ntitle = \"Azure Storage Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications base"
  },
  {
    "path": "content/docs/1.5/scalers/cron.md",
    "chars": 1967,
    "preview": "+++\ntitle = \"Cron\"\navailability = \"v1.5+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on a cron sch"
  },
  {
    "path": "content/docs/1.5/scalers/external.md",
    "chars": 1089,
    "preview": "+++\ntitle = \"External\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on an ext"
  },
  {
    "path": "content/docs/1.5/scalers/gcp-pub-sub.md",
    "chars": 1660,
    "preview": "+++\ntitle = \"Google Cloud Platform‎ Pub/Sub\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applic"
  },
  {
    "path": "content/docs/1.5/scalers/huawei-cloudeye.md",
    "chars": 4142,
    "preview": "+++\ntitle = \"Huawei Cloudeye\"\navailability = \"v1.1+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on"
  },
  {
    "path": "content/docs/1.5/scalers/liiklus-topic.md",
    "chars": 1459,
    "preview": "+++\ntitle = \"Liiklus Topic\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on L"
  },
  {
    "path": "content/docs/1.5/scalers/mysql.md",
    "chars": 2728,
    "preview": "+++\ntitle = \"MySQL\"\navailability = \"v1.2+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on MySQL que"
  },
  {
    "path": "content/docs/1.5/scalers/nats-streaming.md",
    "chars": 1396,
    "preview": "+++\ntitle = \"NATS Streaming\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/1.5/scalers/postgresql.md",
    "chars": 3436,
    "preview": "+++\ntitle = \"PostgreSQL\"\navailability = \"v1.2+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on a Po"
  },
  {
    "path": "content/docs/1.5/scalers/prometheus.md",
    "chars": 1338,
    "preview": "+++\ntitle = \"Prometheus\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on Prom"
  },
  {
    "path": "content/docs/1.5/scalers/rabbitmq-queue.md",
    "chars": 3891,
    "preview": "+++\ntitle = \"RabbitMQ Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/1.5/scalers/redis-lists.md",
    "chars": 2583,
    "preview": "+++\ntitle = \"Redis Lists\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on Red"
  },
  {
    "path": "content/docs/1.5/scalers/redis-streams.md",
    "chars": 5355,
    "preview": "+++\ntitle = \"Redis Streams\"\navailability = \"v1.5+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on R"
  },
  {
    "path": "content/docs/1.5/troubleshooting.md",
    "chars": 123,
    "preview": "+++\ntitle = \"Troubleshooting\"\ndescription = \"How to address commonly encountered KEDA issues\"\n+++\n\n{{< troubleshooting >"
  },
  {
    "path": "content/docs/2.0/_index.md",
    "chars": 351,
    "preview": "+++\ntitle = \"The KEDA Documentation\"\nweight = 1\n+++\n\nWelcome to the documentation for **KEDA**, the Kubernetes Event-dri"
  },
  {
    "path": "content/docs/2.0/authentication-providers/_index.md",
    "chars": 134,
    "preview": "+++\ntitle = \"Authentication Providers\"\nweight = 5\n+++\n\nAvailable authentication providers for KEDA:\n\n{{< authentication-"
  },
  {
    "path": "content/docs/2.0/authentication-providers/aws-eks.md",
    "chars": 525,
    "preview": "+++\ntitle = \"AWS EKS Pod Identity Webhook\"\n+++\n\n[**EKS Pod Identity Webhook**](https://github.com/aws/amazon-eks-pod-ide"
  },
  {
    "path": "content/docs/2.0/authentication-providers/aws-kiam.md",
    "chars": 289,
    "preview": "+++\ntitle = \"AWS Kiam Pod Identity\"\n+++\n\n[**Kiam**](https://github.com/uswitch/kiam/) lets you bind an AWS IAM Role to a"
  },
  {
    "path": "content/docs/2.0/authentication-providers/azure-ad-pod-identity.md",
    "chars": 1263,
    "preview": "+++\ntitle = \"Azure Pod Identity\"\n+++\n\nAzure Pod Identity is an implementation of [**Azure AD Pod Identity**](https://git"
  },
  {
    "path": "content/docs/2.0/authentication-providers/environment-variable.md",
    "chars": 608,
    "preview": "+++\ntitle = \"Environment variable\"\n+++\n\nYou can pull information via one or more environment variables by providing the "
  },
  {
    "path": "content/docs/2.0/authentication-providers/hashicorp-vault.md",
    "chars": 1644,
    "preview": "+++\ntitle = \"Hashicorp Vault secret\"\n+++\n\n\nYou can pull one or more Hashicorp Vault secrets into the trigger by defining"
  },
  {
    "path": "content/docs/2.0/authentication-providers/secret.md",
    "chars": 547,
    "preview": "+++\ntitle = \"Secret\"\n+++\n\nYou can pull one or more secrets into the trigger by defining the `name` of the Kubernetes Sec"
  },
  {
    "path": "content/docs/2.0/concepts/_index.md",
    "chars": 3303,
    "preview": "+++\ntitle = \"KEDA Concepts\"\ndescription = \"What KEDA is and how it works\"\nweight = 1\n+++\n\n## What is KEDA?\n\n**KEDA** is "
  },
  {
    "path": "content/docs/2.0/concepts/authentication.md",
    "chars": 5954,
    "preview": "+++\ntitle = \"Authentication\"\nweight = 500\n+++\n\nOften a scaler will require authentication or secrets and config to check"
  },
  {
    "path": "content/docs/2.0/concepts/external-scalers.md",
    "chars": 19469,
    "preview": "+++\ntitle = \"External Scalers\"\nweight = 500\n+++\n\nWhile KEDA ships with a set of [built-in scalers](../scalers), users ca"
  },
  {
    "path": "content/docs/2.0/concepts/scaling-deployments.md",
    "chars": 11092,
    "preview": "+++\ntitle = \"Scaling Deployments, StatefulSets & Custom Resources\"\nweight = 200\n+++\n\n## Overview\n\n### Scaling of Deploym"
  },
  {
    "path": "content/docs/2.0/concepts/scaling-jobs.md",
    "chars": 9995,
    "preview": "+++\ntitle = \"Scaling Jobs\"\nweight = 300\n+++\n\n\n## Overview\n\nAs an alternate to [scaling event-driven code as deployments]"
  },
  {
    "path": "content/docs/2.0/concepts/troubleshooting.md",
    "chars": 740,
    "preview": "+++\ntitle = \"Troubleshooting\"\nweight = 600\n+++\n\n## KEDA logging and telemetry\n\nThe first place to look if something isn'"
  },
  {
    "path": "content/docs/2.0/deploy.md",
    "chars": 4042,
    "preview": "+++\ntitle = \"Deploying KEDA\"\n+++\n\nWe provide a few approaches to deploy KEDA runtime in your Kubernetes clusters:\n\n- [He"
  },
  {
    "path": "content/docs/2.0/integrations/_index.md",
    "chars": 118,
    "preview": "+++\ntitle = \"Integrations\"\nweight = 6\n+++\n\nAn overview of tools/products integrating with KEDA:\n\n{{< integrations >}}\n"
  },
  {
    "path": "content/docs/2.0/integrations/prometheus.md",
    "chars": 997,
    "preview": "+++\ntitle = \"Integrate with Prometheus\"\ndescription = \"Overview of all Prometheus metrics that KEDA provides\"\navailabili"
  },
  {
    "path": "content/docs/2.0/migration.md",
    "chars": 11659,
    "preview": "+++\ntitle = \"Migration Guide\"\n+++\n\n## Migrating from KEDA v1 to v2\n\nPlease note that you **can not** run both KEDA v1 an"
  },
  {
    "path": "content/docs/2.0/operate/_index.md",
    "chars": 194,
    "preview": "+++\ntitle = \"Operate\"\ndescription = \"Guidance & requirements for operating KEDA\"\nweight = 1\n+++\n\nWe provide guidance & r"
  },
  {
    "path": "content/docs/2.0/operate/cluster.md",
    "chars": 3661,
    "preview": "+++\ntitle = \"Cluster\"\ndescription = \"Guidance & requirements for running KEDA in your cluster\"\nweight = 100\n+++\n\n## Requ"
  },
  {
    "path": "content/docs/2.0/reference/faq.md",
    "chars": 57,
    "preview": "+++\ntitle = \"FAQ\"\n+++\n\n{{< faq20 versionData=\"faq20\" >}}\n"
  },
  {
    "path": "content/docs/2.0/scalers/_index.md",
    "chars": 176,
    "preview": "+++\ntitle = \"Scalers\"\nweight = 2\n+++\n\nKEDA **scalers** can both detect if a deployment should be activated or deactivate"
  },
  {
    "path": "content/docs/2.0/scalers/apache-kafka.md",
    "chars": 6039,
    "preview": "+++\ntitle = \"Apache Kafka\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on an"
  },
  {
    "path": "content/docs/2.0/scalers/artemis.md",
    "chars": 3415,
    "preview": "+++\ntitle = \"ActiveMQ Artemis\"\navailability = \"v1.5+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based o"
  },
  {
    "path": "content/docs/2.0/scalers/aws-cloudwatch.md",
    "chars": 3940,
    "preview": "+++\ntitle = \"AWS CloudWatch\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/2.0/scalers/aws-kinesis.md",
    "chars": 3041,
    "preview": "+++\ntitle = \"AWS Kinesis Stream\"\navailability = \"v1.1+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based"
  },
  {
    "path": "content/docs/2.0/scalers/aws-sqs.md",
    "chars": 3124,
    "preview": "+++\ntitle = \"AWS SQS Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on A"
  },
  {
    "path": "content/docs/2.0/scalers/azure-event-hub.md",
    "chars": 2869,
    "preview": "+++\ntitle = \"Azure Event Hubs\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based o"
  },
  {
    "path": "content/docs/2.0/scalers/azure-log-analytics.md",
    "chars": 17690,
    "preview": "+++\ntitle = \"Azure Log Analytics\"\navailability = \"v2.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications base"
  },
  {
    "path": "content/docs/2.0/scalers/azure-monitor.md",
    "chars": 4910,
    "preview": "+++\ntitle = \"Azure Monitor\"\navailability = \"v1.3+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on A"
  },
  {
    "path": "content/docs/2.0/scalers/azure-service-bus.md",
    "chars": 3419,
    "preview": "+++\ntitle = \"Azure Service Bus\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on Azure Service Bus Qu"
  },
  {
    "path": "content/docs/2.0/scalers/azure-storage-blob.md",
    "chars": 2885,
    "preview": "+++\ntitle = \"Azure Blob Storage\"\navailability = \"v1.1+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based"
  },
  {
    "path": "content/docs/2.0/scalers/azure-storage-queue.md",
    "chars": 2166,
    "preview": "+++\ntitle = \"Azure Storage Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications base"
  },
  {
    "path": "content/docs/2.0/scalers/cpu.md",
    "chars": 2539,
    "preview": "+++\ntitle = \"CPU\"\navailability = \"v2.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on cpu metrics"
  },
  {
    "path": "content/docs/2.0/scalers/cron.md",
    "chars": 4511,
    "preview": "+++\ntitle = \"Cron\"\navailability = \"v1.5+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on a cron sch"
  },
  {
    "path": "content/docs/2.0/scalers/external-push.md",
    "chars": 1301,
    "preview": "+++\ntitle = \"External Push\"\navailability = \"v2.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on a"
  },
  {
    "path": "content/docs/2.0/scalers/external.md",
    "chars": 1175,
    "preview": "+++\ntitle = \"External\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on an ext"
  },
  {
    "path": "content/docs/2.0/scalers/gcp-pub-sub.md",
    "chars": 2623,
    "preview": "+++\ntitle = \"Google Cloud Platform‎ Pub/Sub\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applic"
  },
  {
    "path": "content/docs/2.0/scalers/huawei-cloudeye.md",
    "chars": 4087,
    "preview": "+++\ntitle = \"Huawei Cloudeye\"\navailability = \"v1.1+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on"
  },
  {
    "path": "content/docs/2.0/scalers/ibm-mq.md",
    "chars": 3726,
    "preview": "+++\ntitle = \"IBM MQ\"\navailability = \"v2.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on IBM MQ Q"
  },
  {
    "path": "content/docs/2.0/scalers/liiklus-topic.md",
    "chars": 1555,
    "preview": "+++\ntitle = \"Liiklus Topic\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on L"
  },
  {
    "path": "content/docs/2.0/scalers/memory.md",
    "chars": 2290,
    "preview": "+++\ntitle = \"Memory\"\navailability = \"v2.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on memory m"
  },
  {
    "path": "content/docs/2.0/scalers/metrics-api.md",
    "chars": 7101,
    "preview": "+++\ntitle = \"Metrics API\"\navailability = \"v2.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on a m"
  },
  {
    "path": "content/docs/2.0/scalers/mysql.md",
    "chars": 3232,
    "preview": "+++\ntitle = \"MySQL\"\navailability = \"v1.2+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on MySQL que"
  },
  {
    "path": "content/docs/2.0/scalers/nats-streaming.md",
    "chars": 1463,
    "preview": "+++\ntitle = \"NATS Streaming\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/2.0/scalers/postgresql.md",
    "chars": 3454,
    "preview": "+++\ntitle = \"PostgreSQL\"\navailability = \"v1.2+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on a Po"
  },
  {
    "path": "content/docs/2.0/scalers/prometheus.md",
    "chars": 1378,
    "preview": "+++\ntitle = \"Prometheus\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on Prom"
  },
  {
    "path": "content/docs/2.0/scalers/rabbitmq-queue.md",
    "chars": 4319,
    "preview": "+++\ntitle = \"RabbitMQ Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/2.0/scalers/redis-lists.md",
    "chars": 3898,
    "preview": "+++\ntitle = \"Redis Lists\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on Red"
  },
  {
    "path": "content/docs/2.0/scalers/redis-streams.md",
    "chars": 6027,
    "preview": "+++\ntitle = \"Redis Streams\"\navailability = \"v1.5+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on R"
  },
  {
    "path": "content/docs/2.0/troubleshooting.md",
    "chars": 123,
    "preview": "+++\ntitle = \"Troubleshooting\"\ndescription = \"How to address commonly encountered KEDA issues\"\n+++\n\n{{< troubleshooting >"
  },
  {
    "path": "content/docs/2.1/_index.md",
    "chars": 351,
    "preview": "+++\ntitle = \"The KEDA Documentation\"\nweight = 1\n+++\n\nWelcome to the documentation for **KEDA**, the Kubernetes Event-dri"
  },
  {
    "path": "content/docs/2.1/authentication-providers/_index.md",
    "chars": 134,
    "preview": "+++\ntitle = \"Authentication Providers\"\nweight = 5\n+++\n\nAvailable authentication providers for KEDA:\n\n{{< authentication-"
  },
  {
    "path": "content/docs/2.1/authentication-providers/aws-eks.md",
    "chars": 525,
    "preview": "+++\ntitle = \"AWS EKS Pod Identity Webhook\"\n+++\n\n[**EKS Pod Identity Webhook**](https://github.com/aws/amazon-eks-pod-ide"
  },
  {
    "path": "content/docs/2.1/authentication-providers/aws-kiam.md",
    "chars": 289,
    "preview": "+++\ntitle = \"AWS Kiam Pod Identity\"\n+++\n\n[**Kiam**](https://github.com/uswitch/kiam/) lets you bind an AWS IAM Role to a"
  },
  {
    "path": "content/docs/2.1/authentication-providers/azure-ad-pod-identity.md",
    "chars": 1263,
    "preview": "+++\ntitle = \"Azure Pod Identity\"\n+++\n\nAzure Pod Identity is an implementation of [**Azure AD Pod Identity**](https://git"
  },
  {
    "path": "content/docs/2.1/authentication-providers/environment-variable.md",
    "chars": 608,
    "preview": "+++\ntitle = \"Environment variable\"\n+++\n\nYou can pull information via one or more environment variables by providing the "
  },
  {
    "path": "content/docs/2.1/authentication-providers/hashicorp-vault.md",
    "chars": 1644,
    "preview": "+++\ntitle = \"Hashicorp Vault secret\"\n+++\n\n\nYou can pull one or more Hashicorp Vault secrets into the trigger by defining"
  },
  {
    "path": "content/docs/2.1/authentication-providers/secret.md",
    "chars": 547,
    "preview": "+++\ntitle = \"Secret\"\n+++\n\nYou can pull one or more secrets into the trigger by defining the `name` of the Kubernetes Sec"
  },
  {
    "path": "content/docs/2.1/concepts/_index.md",
    "chars": 3374,
    "preview": "+++\ntitle = \"KEDA Concepts\"\ndescription = \"What KEDA is and how it works\"\nweight = 1\n+++\n\n## What is KEDA?\n\n**KEDA** is "
  },
  {
    "path": "content/docs/2.1/concepts/authentication.md",
    "chars": 7204,
    "preview": "+++\ntitle = \"Authentication\"\nweight = 500\n+++\n\nOften a scaler will require authentication or secrets and config to check"
  },
  {
    "path": "content/docs/2.1/concepts/external-scalers.md",
    "chars": 19469,
    "preview": "+++\ntitle = \"External Scalers\"\nweight = 500\n+++\n\nWhile KEDA ships with a set of [built-in scalers](../scalers), users ca"
  },
  {
    "path": "content/docs/2.1/concepts/scaling-deployments.md",
    "chars": 11093,
    "preview": "+++\ntitle = \"Scaling Deployments, StatefulSets & Custom Resources\"\nweight = 200\n+++\n\n## Overview\n\n### Scaling of Deploym"
  },
  {
    "path": "content/docs/2.1/concepts/scaling-jobs.md",
    "chars": 9995,
    "preview": "+++\ntitle = \"Scaling Jobs\"\nweight = 300\n+++\n\n\n## Overview\n\nAs an alternate to [scaling event-driven code as deployments]"
  },
  {
    "path": "content/docs/2.1/concepts/troubleshooting.md",
    "chars": 740,
    "preview": "+++\ntitle = \"Troubleshooting\"\nweight = 600\n+++\n\n## KEDA logging and telemetry\n\nThe first place to look if something isn'"
  },
  {
    "path": "content/docs/2.1/deploy.md",
    "chars": 4141,
    "preview": "+++\ntitle = \"Deploying KEDA\"\n+++\n\nWe provide a few approaches to deploy KEDA runtime in your Kubernetes clusters:\n\n- [He"
  },
  {
    "path": "content/docs/2.1/integrations/_index.md",
    "chars": 118,
    "preview": "+++\ntitle = \"Integrations\"\nweight = 6\n+++\n\nAn overview of tools/products integrating with KEDA:\n\n{{< integrations >}}\n"
  },
  {
    "path": "content/docs/2.1/integrations/prometheus.md",
    "chars": 997,
    "preview": "+++\ntitle = \"Integrate with Prometheus\"\ndescription = \"Overview of all Prometheus metrics that KEDA provides\"\navailabili"
  },
  {
    "path": "content/docs/2.1/migration.md",
    "chars": 11658,
    "preview": "+++\ntitle = \"Migration Guide\"\n+++\n\n## Migrating from KEDA v1 to v2\n\nPlease note that you **can not** run both KEDA v1 an"
  },
  {
    "path": "content/docs/2.1/operate/_index.md",
    "chars": 194,
    "preview": "+++\ntitle = \"Operate\"\ndescription = \"Guidance & requirements for operating KEDA\"\nweight = 1\n+++\n\nWe provide guidance & r"
  },
  {
    "path": "content/docs/2.1/operate/cluster.md",
    "chars": 4417,
    "preview": "+++\ntitle = \"Cluster\"\ndescription = \"Guidance & requirements for running KEDA in your cluster\"\nweight = 100\n+++\n\n## Requ"
  },
  {
    "path": "content/docs/2.1/reference/faq.md",
    "chars": 57,
    "preview": "+++\ntitle = \"FAQ\"\n+++\n\n{{< faq20 versionData=\"faq20\" >}}\n"
  },
  {
    "path": "content/docs/2.1/scalers/_index.md",
    "chars": 176,
    "preview": "+++\ntitle = \"Scalers\"\nweight = 2\n+++\n\nKEDA **scalers** can both detect if a deployment should be activated or deactivate"
  },
  {
    "path": "content/docs/2.1/scalers/apache-kafka.md",
    "chars": 6039,
    "preview": "+++\ntitle = \"Apache Kafka\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on an"
  },
  {
    "path": "content/docs/2.1/scalers/artemis.md",
    "chars": 3416,
    "preview": "+++\ntitle = \"ActiveMQ Artemis\"\navailability = \"v1.5+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based o"
  },
  {
    "path": "content/docs/2.1/scalers/aws-cloudwatch.md",
    "chars": 5233,
    "preview": "+++\ntitle = \"AWS CloudWatch\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on "
  },
  {
    "path": "content/docs/2.1/scalers/aws-kinesis.md",
    "chars": 3041,
    "preview": "+++\ntitle = \"AWS Kinesis Stream\"\navailability = \"v1.1+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based"
  },
  {
    "path": "content/docs/2.1/scalers/aws-sqs.md",
    "chars": 3124,
    "preview": "+++\ntitle = \"AWS SQS Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on A"
  },
  {
    "path": "content/docs/2.1/scalers/azure-event-hub.md",
    "chars": 3611,
    "preview": "+++\ntitle = \"Azure Event Hubs\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based o"
  },
  {
    "path": "content/docs/2.1/scalers/azure-log-analytics.md",
    "chars": 17688,
    "preview": "+++\ntitle = \"Azure Log Analytics\"\navailability = \"v2.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications base"
  },
  {
    "path": "content/docs/2.1/scalers/azure-monitor.md",
    "chars": 4847,
    "preview": "+++\ntitle = \"Azure Monitor\"\navailability = \"v1.3+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on A"
  },
  {
    "path": "content/docs/2.1/scalers/azure-service-bus.md",
    "chars": 3419,
    "preview": "+++\ntitle = \"Azure Service Bus\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based on Azure Service Bus Qu"
  },
  {
    "path": "content/docs/2.1/scalers/azure-storage-blob.md",
    "chars": 2889,
    "preview": "+++\ntitle = \"Azure Blob Storage\"\navailability = \"v1.1+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications based"
  },
  {
    "path": "content/docs/2.1/scalers/azure-storage-queue.md",
    "chars": 2166,
    "preview": "+++\ntitle = \"Azure Storage Queue\"\navailability = \"v1.0+\"\nmaintainer = \"Microsoft\"\ndescription = \"Scale applications base"
  },
  {
    "path": "content/docs/2.1/scalers/cpu.md",
    "chars": 2539,
    "preview": "+++\ntitle = \"CPU\"\navailability = \"v2.0+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on cpu metrics"
  },
  {
    "path": "content/docs/2.1/scalers/cron.md",
    "chars": 4511,
    "preview": "+++\ntitle = \"Cron\"\navailability = \"v1.5+\"\nmaintainer = \"Community\"\ndescription = \"Scale applications based on a cron sch"
  }
]

// ... and 1889 more files (download for full content)

About this extraction

This page contains the full source code of the kedacore/keda-docs GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2089 files (10.8 MB), approximately 2.9M tokens, and a symbol index with 5 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!