kubectl отправляет манифест в API server; тот прогоняет его через authn/authz и admission-контроллеры и сохраняет desired state в etcd. Дальше всё асинхронно: контроллеры замечают расхождение и создают дочерние объекты, scheduler подбирает ноду, kubelet на ней запускает контейнеры. apply возвращается сразу после записи в etcd — а не когда под реально заработал.