Diagrams
Simplified flow of Kubernetes control plane and data plane(Ref here)
Learnings
Only Kube API-server interacts with etcd directly
No Kube infra component interact each other directly. All kube infra components (schedular, controller, Kubelet) interact with each-other via Kube API Server. So, Kube API Server acts as API Gateway
All kube infra component talk with each other via etcd
Every component in Kubernetes (the API server, the scheduler, the kubelet, the controller manager, whatever) is stateless. All of the state is stored in a key-value store called etcd[https://jvns.ca/blog/2017/06/04/learning-about-kubernetes/]
In HA setup, each kube cluster has its own etcd
Etcd is no-sql database
When a kubelet starts up, it registers itself as a node with the API server and starts watching for pods to run. [http://kamalmarhubi.com/blog/2015/09/06/kubernetes-from-the-ground-up-the-api-server/]
Kubelet reads about POD spec(with Nodename matching as its node) from etcd (via kube-apiserver) and creates it. [http://kamalmarhubi.com/blog/2015/09/06/kubernetes-from-the-ground-up-the-api-server/]
Sources: Meetup, personal experience
Reference
https://developer.ibm.com/opentech/2017/06/21/tour-kubernetes-source-code-part-one-kubectl-api-server/
https://jvns.ca/blog/2017/06/04/learning-about-kubernetes/
http://kamalmarhubi.com/blog/2015/08/27/what-even-is-a-kubelet/
http://kamalmarhubi.com/blog/2015/11/17/kubernetes-from-the-ground-up-the-scheduler/