It seems that the ContainerizedWorkload controller and the ManualScalerTrait controller were reconciling the same deployment in a tight loop. My guess is that each patch to the deployment was causing a new reconcile to occur, since reconciles are implicitly queued when an object changes.
I've stopped the ManualScalerTrait from watching Deployments as a quick fix. This means the ManualScalerTrait won't kick in to resize a deployment if some other entity changes its size (though it will eventually correct the problem next time the global reconcile kicks in).
It seems that the ContainerizedWorkload controller and the ManualScalerTrait controller were reconciling the same deployment in a tight loop. My guess is that each patch to the deployment was causing a new reconcile to occur, since reconciles are implicitly queued when an object changes.
I've stopped the ManualScalerTrait from watching Deployments as a quick fix. This means the ManualScalerTrait won't kick in to resize a deployment if some other entity changes its size (though it will eventually correct the problem next time the global reconcile kicks in).