--- 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:208a25ec0e0845ed51246409e256e88442f5e952e6e9659eb728112bb490e557 createdAt: 24 Jun 2026, 02:28 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-2' 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-2"}}]}' 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-07-16T16:44:05Z" 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-07-16T16:44:05Z" - 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-07-16T16:44:06Z" - 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-07-16T16:44:33Z" name: custom-metrics-autoscaler.v2.19.0-2 namespace: openshift-keda resourceVersion: "11898" uid: 1bedaf0d-04b4-49ea-bd9b-db91f7d02ef2 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:805a53a296374ddb71141778ed3de4543bc4a2804f7fd6a40a3d988432a42bce - name: RELATED_IMAGE_2 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-adapter-rhel9@sha256:50a088cc39d09bb39a595ed2f409b468883d4d80882c89e88fc9894dc073dd3b - name: RELATED_IMAGE_3 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-admission-webhooks-rhel9@sha256:4a8ea54d26f046d1b5cb29b093ae07d23778f4212a52a387049e3194ea50b053 - name: RELATED_IMAGE_4 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-interceptor-rhel9@sha256:c2f9e7faf844ee306206178faf8cf8beb03222f54993bebba6cd9257edccdaf3 - name: RELATED_IMAGE_5 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-operator-rhel9@sha256:4d04b7a6516cdb2553e8badbd712adba8a2f9d72f16b5ae89bb6fa4cbf0c4517 - name: RELATED_IMAGE_6 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-scaler-rhel9@sha256:df4ab571ea88377c785c8d66fc981d80abd6c2df180d73f410400476431ab4b9 image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9-operator@sha256:208a25ec0e0845ed51246409e256e88442f5e952e6e9659eb728112bb490e557 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:805a53a296374ddb71141778ed3de4543bc4a2804f7fd6a40a3d988432a42bce name: keda-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-adapter-rhel9@sha256:50a088cc39d09bb39a595ed2f409b468883d4d80882c89e88fc9894dc073dd3b name: keda-adapter - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-admission-webhooks-rhel9@sha256:4a8ea54d26f046d1b5cb29b093ae07d23778f4212a52a387049e3194ea50b053 name: keda-webhooks - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9-operator@sha256:208a25ec0e0845ed51246409e256e88442f5e952e6e9659eb728112bb490e557 name: cma-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-interceptor-rhel9@sha256:c2f9e7faf844ee306206178faf8cf8beb03222f54993bebba6cd9257edccdaf3 name: http-addon-interceptor - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-operator-rhel9@sha256:4d04b7a6516cdb2553e8badbd712adba8a2f9d72f16b5ae89bb6fa4cbf0c4517 name: http-addon-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-scaler-rhel9@sha256:df4ab571ea88377c785c8d66fc981d80abd6c2df180d73f410400476431ab4b9 name: http-addon-scaler replaces: custom-metrics-autoscaler.v2.19.0-1 selector: {} version: 2.19.0-2 status: cleanup: {} conditions: - lastTransitionTime: "2026-07-16T16:44:05Z" lastUpdateTime: "2026-07-16T16:44:05Z" message: requirements not yet checked phase: Pending reason: RequirementsUnknown - lastTransitionTime: "2026-07-16T16:44:05Z" lastUpdateTime: "2026-07-16T16:44:05Z" message: one or more requirements couldn't be found phase: Pending reason: RequirementsNotMet - lastTransitionTime: "2026-07-16T16:44:07Z" lastUpdateTime: "2026-07-16T16:44:07Z" message: all requirements found, attempting install phase: InstallReady reason: AllRequirementsMet - lastTransitionTime: "2026-07-16T16:44:08Z" lastUpdateTime: "2026-07-16T16:44:08Z" message: waiting for install components to report healthy phase: Installing reason: InstallSucceeded - lastTransitionTime: "2026-07-16T16:44:08Z" lastUpdateTime: "2026-07-16T16:44:08Z" message: 'installing: waiting for deployment custom-metrics-autoscaler-operator to become ready: waiting for spec update of deployment "custom-metrics-autoscaler-operator" to be observed...' phase: Installing reason: InstallWaiting - lastTransitionTime: "2026-07-16T16:44:33Z" lastUpdateTime: "2026-07-16T16:44:33Z" message: install strategy completed with no errors phase: Succeeded reason: InstallSucceeded lastTransitionTime: "2026-07-16T16:44:33Z" lastUpdateTime: "2026-07-16T16:44:33Z" 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-2 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: 09ba7237-9ea1-4366-9222-41e4b808be77 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: 25de493e-826a-4814-aff9-0c0bf1451974 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: clustertriggerauthentications.keda.sh status: Present uuid: ca2ffc5c-23b4-4459-b672-eccec63f0a28 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: c72d267a-0009-47e2-bb1c-3658db5b9b54 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: 0e749731-501a-4e55-85eb-5dd482aba4bc version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: kedacontrollers.keda.sh status: Present uuid: cbcc6cf5-4415-4d70-a097-8af191bf2763 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: scaledjobs.keda.sh status: Present uuid: 44a55658-4f99-464e-a59c-8913e8a8b2bb version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: scaledobjects.keda.sh status: Present uuid: 593119a3-c321-467f-8510-8624621bd5e4 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: triggerauthentications.keda.sh status: Present uuid: a20d857b-118a-4517-a522-02b2fa520787 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