The Operator Go type accepts a context and passes a derived context to each of its controllers when it runs them. This is good for context cancellation, but the Operator exits immediately when its own context is cancelled. This makes it hard to wait for graceful shutdown of the controllers themselves, without side-channel communication added to each controller.
For Grafana employees, we've avoided using Operator as a workaround for this, using a Waitgroup to run each of our controllers. https://github.com/grafana/slo/pull/4205/changes#r2844638426