$ cat netobserv-operator-olmv1-manifest.yaml --- apiVersion: v1 kind: Namespace metadata: name: openshift-netobserv-operator --- apiVersion: v1 kind: ServiceAccount metadata: name: netobserv-operator-installer namespace: openshift-netobserv-operator --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: netobserv-operator-installer-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: netobserv-operator-installer namespace: openshift-netobserv-operator --- apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: netobserv-operator spec: namespace: openshift-netobserv-operator serviceAccount: name: netobserv-operator-installer source: sourceType: Catalog catalog: packageName: netobserv-operator $ oc get clusterextension/netobserv-operator NAME INSTALLED BUNDLE VERSION INSTALLED PROGRESSING AGE netobserv-operator network-observability-operator.v1.10.0 1.10.0 True True 21m $ oc apply -f netobserv-operator-olmv1-manifest.yaml namespace/netobserv-operator-system created serviceaccount/netobserv-operator-installer created clusterrolebinding.rbac.authorization.k8s.io/netobserv-operator-installer-binding created clusterextension.olm.operatorframework.io/netobserv-operator created $ oc get all -n netobserv-operator-system Warning: apps.openshift.io/v1 DeploymentConfig is deprecated in v4.14+, unavailable in v4.10000+ NAME READY STATUS RESTARTS AGE pod/netobserv-controller-manager-584955d568-ptq7g 1/1 Running 0 112s pod/netobserv-plugin-static-69c66d65dd-tgq82 1/1 Running 0 102s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/netobserv-controller-manager-service ClusterIP 172.30.118.168 443/TCP 112s service/netobserv-metrics-service ClusterIP 172.30.193.111 8443/TCP 112s service/netobserv-plugin-static ClusterIP 172.30.113.120 9001/TCP 102s service/netobserv-webhook-service ClusterIP 172.30.82.203 443/TCP 112s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/netobserv-controller-manager 1/1 1 1 112s deployment.apps/netobserv-plugin-static 1/1 1 1 102s NAME DESIRED CURRENT READY AGE replicaset.apps/netobserv-controller-manager-584955d568 1 1 1 112s replicaset.apps/netobserv-plugin-static-69c66d65dd 1 1 1 102s $ oc apply -f /tmp/flowcollector.yaml flowcollector.flows.netobserv.io/cluster created $ oc get pods -n netobserv NAME READY STATUS RESTARTS AGE flowlogs-pipeline-4bh69 1/1 Running 0 36s flowlogs-pipeline-dlscw 1/1 Running 0 35s flowlogs-pipeline-k66f7 1/1 Running 0 34s flowlogs-pipeline-k6prw 1/1 Running 0 41s flowlogs-pipeline-mvk4v 1/1 Running 0 35s flowlogs-pipeline-qh2n2 1/1 Running 0 40s netobserv-plugin-67f678fdbf-mwk4x 1/1 Running 0 42s $ oc get pods -n netobserv-privileged NAME READY STATUS RESTARTS AGE netobserv-ebpf-agent-9v7pr 1/1 Running 0 50s netobserv-ebpf-agent-gncxz 1/1 Running 0 50s netobserv-ebpf-agent-k6s5q 1/1 Running 0 50s netobserv-ebpf-agent-nwfbp 1/1 Running 0 50s netobserv-ebpf-agent-qxfwd 1/1 Running 0 50s netobserv-ebpf-agent-x7sdk 1/1 Running 0 50s Upgrade failed from 1.9.3 to 1.10.0 with below conditions in clusterextensions: - lastTransitionTime: "2025-11-03T21:09:34Z" message: |- error for resolved bundle "network-observability-operator.v1.10.0" with version "1.10.0": validating upgrade for CRD "flowcollectors.flows.netobserv.io": v1beta2: ^.spec.processor.metrics.disableAlerts[*]: enum: allowed enum values removed : ["NetObservLokiError" "NetObservNoFlows"] v1beta2: ^.spec.networkPolicy: default: default added when there was none previously : "{\"enable\":true}" validating upgrade for CRD "flowmetrics.flows.netobserv.io": v1alpha1: ^.spec.remap[*]: unhandled: unhandled changes found (Pattern "" -> "^[a-zA-Z_][a-zA-Z0-9_]*$") v1alpha1: ^.spec.remap: unhandled: unhandled changes found (Pattern "" -> "^[a-zA-Z_][a-zA-Z0-9_]*$") v1alpha1: ^.spec.metricName: unhandled: unhandled changes found (Pattern "" -> "^[a-zA-Z_][a-zA-Z0-9:_]*$|^$") observedGeneration: 2 Reference: https://developers.redhat.com/articles/2025/06/02/manage-operators-clusterextensions-olm-v1#3__upgrade_a_clusterextension For the above upgrade error, have ClusterExtension config as below: --- apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: netobserv-operator spec: namespace: openshift-netobserv-operator serviceAccount: name: netobserv-operator-installer install: preflight: crdUpgradeSafety: enforcement: None source: sourceType: Catalog catalog: packageName: netobserv-operator version: "1.10.0" Verified with above config upgrade path from 1.9.3 to 1.10.0 succeeded. ---- To deploy Operator from QE catalog: 1. Create ClusterCatalogResource: apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: labels: olm.operatorframework.io/metadata.name: netobserv-konflux-fbc name: netobserv-konflux-fbc spec: availabilityMode: Available priority: 0 source: image: pollIntervalMinutes: 10 ref: quay.io/redhat-user-workloads/ocp-network-observab-tenant/catalog-ystream:latest type: Image Ensure Serving is True for new catalog: $ oc get clustercatalog NAME LASTUNPACKED SERVING AGE netobserv-konflux-fbc 8m42s True 8m53s openshift-certified-operators 178m True 179m openshift-community-operators 179m True 179m openshift-redhat-marketplace 179m True 179m openshift-redhat-operators 178m True 179m 2. Create ClusterExtension as: --- apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: netobserv-operator spec: namespace: openshift-netobserv-operator serviceAccount: name: netobserv-operator-installer install: preflight: crdUpgradeSafety: enforcement: None source: sourceType: Catalog catalog: packageName: netobserv-operator version: "1.11.0" selector: matchLabels: olm.operatorframework.io/metadata.name: netobserv-konflux-fbc $ oc get clusterextension NAME INSTALLED BUNDLE VERSION INSTALLED PROGRESSING AGE netobserv-operator network-observability-operator.v1.11.0 1.11.0 True True 2m16s Notes: 1. Can't find an Installed Operators list and no form view for NetObserv CRD. In general lacking integration with OCP Web console as of 4.21 2. ClusterExtension needs to updated for versions to trigger an upgrade or select a catalog source. 3. ClusterCatalog replaces CatalogSource in OLM v1 which needs to be created for custom catalog.