4 min read | by Jordi Prats
With OpenShift we can use a nice UI to install and remove operators, but we can achieve exactly the same using manifests and kubectl (oc)
If we want to take a look at what operators we can install on our OpenShift cluster we can list the PackageManifest using kubectl get:
$ kubectl get packagemanifests -n openshift-marketplace NAME CATALOG AGE citrix-cpx-with-ingress-controller-operator-rhmp Red Hat Marketplace 10d rabbitmq-cluster-operator Community Operators 10d postgresql Community Operators 10d klusterlet-product Red Hat Operators 10d infrastructure-asset-orchestrator-certified Certified Operators 10d proactive-node-scaling-operator Community Operators 10d citrix-ingress-controller-operator-rhmp Red Hat Marketplace 10d rhpam-kogito-operator Red Hat Operators 10d (...)
By using kubectl describe on any of them we can even get even more details about it under the status key:
$ kubectl describe packagemanifests example-operator -n openshift-marketplace | less Name: example-operator Namespace: openshift-marketplace Labels: catalog=community-operators catalog-namespace=openshift-marketplace operatorframework.io/arch.amd64=supported operatorframework.io/os.linux=supported provider=External Secrets provider-url=https://example.io Annotations: <none> API Version: packages.operators.coreos.com/v1 Kind: PackageManifest Metadata: Creation Timestamp: 2022-10-12T07:53:36Z Spec: Status: Catalog Source: community-operators Catalog Source Display Name: Community Operators Catalog Source Namespace: openshift-marketplace Catalog Source Publisher: Red Hat Channels: Current CSV: example-operator.v0.1.0 Current CSV Desc: Annotations: (...)
Once we know which operator we want to install, we can create a Subscription object with it's details, such as:
A simple subscription would look like this (All namespaces mode, from the stable channel and with automatic updates)
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: example-operator namespace: openshift-operators spec: channel: stable installPlanApproval: Automatic name: example-operator source: community-operators sourceNamespace: openshift-marketplace
To deploy the operator we can apply it using kubectl:
$ kubectl apply -f example/manifests/subscription.yaml subscription.operators.coreos.com/example-operator configured
Once applied we'll be able to see a deployment get created in the openshift-operators namespace:
$ kubectl get deploy -n openshift-operators NAME READY UP-TO-DATE AVAILABLE AGE example-operator-controller-manager 1/1 1 1 46s gitops-operator-controller-manager 1/1 1 1 18h
If we want to install a specific version, we'll need to specify the exact version using startingCSV and set the installPlanApproval to Manual to prevent automatic upgrades to later versions:
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: example-operator namespace: openshift-operators spec: channel: stable installPlanApproval: Manual name: example-operator source: community-operators sourceNamespace: openshift-marketplace startingCSV: example-operator.v0.1.0
We can also add operator specific options under the spec.config key:
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription (...) spec: config: tolerations: - operator: "Exists"
To install the operator we just need to create the Subscription object, but to delete it we'll need to delete the ClusterServiceVersion as well.
We can start by deleting the Subscription:
$ kubectl delete -f example/manifests/subscription.yaml subscription.operators.coreos.com "example-operator" deleted
Then we'll need to figure out which is the csv that have been installed (unless it is specified in the Subscription object with startingCSV):
$ kubectl get csv NAME DISPLAY VERSION REPLACES PHASE aws-efs-csi-driver-operator.4.10.0-202209280142 AWS EFS CSI Driver Operator 4.10.0-202209280142 aws-efs-csi-driver-operator.4.10.0-202209070827 Succeeded example-operator.v0.1.0 Example Operator 0.1.0 example-operator.v0.0.9 Succeeded keda.v2.7.1 KEDA 2.7.1 keda.v2.6.1 Succeeded openshift-gitops-operator.v1.6.1 Red Hat OpenShift GitOps 1.6.1 openshift-gitops-operator.v1.6.0 Succeeded route-monitor-operator.v0.1.422-151be96 Route Monitor Operator 0.1.422-151be96 route-monitor-operator.v0.1.408-c2256a2 Succeeded
Once we know which ClusterServiceVersion corresponds with the operator we want to uninstall we can delete it using kubectl delete as usual:
$ kubectl delete csv example-operator.v0.1.0 clusterserviceversion.operators.coreos.com "example-operator.v0.1.0" deleted
Posted on 24/10/2022