Kubernetes has many components, and each term and role is easy to be confused. Last time I studied openstack, I leaned it’s easiest if I can humanize the component.
Roles and services required to run kubernetes is documented in official document. Below is the rough sketch what these services are doing in each node.
Master components can be deployed all in one host, or they can be scattered among several hosts as long it can be inter-connected. As shown in the above picture, etcd is the most crucial part of this deployment in terms of cluster consistency. So in other words, other components can be duplicated as long it can connect to the central data repository(etcd is actually a mere key-value store).
In my Kubernetes study, I literally follow this image. So I will deploy each component one by one as a system daemon. The main reason is it’s the easiest way to learn how each component is deployed without the need to worry about container inter-network.
On the other hand, Kubernetes seems to recommend these master components to be deployed in Kubelet, so the image of the master node would be something like this.