Curious why using controller for these aspects versus generating the K8s objects as part of your deployment pipeline that you just apply? The latter gives you versioned artifacts you can roll forward and back and independent deployment of these supporting pieces with each app.
Is there runtime dynamism that you need the control loop to handle beyond what the built-in primitives can handle?
Is there runtime dynamism that you need the control loop to handle beyond what the built-in primitives can handle?