--- 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" }, "metricsServer": { "logLevel": "0" }, "operator": { "logEncoder": "console", "logLevel": "info" }, "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:d358d98c0cda5100147ad67a34b3ee19709cb0be33040eb89d17e57ee46b8542 createdAt: 02 Feb 2026, 23:48 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.18.1-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":"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.18.1-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.23.0 operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 repository: https://github.com/openshift/custom-metrics-autoscaler-operator support: Red Hat creationTimestamp: "2026-03-18T16:51:45Z" finalizers: - operators.coreos.com/csv-cleanup generation: 1 labels: olm.managed: "true" operatorframework.io/arch.amd64: supported operatorframework.io/arch.arm64: 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/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-03-18T16:51:45Z" - 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-03-18T16:51:46Z" - 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-03-18T16:52:12Z" name: custom-metrics-autoscaler.v2.18.1-2 namespace: openshift-keda resourceVersion: "10475" uid: edc92852-3f72-4b33-8d5f-16a67e221383 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 - 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: - coordination.k8s.io resources: - leases verbs: - '*' - apiGroups: - keda.sh resources: - kedacontrollers - kedacontrollers/finalizers - kedacontrollers/status verbs: - '*' - apiGroups: - monitoring.coreos.com resources: - podmonitors - servicemonitors 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: - '*' - list serviceAccountName: custom-metrics-autoscaler-operator deployments: - label: app.kubernetes.io/part-of: custom-metrics-autoscaler-operator 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: creationTimestamp: null labels: app.kubernetes.io/part-of: custom-metrics-autoscaler-operator 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; 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:de10b1c57fcb81289bf9e0093767f2ee93dd60f5680a71f8c87d941045d9d4ed - name: RELATED_IMAGE_2 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-adapter-rhel9@sha256:6a2c4a1a0ec29fc1756c3b03a572333711a665cc0152e02e97ced94af3adef0d - name: RELATED_IMAGE_3 value: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-admission-webhooks-rhel9@sha256:f91bb1511831f42c24ed54a08e6109f50c56961d1aa62a02766355cb2a77e7f6 image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9-operator@sha256:d358d98c0cda5100147ad67a34b3ee19709cb0be33040eb89d17e57ee46b8542 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:de10b1c57fcb81289bf9e0093767f2ee93dd60f5680a71f8c87d941045d9d4ed name: keda-operator - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-adapter-rhel9@sha256:6a2c4a1a0ec29fc1756c3b03a572333711a665cc0152e02e97ced94af3adef0d name: keda-adapter - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-admission-webhooks-rhel9@sha256:f91bb1511831f42c24ed54a08e6109f50c56961d1aa62a02766355cb2a77e7f6 name: keda-webhooks - image: registry.redhat.io/custom-metrics-autoscaler/custom-metrics-autoscaler-rhel9-operator@sha256:d358d98c0cda5100147ad67a34b3ee19709cb0be33040eb89d17e57ee46b8542 name: cma-operator replaces: custom-metrics-autoscaler.v2.18.1-1 selector: {} version: 2.18.1-2 status: cleanup: {} conditions: - lastTransitionTime: "2026-03-18T16:51:45Z" lastUpdateTime: "2026-03-18T16:51:45Z" message: requirements not yet checked phase: Pending reason: RequirementsUnknown - lastTransitionTime: "2026-03-18T16:51:45Z" lastUpdateTime: "2026-03-18T16:51:45Z" message: one or more requirements couldn't be found phase: Pending reason: RequirementsNotMet - lastTransitionTime: "2026-03-18T16:51:46Z" lastUpdateTime: "2026-03-18T16:51:46Z" message: all requirements found, attempting install phase: InstallReady reason: AllRequirementsMet - lastTransitionTime: "2026-03-18T16:51:46Z" lastUpdateTime: "2026-03-18T16:51:46Z" message: waiting for install components to report healthy phase: Installing reason: InstallSucceeded - lastTransitionTime: "2026-03-18T16:51:46Z" lastUpdateTime: "2026-03-18T16:51:46Z" 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-03-18T16:52:12Z" lastUpdateTime: "2026-03-18T16:52:12Z" message: install strategy completed with no errors phase: Succeeded reason: InstallSucceeded lastTransitionTime: "2026-03-18T16:52:12Z" lastUpdateTime: "2026-03-18T16:52:12Z" 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.33.8) name: custom-metrics-autoscaler.v2.18.1-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: e14c354f-4da5-4687-b83f-11507fa35039 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: 1ff7bac7-66a9-4a73-b447-99aa63d3920f version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: clustertriggerauthentications.keda.sh status: Present uuid: 41fbd87c-b3bf-4888-b4f1-0b8b136b2271 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: kedacontrollers.keda.sh status: Present uuid: 7acf5b5b-1a71-495c-824d-8549b36f3938 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: scaledjobs.keda.sh status: Present uuid: 83cebbf8-b351-447c-8921-e35a3a611b29 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: scaledobjects.keda.sh status: Present uuid: 84716714-68bb-49cd-ad56-16c2023f05f2 version: v1 - group: apiextensions.k8s.io kind: CustomResourceDefinition message: CRD is present and Established condition is true name: triggerauthentications.keda.sh status: Present uuid: 758c6587-dbb8-4604-88a7-35414e8699a3 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":["*"],"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":["monitoring.coreos.com"],"resources":["podmonitors","servicemonitors"]} 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":["*","list"],"apiGroups":["route.openshift.io"],"resources":["routes"]} status: Satisfied version: v1 group: "" kind: ServiceAccount message: "" name: custom-metrics-autoscaler-operator status: Present version: v1