--- 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:a1efdb16262eda55b2342287c4d6b701241e6b774145edc51a4c3d7881a94e22 createdAt: 30 May 2026, 01:20 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-1' 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-1"}}]}' 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-08T07:00:36Z" 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-08T07:00:36Z" - 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-08T07:00:37Z" - 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-08T07:01:03Z" name: custom-metrics-autoscaler.v2.19.0-1 namespace: openshift-keda resourceVersion: "12271" uid: b0346886-d8af-4b47-9b93-88b955423557 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 app.kubernetes.io/version: main 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:6e590046811987fe71c5a6565b347a542ad27bf9b293e32693127c3429fda518 - name: RELATED_IMAGE_2 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-adapter-rhel9@sha256:e2029c2979dc5d18fd6c44af58cfc45de2be91c5f07e665bc78f2bcbbc698cd3 - name: RELATED_IMAGE_3 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-admission-webhooks-rhel9@sha256:3478781ab181851b0636051ce190c8000b70c0eb761aae8206e7d95d452c0e38 - name: RELATED_IMAGE_4 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-interceptor-rhel9@sha256:b06dbd018f53660f0872046dfe9d7f6f21f417236db9f8f111b1ba679fedcf61 - name: RELATED_IMAGE_5 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-operator-rhel9@sha256:05eb40660a84c4990f4d21e3437f9b31a2cfc387f3d76e0d0b734b8c9101f671 - name: RELATED_IMAGE_6 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-scaler-rhel9@sha256:9d128b8b5fb9379a87774d89a473795044f1ce67714aaea113eab9bbabcb7791 image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9-operator@sha256:a1efdb16262eda55b2342287c4d6b701241e6b774145edc51a4c3d7881a94e22 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:6e590046811987fe71c5a6565b347a542ad27bf9b293e32693127c3429fda518 name: keda-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-adapter-rhel9@sha256:e2029c2979dc5d18fd6c44af58cfc45de2be91c5f07e665bc78f2bcbbc698cd3 name: keda-adapter - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-admission-webhooks-rhel9@sha256:3478781ab181851b0636051ce190c8000b70c0eb761aae8206e7d95d452c0e38 name: keda-webhooks - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9-operator@sha256:a1efdb16262eda55b2342287c4d6b701241e6b774145edc51a4c3d7881a94e22 name: cma-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-interceptor-rhel9@sha256:b06dbd018f53660f0872046dfe9d7f6f21f417236db9f8f111b1ba679fedcf61 name: http-addon-interceptor - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-operator-rhel9@sha256:05eb40660a84c4990f4d21e3437f9b31a2cfc387f3d76e0d0b734b8c9101f671 name: http-addon-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-http-add-on-scaler-rhel9@sha256:9d128b8b5fb9379a87774d89a473795044f1ce67714aaea113eab9bbabcb7791 name: http-addon-scaler replaces: custom-metrics-autoscaler.v2.18.1-2 selector: {} version: 2.19.0-1 status: cleanup: {} conditions: - lastTransitionTime: "2026-07-08T07:00:37Z" lastUpdateTime: "2026-07-08T07:00:37Z" message: requirements not yet checked phase: Pending reason: RequirementsUnknown - lastTransitionTime: "2026-07-08T07:00:37Z" lastUpdateTime: "2026-07-08T07:00:37Z" message: one or more requirements couldn't be found phase: Pending reason: RequirementsNotMet - lastTransitionTime: "2026-07-08T07:00:38Z" lastUpdateTime: "2026-07-08T07:00:38Z" message: all requirements found, attempting install phase: InstallReady reason: AllRequirementsMet - lastTransitionTime: "2026-07-08T07:00:38Z" lastUpdateTime: "2026-07-08T07:00:38Z" message: waiting for install components to report healthy phase: Installing reason: InstallSucceeded - lastTransitionTime: "2026-07-08T07:00:38Z" lastUpdateTime: "2026-07-08T07:00:38Z" 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-07-08T07:01:03Z" lastUpdateTime: "2026-07-08T07:01:03Z" message: install strategy completed with no errors phase: Succeeded reason: InstallSucceeded lastTransitionTime: "2026-07-08T07:01:03Z" lastUpdateTime: "2026-07-08T07:01:03Z" 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.8) name: custom-metrics-autoscaler.v2.19.0-1 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: 99608424-678d-43f6-af71-f768283a95fe 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: 784f93a7-d734-407c-83ca-eadcee3eccb2 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: clustertriggerauthentications.keda.sh status: Present uuid: c3e7053c-ab87-4326-aa13-931a8ea4e9b1 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: 91c9d8a6-c097-4db7-afad-05022a5f8c39 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: 19aafd21-408b-4fe7-b571-859b363f034c version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: kedacontrollers.keda.sh status: Present uuid: 5de4723a-f5da-4735-8fc2-9c36be6ec900 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: scaledjobs.keda.sh status: Present uuid: 1d22d276-aa55-4152-9953-19083d334732 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: scaledobjects.keda.sh status: Present uuid: 625cf0bc-8fb5-42f4-bb28-ac5db9f4f0b4 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: triggerauthentications.keda.sh status: Present uuid: bfbe5552-3129-4d50-ae35-1ec8b885e866 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