--- apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: annotations: alm-examples: |- [ { "apiVersion": "eventing.keda.sh/v1alpha1", "kind": "CloudEventSource", "metadata": { "labels": { "app.kubernetes.io/created-by": "keda", "app.kubernetes.io/instance": "cloudeventsource-sample", "app.kubernetes.io/managed-by": "kustomize", "app.kubernetes.io/name": "cloudeventsource", "app.kubernetes.io/part-of": "keda" }, "name": "cloudeventsource-sample" }, "spec": { "clusterName": "cluster-sample", "destination": { "http": { "uri": "http://foo.bar" } } } }, { "apiVersion": "eventing.keda.sh/v1alpha1", "kind": "ClusterCloudEventSource", "metadata": { "labels": { "app.kubernetes.io/created-by": "keda", "app.kubernetes.io/instance": "clustercloudeventsource-sample", "app.kubernetes.io/managed-by": "kustomize", "app.kubernetes.io/name": "clustercloudeventsource", "app.kubernetes.io/part-of": "keda" }, "name": "clustercloudeventsource-sample" }, "spec": { "clusterName": "clustercluster-sample", "destination": { "http": { "uri": "http://foo.bar" } } } }, { "apiVersion": "keda.sh/v1alpha1", "kind": "ClusterTriggerAuthentication", "metadata": { "name": "example-clustertriggerauthentication" }, "spec": { "secretTargetRef": [ { "key": "example-role-key", "name": "example-secret-name", "parameter": "example-secret-parameter" } ] } }, { "apiVersion": "keda.sh/v1alpha1", "kind": "KedaController", "metadata": { "name": "keda", "namespace": "openshift-keda" }, "spec": { "admissionWebhooks": { "logEncoder": "console", "logLevel": "info" }, "httpAddon": { "enabled": false }, "metricsServer": { "logLevel": "0", "networkEgressAllowAll": "true" }, "operator": { "logEncoder": "console", "logLevel": "info", "networkEgressAllowAll": "true" }, "serviceAccount": null, "watchNamespace": "" } }, { "apiVersion": "keda.sh/v1alpha1", "kind": "ScaledJob", "metadata": { "name": "scaledjob-sample" }, "spec": { "failedJobsHistoryLimit": 5, "jobTargetRef": { "activeDeadlineSeconds": 600, "backoffLimit": 6, "completions": 1, "parallelism": 1, "template": null }, "maxReplicaCount": 100, "pollingInterval": 30, "successfulJobsHistoryLimit": 5, "triggers": [ { "metadata": { "property": "example-property" }, "type": "example-trigger" } ] } }, { "apiVersion": "keda.sh/v1alpha1", "kind": "ScaledObject", "metadata": { "name": "example-scaledobject" }, "spec": { "cooldownPeriod": 300, "maxReplicaCount": 100, "minReplicaCount": 0, "pollingInterval": 30, "scaleTargetRef": { "name": "example-deployment" }, "triggers": [ { "metadata": { "property": "example-property" }, "type": "example-trigger" } ] } }, { "apiVersion": "keda.sh/v1alpha1", "kind": "TriggerAuthentication", "metadata": { "name": "example-triggerauthentication" }, "spec": { "secretTargetRef": [ { "key": "example-role-key", "name": "example-secret-name", "parameter": "example-secret-parameter" } ] } } ] capabilities: Seamless Upgrades categories: Cloud Provider certified: "false" console.openshift.io/operator-monitoring-default: "true" containerImage: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9-operator@sha256:497ad1ab554c71d85d5b800e4568082caf3639b5370b6cf730f9dd7965f38f04 createdAt: 02 Sep 2026, 15:34 description: Custom Metrics Autoscaler Operator, an event-driven autoscaler based upon KEDA features.operators.openshift.io/cnf: "false" features.operators.openshift.io/cni: "false" features.operators.openshift.io/csi: "false" features.operators.openshift.io/disconnected: "true" features.operators.openshift.io/fips-compliant: "true" features.operators.openshift.io/proxy-aware: "false" features.operators.openshift.io/tls-profiles: "false" features.operators.openshift.io/token-auth-aws: "false" features.operators.openshift.io/token-auth-azure: "false" features.operators.openshift.io/token-auth-gcp: "false" olm.operatorGroup: openshift-keda olm.operatorNamespace: openshift-keda olm.skipRange: '>=2.7.1 <2.19.0-3' olm.targetNamespaces: openshift-keda operatorframework.io/cluster-monitoring: "true" operatorframework.io/properties: '{"properties":[{"type":"olm.gvk","value":{"group":"eventing.keda.sh","kind":"CloudEventSource","version":"v1alpha1"}},{"type":"olm.gvk","value":{"group":"eventing.keda.sh","kind":"ClusterCloudEventSource","version":"v1alpha1"}},{"type":"olm.gvk","value":{"group":"http.keda.sh","kind":"HTTPScaledObject","version":"v1alpha1"}},{"type":"olm.gvk","value":{"group":"http.keda.sh","kind":"InterceptorRoute","version":"v1beta1"}},{"type":"olm.gvk","value":{"group":"keda.sh","kind":"ClusterTriggerAuthentication","version":"v1alpha1"}},{"type":"olm.gvk","value":{"group":"keda.sh","kind":"KedaController","version":"v1alpha1"}},{"type":"olm.gvk","value":{"group":"keda.sh","kind":"ScaledJob","version":"v1alpha1"}},{"type":"olm.gvk","value":{"group":"keda.sh","kind":"ScaledObject","version":"v1alpha1"}},{"type":"olm.gvk","value":{"group":"keda.sh","kind":"TriggerAuthentication","version":"v1alpha1"}},{"type":"olm.package","value":{"packageName":"openshift-custom-metrics-autoscaler-operator","version":"2.19.0-3"}}]}' operatorframework.io/suggested-namespace: openshift-keda operators.openshift.io/valid-subscription: '["OpenShift Kubernetes Engine", "OpenShift Container Platform", "OpenShift Platform Plus"]' operators.operatorframework.io/builder: operator-sdk-v1.38.0 operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 repository: https://github.com/openshift/custom-metrics-autoscaler-operator support: Red Hat creationTimestamp: "2026-09-17T16:02:12Z" finalizers: - operators.coreos.com/csv-cleanup generation: 1 labels: olm.managed: "true" operatorframework.io/arch.amd64: supported operatorframework.io/arch.arm64: supported operatorframework.io/arch.ppc64le: supported operatorframework.io/arch.s390x: supported operatorframework.io/os.linux: supported operators.coreos.com/openshift-custom-metrics-autoscaler-operator.openshift-keda: "" managedFields: - apiVersion: operators.coreos.com/v1alpha1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: .: {} f:alm-examples: {} f:capabilities: {} f:categories: {} f:certified: {} f:console.openshift.io/operator-monitoring-default: {} f:containerImage: {} f:createdAt: {} f:description: {} f:features.operators.openshift.io/cnf: {} f:features.operators.openshift.io/cni: {} f:features.operators.openshift.io/csi: {} f:features.operators.openshift.io/disconnected: {} f:features.operators.openshift.io/fips-compliant: {} f:features.operators.openshift.io/proxy-aware: {} f:features.operators.openshift.io/tls-profiles: {} f:features.operators.openshift.io/token-auth-aws: {} f:features.operators.openshift.io/token-auth-azure: {} f:features.operators.openshift.io/token-auth-gcp: {} f:olm.skipRange: {} f:operatorframework.io/cluster-monitoring: {} f:operatorframework.io/properties: {} f:operatorframework.io/suggested-namespace: {} f:operators.openshift.io/valid-subscription: {} f:operators.operatorframework.io/builder: {} f:operators.operatorframework.io/project_layout: {} f:repository: {} f:support: {} f:labels: .: {} f:olm.managed: {} f:operatorframework.io/arch.amd64: {} f:operatorframework.io/arch.arm64: {} f:operatorframework.io/arch.ppc64le: {} f:operatorframework.io/arch.s390x: {} f:operatorframework.io/os.linux: {} f:spec: .: {} f:apiservicedefinitions: {} f:cleanup: .: {} f:enabled: {} f:customresourcedefinitions: .: {} f:owned: {} f:description: {} f:displayName: {} f:icon: {} f:install: .: {} f:spec: .: {} f:clusterPermissions: {} f:deployments: {} f:strategy: {} f:installModes: {} f:keywords: {} f:labels: .: {} f:alm-owner-keda: {} f:operated-by: {} f:links: {} f:maintainers: {} f:maturity: {} f:minKubeVersion: {} f:provider: .: {} f:name: {} f:relatedImages: {} f:replaces: {} f:selector: {} f:version: {} manager: catalog operation: Update time: "2026-09-17T16:02:12Z" - apiVersion: operators.coreos.com/v1alpha1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: f:olm.operatorGroup: {} f:olm.operatorNamespace: {} f:olm.targetNamespaces: {} f:finalizers: .: {} v:"operators.coreos.com/csv-cleanup": {} f:labels: f:operators.coreos.com/openshift-custom-metrics-autoscaler-operator.openshift-keda: {} manager: olm operation: Update time: "2026-09-17T16:02:12Z" - apiVersion: operators.coreos.com/v1alpha1 fieldsType: FieldsV1 fieldsV1: f:status: .: {} f:cleanup: {} f:conditions: {} f:lastTransitionTime: {} f:lastUpdateTime: {} f:message: {} f:phase: {} f:reason: {} f:requirementStatus: {} manager: olm operation: Update subresource: status time: "2026-09-17T16:02:38Z" name: custom-metrics-autoscaler.v2.19.0-3 namespace: openshift-keda resourceVersion: "12508" uid: 75d8b1d4-ba9c-4494-a462-4cd4df2eedc4 spec: apiservicedefinitions: {} cleanup: enabled: false customresourcedefinitions: owned: - kind: CloudEventSource name: cloudeventsources.eventing.keda.sh version: v1alpha1 - kind: ClusterCloudEventSource name: clustercloudeventsources.eventing.keda.sh version: v1alpha1 - description: Describes cluster wide authentication parameters displayName: ClusterTriggerAuthentication kind: ClusterTriggerAuthentication name: clustertriggerauthentications.keda.sh resources: - kind: Secret name: "" version: v1 specDescriptors: - description: Env displayName: Env path: env x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Pod Identity displayName: Pod Identity path: podIdentity x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Secret Target Ref displayName: Secret Target Ref path: secretTargetRef x-descriptors: - urn:alm:descriptor:io.kubernetes:Secret version: v1alpha1 - kind: HTTPScaledObject name: httpscaledobjects.http.keda.sh version: v1alpha1 - kind: InterceptorRoute name: interceptorroutes.http.keda.sh version: v1beta1 - description: | Represents an installation of a particular version of KEDA Controller. displayName: KedaController kind: KedaController name: kedacontrollers.keda.sh resources: - kind: Deployment name: "" version: v1 - kind: Service name: "" version: v1 - kind: ReplicaSet name: "" version: v1 - kind: Pod name: "" version: v1 - kind: Secret name: "" version: v1 - kind: ConfigMap name: "" version: v1 specDescriptors: - description: 'Log Level for KEDA Operator, allowed values: ''debug'', ''info'', ''error'', or an integer value greater than 0, specified as string' displayName: Log Level path: operator.logLevel x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Log format for KEDA Operator, allowed values are 'json' and 'console' displayName: Log Format path: operator.logEncoder x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: 'Log Level for KEDA Metrics Server, allowed values: "0" for info, "4" for debug, or an integer value greater than 0, specified as string' displayName: Log Level Metrics path: metricsServer.logLevel x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: 'Log Level for KEDA Admission Webhooks, allowed values: ''debug'', ''info'', ''error'', or an integer value greater than 0, specified as string' displayName: Log Level path: admissionWebhooks.logLevel x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Log format for KEDA Admission Webhooks, allowed values are 'json' and 'console' displayName: Log Format path: admissionWebhooks.logEncoder x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Namespace that should the created KEDA controller watch, blank means all namespaces displayName: Watch Namespace path: watchNamespace x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text statusDescriptors: - description: Phase displayName: Phase path: phase x-descriptors: - urn:alm:descriptor:io.kubernetes.phase - description: Reason displayName: Reason path: reason x-descriptors: - urn:alm:descriptor:io.kubernetes.phase:reason - description: Version displayName: Version path: version x-descriptors: - urn:alm:descriptor:text version: v1alpha1 - description: Defines how KEDA should scale your jobs and what the triggers displayName: ScaledJob kind: ScaledJob name: scaledjobs.keda.sh resources: - kind: Job name: "" version: v1 - kind: Pod name: "" version: v1 - kind: Secret name: "" version: v1 - kind: ConfigMap name: "" version: v1 specDescriptors: - description: Job Target Ref displayName: Job Target Ref path: jobTargetRef x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Polling Interval displayName: Polling Interval path: pollingInterval x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: How many completed jobs should be kept displayName: Successful Jobs History Limit path: successfulJobsHistoryLimit x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: How many failed jobs should be kept displayName: Failed Jobs History Limit path: failedJobsHistoryLimit x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: Max Replica Count displayName: Max Replica Count path: maxReplicaCount x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: Rollout Strategy displayName: Rollout Strategy path: rolloutStrategy x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Scaling Strategy displayName: Scaling Strategy path: scalingStrategy x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text statusDescriptors: - description: Last Active Time displayName: Last Active Time path: lastActiveTime x-descriptors: - urn:alm:descriptor:text - description: Conditions displayName: Conditions path: conditions x-descriptors: - urn:alm:descriptor:io.kubernetes.conditions version: v1alpha1 - description: Defines how KEDA should scale your application and what the triggers are displayName: ScaledObject kind: ScaledObject name: scaledobjects.keda.sh resources: - kind: Deployment name: "" version: v1 - kind: Service name: "" version: v1 - kind: ReplicaSet name: "" version: v1 - kind: Pod name: "" version: v1 - kind: Secret name: "" version: v1 - kind: ConfigMap name: "" version: v1 specDescriptors: - description: Cooldown Period displayName: Cooldown Period path: cooldownPeriod x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: Max Replica Count displayName: Max Replica Count path: maxReplicaCount x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: Min Replica Count displayName: Min Replica Count path: minReplicaCount x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: Idle Replica Count displayName: Idle Replica Count path: idleReplicaCount x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: Polling Interval displayName: Polling Interval path: pollingInterval x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: Scale Target Ref displayName: Scale Target Ref path: scaleTargetRef x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Fallback Failure Threshold displayName: Fallback Failure Threshold path: fallback.failureThreshold x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: Fallback Replicas displayName: Fallback Replicas path: fallback.replicas x-descriptors: - urn:alm:descriptor:com.tectonic.ui:number - description: Triggers displayName: Triggers path: triggers x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text statusDescriptors: - description: ScaleTarget Kind displayName: ScaleTarget Kind path: scaleTargetKind x-descriptors: - urn:alm:descriptor:text - description: External Metric Names displayName: External Metric Names path: externalMetricNames x-descriptors: - urn:alm:descriptor:text - description: Resource Metric Names displayName: Resource Metric Names path: resourceMetricNames x-descriptors: - urn:alm:descriptor:text - description: Last Active Time displayName: Last Active Time path: lastActiveTime x-descriptors: - urn:alm:descriptor:text - description: Original Replica Count displayName: Original Replica Count path: originalReplicaCount x-descriptors: - urn:alm:descriptor:text - description: Paused Replica Count displayName: Paused Replica Count path: pausedReplicaCount x-descriptors: - urn:alm:descriptor:text - description: Conditions displayName: Conditions path: conditions x-descriptors: - urn:alm:descriptor:io.kubernetes.conditions - description: Health Status - Number of Failures displayName: Number of Failures path: health.numberOfFailures x-descriptors: - urn:alm:descriptor:text - description: Health Status displayName: Health Status path: health.status x-descriptors: - urn:alm:descriptor:text version: v1alpha1 - description: Describes authentication parameters displayName: TriggerAuthentication kind: TriggerAuthentication name: triggerauthentications.keda.sh resources: - kind: Secret name: "" version: v1 specDescriptors: - description: Env displayName: Env path: env x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Pod Identity displayName: Pod Identity path: podIdentity x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - description: Secret Target Ref displayName: Secret Target Ref path: secretTargetRef x-descriptors: - urn:alm:descriptor:io.kubernetes:Secret version: v1alpha1 description: | ## About the managed application Custom Metrics Autoscaler for OpenShift is an event driven autoscaler based upon KEDA. Custom Metrics Autoscaler can monitor event sources like Kafka, RabbitMQ, or cloud event sources and feed the metrics from those sources into the Kubernetes horizontal pod autoscaler. With Custom Metrics Autoscaler, you can have event driven and serverless scale of deployments within any Kubernetes cluster. ## About this Operator The Custom Metrics Autoscaler Operator deploys and manages installation of KEDA Controller in the cluster. Install this operator and follow installation instructions on how to install Custom Metrics Autoscaler in your cluster. ## Prerequisites for enabling this Operator ## How to install Custom Metrics Autoscaler in the cluster The installation of Custom Metrics Autoscaler is triggered by the creation of `KedaController` resource. Please refer to the [KedaController Spec](https://github.com/openshift/custom-metrics-autoscaler-operator/blob/main/README.md#the-kedacontroller-custom-resource) for more details on available options. Only a resource named `keda` in the namespace where the operator is installed will trigger the installation, reconfiguration or removal of the KEDA Controller resource. There should be only one KEDA Controller in the cluster. The operator will behave in this manner whether it is installed with the `AllNamespaces` or `OwnNamespace` install mode. While the operator more closely matches the `OwnNamespace` semantics, `AllNamespaces` is a supported installation mode to allow it to be installed to namespaces with existing `OperatorGroups` which require that installation mode, such as `openshift-operators`. displayName: Custom Metrics Autoscaler icon: - base64data: PHN2ZyBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzOCAzOCIgdmlld0JveD0iMCAwIDM4IDM4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im0yNy43IDEuNmgtMTcuNGMtNC44IDAtOC43IDMuOS04LjcgOC43djE3LjRjMCA0LjggMy45IDguNyA4LjcgOC43aDE3LjRjNC44IDAgOC43LTMuOSA4LjctOC43di0xNy40YzAtNC44LTMuOS04LjctOC43LTguN3oiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJtMjggMi4yYzQuMyAwIDcuOCAzLjUgNy44IDcuOHYxOGMwIDQuMy0zLjUgNy44LTcuOCA3LjhoLTE4Yy00LjMgMC03LjgtMy41LTcuOC03Ljh2LTE4YzAtNC4zIDMuNS03LjggNy44LTcuOHptMC0xLjJoLTE4Yy01IDAtOSA0LTkgOXYxOGMwIDUgNCA5IDkgOWgxOGM1IDAgOS00IDktOXYtMThjMC01LTQtOS05LTl6Ii8+PHBhdGggZD0ibTI4IDI0LjFjLS4yIDAtLjQtLjEtLjUtLjMtLjItLjMtLjEtLjcuMi0uOWwuNi0uM3YtLjZjMC0uMy4zLS42LjYtLjZzLjYuMy42LjZ2MWMwIC4yLS4xLjQtLjMuNWwtLjkuNWMtLjEuMS0uMi4xLS4zLjF6Ii8+PHBhdGggZD0ibTI4LjkgMjAuMmMtLjMgMC0uNi0uMy0uNi0uNnYtMS4yYzAtLjMuMy0uNi42LS42cy42LjMuNi42djEuMmMwIC4zLS4zLjYtLjYuNnoiLz48cGF0aCBkPSJtMjguOSAxNi42Yy0uMyAwLS42LS4zLS42LS42di0uNmwtLjYtLjRjLS4zLS4yLS40LS42LS4yLS45cy42LS40LjktLjJsLjkuNWMuMi4xLjMuMy4zLjV2MWMtLjEuNC0uNC43LS43Ljd6Ii8+PHBhdGggZD0ibTI1LjkgMTMuOWMtLjEgMC0uMiAwLS4zLS4xbC0xLS42Yy0uMy0uMi0uNC0uNi0uMi0uOXMuNi0uNC45LS4ybDEgLjZjLjMuMi40LjYuMi45LS4yLjItLjQuMy0uNi4zeiIvPjxwYXRoIGQ9Im0yMi44IDEyLjFjLS4xIDAtLjIgMC0uMy0uMWwtLjYtLjMtLjUuM2MtLjMuMi0uNy4xLS45LS4ycy0uMS0uNy4yLS45bC45LS41Yy4yLS4xLjQtLjEuNiAwbC45LjVjLjMuMi40LjYuMi45LS4xLjItLjMuMy0uNS4zeiIvPjxwYXRoIGQ9Im0yMS45IDI3LjZjLS4xIDAtLjIgMC0uMy0uMWwtLjgtLjVjLS4zLS4yLS40LS42LS4yLS45cy42LS40LjktLjJsLjYuMy42LS4zYy4zLS4yLjctLjEuOS4ycy4xLjctLjIuOWwtLjkuNWMtLjQuMS0uNS4xLS42LjF6Ii8+PHBhdGggZD0ibTI0LjkgMjUuOWMtLjIgMC0uNC0uMS0uNS0uMy0uMi0uMy0uMS0uNy4yLS45bDEtLjZjLjMtLjIuNy0uMS45LjJzLjEuNy0uMi45bC0xIC42Yy0uMi4xLS4zLjEtLjQuMXoiLz48cGF0aCBkPSJtMjMgMjN2LThsLTYuOS00LTcgNHY4bDcgNHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJtMTYuMSAyNy42Yy0uMSAwLS4yIDAtLjMtLjFsLTYuOS00Yy0uMi0uMS0uMy0uMy0uMy0uNXYtOGMwLS4yLjEtLjQuMy0uNWw2LjktNGMuMi0uMS40LS4xLjYgMGw2LjkgNGMuMi4xLjMuMy4zLjV2OGMwIC4yLS4xLjQtLjMuNWwtNi45IDRjLS4xLjEtLjIuMS0uMy4xem0tNi4zLTUgNi4zIDMuNiA2LjMtMy42di03LjNsLTYuMy0zLjYtNi4zIDMuNnoiLz48cGF0aCBkPSJtMTguNiAxNy45Yy0uMS0uMi0uMy0uMy0uNS0uM2gtMXYtMy4xYzAtLjMtLjItLjUtLjUtLjZzLS42LjEtLjcuNGwtMi4zIDUuM2MtLjEuMi0uMS40IDAgLjZzLjMuMy41LjNoMXYzLjFjMCAuMy4yLjUuNS42aC4xYy4yIDAgLjUtLjEuNi0uNGwyLjMtNS4yYy4xLS4zLjEtLjUgMC0uN3oiIGZpbGw9IiNlMDAiLz48L3N2Zz4= mediatype: image/svg+xml install: spec: clusterPermissions: - rules: - apiGroups: - "" resources: - configmaps - endpoints - events - namespaces - persistentvolumeclaims - pods - secrets - serviceaccounts - services - services/finalizers verbs: - '*' - apiGroups: - admissionregistration.k8s.io resources: - validatingwebhookconfigurations verbs: - create - delete - get - list - patch - update - watch - apiGroups: - apiregistration.k8s.io resources: - apiservices verbs: - create - delete - get - list - patch - update - watch - apiGroups: - apps resources: - daemonsets - deployments - replicasets - statefulsets verbs: - '*' - apiGroups: - apps resourceNames: - custom-metrics-autoscaler-operator resources: - deployments/finalizers verbs: - '*' - apiGroups: - config.openshift.io resources: - apiservers verbs: - get - list - watch - apiGroups: - coordination.k8s.io resources: - leases verbs: - '*' - apiGroups: - keda.sh resources: - kedacontrollers - kedacontrollers/finalizers - kedacontrollers/status verbs: - '*' - apiGroups: - keda.sh resources: - scaledobjects verbs: - create - delete - get - list - patch - update - watch - apiGroups: - monitoring.coreos.com resources: - podmonitors - servicemonitors verbs: - create - delete - get - list - patch - update - watch - apiGroups: - networking.k8s.io resources: - networkpolicies verbs: - create - delete - get - list - patch - update - watch - apiGroups: - policy resources: - poddisruptionbudgets verbs: - create - delete - get - list - patch - update - watch - apiGroups: - rbac.authorization.k8s.io resources: - clusterrolebindings - clusterroles - rolebindings - roles verbs: - '*' - apiGroups: - route.openshift.io resources: - routes verbs: - '*' serviceAccountName: custom-metrics-autoscaler-operator deployments: - label: app.kubernetes.io/part-of: custom-metrics-autoscaler-operator app.kubernetes.io/version: main name: custom-metrics-autoscaler-operator spec: replicas: 1 selector: matchLabels: app.kubernetes.io/part-of: custom-metrics-autoscaler-operator name: custom-metrics-autoscaler-operator strategy: {} template: metadata: labels: app.kubernetes.io/part-of: custom-metrics-autoscaler-operator app.kubernetes.io/version: main name: custom-metrics-autoscaler-operator spec: containers: - args: - -c - export KEDA_OPERATOR_IMAGE=$RELATED_IMAGE_1; export KEDA_METRICS_SERVER_IMAGE=$RELATED_IMAGE_2; export KEDA_ADMISSION_WEBHOOKS_IMAGE=$RELATED_IMAGE_3; export KEDA_HTTP_ADDON_INTERCEPTOR_IMAGE=$RELATED_IMAGE_4; export KEDA_HTTP_ADDON_OPERATOR_IMAGE=$RELATED_IMAGE_5; export KEDA_HTTP_ADDON_SCALER_IMAGE=$RELATED_IMAGE_6; exec /manager "$0" "$@" - --leader-elect - --zap-log-level=info - --zap-encoder=console - --zap-time-encoding=rfc3339 command: - /usr/bin/bash env: - name: WATCH_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.annotations['olm.targetNamespaces'] - name: RELATED_IMAGE_1 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9@sha256:8b101baa84f8151fd149a6a9e9799a1ce0fa04b60b6fed488995f4b7d56b87df - name: RELATED_IMAGE_2 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-adapter-rhel9@sha256:8945aff76b5aba2dd84c07afc5a5a30d06460f8e009a87380810296553aa856d - name: RELATED_IMAGE_3 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-admission-webhooks-rhel9@sha256:0d438461ca71dc6d37ba96c00367b5fb8d26ff3e75de2b61799605494dbe4036 - name: RELATED_IMAGE_4 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-interceptor-rhel9@sha256:8f4a593c028e0a8e8d6ed41163c631411ea3e43146eae53a51452036ca0925f1 - name: RELATED_IMAGE_5 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-operator-rhel9@sha256:60531d2d64a4f4e5920dc650711200424acd1d28c96091d4bfe6a73a55fce43b - name: RELATED_IMAGE_6 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-scaler-rhel9@sha256:0f776c14092c1965b071b6ed9ae3e9ebcb6a09d674d1bd46c647a4b49575b024 image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9-operator@sha256:497ad1ab554c71d85d5b800e4568082caf3639b5370b6cf730f9dd7965f38f04 imagePullPolicy: Always livenessProbe: httpGet: path: /healthz port: 8081 initialDelaySeconds: 25 name: custom-metrics-autoscaler-operator ports: - containerPort: 8080 name: http protocol: TCP readinessProbe: httpGet: path: /readyz port: 8081 initialDelaySeconds: 20 resources: limits: cpu: 500m memory: 1000Mi requests: cpu: 100m memory: 100Mi securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL readOnlyRootFilesystem: true volumeMounts: - mountPath: /certs name: certificates readOnly: true securityContext: runAsNonRoot: true serviceAccountName: custom-metrics-autoscaler-operator volumes: - name: certificates secret: optional: true secretName: kedaorg-certs strategy: deployment installModes: - supported: true type: OwnNamespace - supported: false type: SingleNamespace - supported: false type: MultiNamespace - supported: true type: AllNamespaces keywords: - keda - scaling - event labels: alm-owner-keda: keda operated-by: keda links: - name: Custom Metrics Autoscaler Documentation url: https://docs.openshift.com/container-platform/latest/nodes/cma/nodes-cma-autoscaling-custom.html maintainers: - email: support@redhat.com name: Red Hat maturity: stable minKubeVersion: 1.23.0 provider: name: Red Hat relatedImages: - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9@sha256:8b101baa84f8151fd149a6a9e9799a1ce0fa04b60b6fed488995f4b7d56b87df name: keda-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-adapter-rhel9@sha256:8945aff76b5aba2dd84c07afc5a5a30d06460f8e009a87380810296553aa856d name: keda-adapter - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-admission-webhooks-rhel9@sha256:0d438461ca71dc6d37ba96c00367b5fb8d26ff3e75de2b61799605494dbe4036 name: keda-webhooks - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9-operator@sha256:497ad1ab554c71d85d5b800e4568082caf3639b5370b6cf730f9dd7965f38f04 name: cma-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-interceptor-rhel9@sha256:8f4a593c028e0a8e8d6ed41163c631411ea3e43146eae53a51452036ca0925f1 name: http-addon-interceptor - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-operator-rhel9@sha256:60531d2d64a4f4e5920dc650711200424acd1d28c96091d4bfe6a73a55fce43b name: http-addon-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-scaler-rhel9@sha256:0f776c14092c1965b071b6ed9ae3e9ebcb6a09d674d1bd46c647a4b49575b024 name: http-addon-scaler replaces: custom-metrics-autoscaler.v2.19.0-2 selector: {} version: 2.19.0-3 status: cleanup: {} conditions: - lastTransitionTime: "2026-09-17T16:02:12Z" lastUpdateTime: "2026-09-17T16:02:12Z" message: requirements not yet checked phase: Pending reason: RequirementsUnknown - lastTransitionTime: "2026-09-17T16:02:12Z" lastUpdateTime: "2026-09-17T16:02:12Z" message: one or more requirements couldn't be found phase: Pending reason: RequirementsNotMet - lastTransitionTime: "2026-09-17T16:02:13Z" lastUpdateTime: "2026-09-17T16:02:13Z" message: all requirements found, attempting install phase: InstallReady reason: AllRequirementsMet - lastTransitionTime: "2026-09-17T16:02:13Z" lastUpdateTime: "2026-09-17T16:02:13Z" message: waiting for install components to report healthy phase: Installing reason: InstallSucceeded - lastTransitionTime: "2026-09-17T16:02:13Z" lastUpdateTime: "2026-09-17T16:02:13Z" message: 'installing: waiting for deployment custom-metrics-autoscaler-operator to become ready: deployment "custom-metrics-autoscaler-operator" not available: Deployment does not have minimum availability.' phase: Installing reason: InstallWaiting - lastTransitionTime: "2026-09-17T16:02:38Z" lastUpdateTime: "2026-09-17T16:02:38Z" message: install strategy completed with no errors phase: Succeeded reason: InstallSucceeded lastTransitionTime: "2026-09-17T16:02:38Z" lastUpdateTime: "2026-09-17T16:02:38Z" message: install strategy completed with no errors phase: Succeeded reason: InstallSucceeded requirementStatus: - group: operators.coreos.com kind: ClusterServiceVersion message: CSV minKubeVersion (1.23.0) less than server version (v1.34.9) name: custom-metrics-autoscaler.v2.19.0-3 status: Present version: v1alpha1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: cloudeventsources.eventing.keda.sh status: Present uuid: 33d9d083-3e1c-4d99-baef-05629371abb4 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: clustercloudeventsources.eventing.keda.sh status: Present uuid: 72e1ba66-0a6c-4b0f-8242-824fa5aa7d63 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: clustertriggerauthentications.keda.sh status: Present uuid: 3afd4740-e6ee-42b3-89cf-24dac37eb638 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: httpscaledobjects.http.keda.sh status: Present uuid: 229e3a8c-4257-4e15-bb35-663ef814ce01 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: interceptorroutes.http.keda.sh status: Present uuid: 65ceb3d8-c8a7-4c62-9e17-1094b4eddaf7 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: kedacontrollers.keda.sh status: Present uuid: 5ca042fa-4e58-4ba7-ae02-a8a88c49d3bf version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: scaledjobs.keda.sh status: Present uuid: 2e226b4e-7599-4c36-a3a8-d11f2382c2c6 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: scaledobjects.keda.sh status: Present uuid: 6789d121-6861-4ca2-9bb2-8e3ccbb14ee4 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: triggerauthentications.keda.sh status: Present uuid: 072d92f0-4ef9-454c-bf8f-7f3713957019 version: v1 - dependents: - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["*"],"apiGroups":[""],"resources":["configmaps","endpoints","events","namespaces","persistentvolumeclaims","pods","secrets","serviceaccounts","services","services/finalizers"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["admissionregistration.k8s.io"],"resources":["validatingwebhookconfigurations"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["apiregistration.k8s.io"],"resources":["apiservices"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["*"],"apiGroups":["apps"],"resources":["daemonsets","deployments","replicasets","statefulsets"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["*"],"apiGroups":["apps"],"resources":["deployments/finalizers"],"resourceNames":["custom-metrics-autoscaler-operator"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["get","list","watch"],"apiGroups":["config.openshift.io"],"resources":["apiservers"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["*"],"apiGroups":["coordination.k8s.io"],"resources":["leases"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["*"],"apiGroups":["keda.sh"],"resources":["kedacontrollers","kedacontrollers/finalizers","kedacontrollers/status"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["keda.sh"],"resources":["scaledobjects"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["monitoring.coreos.com"],"resources":["podmonitors","servicemonitors"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["networking.k8s.io"],"resources":["networkpolicies"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["create","delete","get","list","patch","update","watch"],"apiGroups":["policy"],"resources":["poddisruptionbudgets"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["*"],"apiGroups":["rbac.authorization.k8s.io"],"resources":["clusterrolebindings","clusterroles","rolebindings","roles"]} status: Satisfied version: v1 - group: rbac.authorization.k8s.io kind: PolicyRule message: cluster rule:{"verbs":["*"],"apiGroups":["route.openshift.io"],"resources":["routes"]} status: Satisfied version: v1 group: "" kind: ServiceAccount message: "" name: custom-metrics-autoscaler-operator status: Present version: v1