I've encountered a cluster which has multiple PackageManifest
resources of the same name in the same namespace. There seem to be two CatalogSource
s and there is some overlap in the components they define.
$ kubectl get packagemanifest -n olm | grep rho | sort
rhoas-operator Community Operators 20d
rhods-operator Red Hat OpenShift Data Science 16h
rhods-operator Red Hat Operators 20d
rhods-prometheus-operator Red Hat OpenShift Data Science 16h
rhods-prometheus-operator Red Hat Operators 20d
Querying by kind, name, and namespace seems to give one of the two at random.
$ kubectl get packagemanifest/rhods-operator -n olm
NAME CATALOG AGE
rhods-operator Red Hat OpenShift Data Science 16h
$ kubectl get packagemanifest/rhods-operator -n olm
NAME CATALOG AGE
rhods-operator Red Hat Operators 20d
What I am observing completely breaks my long-held belief, supported by documentation, that
Each object in your cluster has a Name that is unique for that type of resource. Every Kubernetes object also has a UID that is unique across your whole cluster.
For example, you can only have one Pod named myapp-1234 within the same namespace, but you can have one Pod and one Deployment that are each named myapp-1234.
~~ https://kubernetes.io/docs/concepts/overview/working-with-objects/names/
Is what I am happening a misconfiguration? Why does Kubernetes allow it? Is OLM doing something nefarious?
Investigating kind and apiVersion
$ kubectl get packagemanifest --namespace=olm --output=jsonpath="{range .items[*]}{.kind}{'\t'}{.apiVersion}{'\t'}{.metadata.name}{'\n'}{end}" | grep rho | sort
PackageManifest packages.operators.coreos.com/v1 rhoas-operator
PackageManifest packages.operators.coreos.com/v1 rhods-operator
PackageManifest packages.operators.coreos.com/v1 rhods-operator
PackageManifest packages.operators.coreos.com/v1 rhods-prometheus-operator
PackageManifest packages.operators.coreos.com/v1 rhods-prometheus-operator