I've not gone into the level of detail you want but here's what I know:
All OSE state is kept in etcd. Other components read it from there and react to changes there. Most components (all?) won't call each other directly, they'll either poll or listen to events from etcd. That's why sometimes things take some time to happens inside an OSE instance, like a building taking a few moments to start after oc new-app: oc new-app creates resources in etcd, them the controllers have to "notice" the change and start the dance with schedulers and nodes.
Of course, someone has to check the "real" status of pods and nodes, the master polls the nodes regularly to get this info and update etcd. And the API server allows creating / changing resource states in etcd.
The kubelet is there so the master can tell it things like "create a new pod" or "update your proxy rules", and also reply to the poll requests for current node and pod status.
I don't know if the API server actually calls the kubelet or if it just lets some controller to this.
s, Fernando Lozano