When I saw the headline I was pretty excited, but looking at your examples, I'm really curious about why you decided to make everything work via CRDs? Also having to write code inside those CRD for the cleanup logic seems like a pretty steep learning curve and honestly I'd be pretty scared to end up writing something that would delete my entire cluster. Any reason why you chose this approach over something like a CLI…
You would need to do that only if you have your own proprietary CRDs or some use case that is not already covered.