Yeah, looking into writing a scheduler was basically where we stepped back and said “if we write this ourselves, why not the rest, too”. As I see it, the biggest gains that we were able to get were by making things happen in parallel that would by default happen in sequence, and optimizing for the happy path instead of optimizing for reducing failure. In Kubernetes it's reasonable to have to wait for a dozen things to serially go through RAFT consensus in etcd before the pod runs, but we don't want that.
(I made up the dozen number, but my point is that that design would be perfectly acceptable given Kubernetes' design constraints)
(I made up the dozen number, but my point is that that design would be perfectly acceptable given Kubernetes' design constraints)