controller-runtime: Cache doesn't start if it's config refers to types that are not installed
controller-runtime v0.16.0 fails starting the manager when the operator is using cache.Options with kinds identified ByObject
that are not present on the specific cluster.
This could happen for instance trying to finetune upfront the cache also for monitoring kinds when the prometheous stack is not deployed or OKD/OCP specific kinds when on vanilla k8s.
Now the operator dies with something like:
failed to determine if *v1.ConsoleQuickStart is namespaced: failed to get restmapping: failed to find API group "console.openshift.io"","stacktrace":"github.com/kubevirt/hyperconverged-cluster-operator/cmd/cmdcommon.HcCmdHelper.ExitOnError
/go/src/github.com/kubevirt/hyperconverged-cluster-operator/cmd/cmdcommon/cmdcommon.go:97
main.main
/go/src/github.com/kubevirt/hyperconverged-cluster-operator/cmd/hyperconverged-cluster-operator/main.go:104
runtime.main
/usr/local/go/src/runtime/proc.go:250
the same code was working with controller-runtime <= v0.15.0.
This is probably got probably changed with: https://github.com/kubernetes-sigs/controller-runtime/pull/2421
The error comes from https://github.com/kubernetes-sigs/controller-runtime/blob/c20ea143a236a34fb331e6c04820b75aac444e7d/pkg/cache/cache.go#L399-L405
that is supposed to use isNamespaced
during cache initialization to ensure that byObject.Namespaces
is not set for cluster-scope kind.
A simple fix is just about skipping that additional check for non existing kinds instead of breaking the cache initialization and so the manager one.
About this issue
- Original URL
- State: open
- Created 10 months ago
- Comments: 22 (12 by maintainers)
So you have kinds in your cache config that you don’t watch, since you say the config worked in 0.15? That doesn’t seem correct