Master components run only on masters. In our case, they are kube-apiserver, kube-controller-manager, kube-scheduler, etcd, and dns-controller.
Kubernetes API Server (kube-apiserver): Kubernetes API Server accepts requests to create, update, or remove Kubernetes resources. It listens on ports 8080 and 443. The former is insecure and is only reachable from the same server. Through it, the other components can register themselves without requiring a token. The later port (443) is used for all external communications with the API Server. That communication can be user-facing like, for example, when we send a kubectl command. Kubelet also uses 443 port to reach the API server and register itself as a node.
No matter who initiates communication with the API Server, its purpose is to validate and configure an API object. Among others, those can be Pods, Services, ReplicaSets, and others. Its usage is not limited to user-facing interactions. All the components in the cluster interact with the API Server for the operations that require a cluster-wide shared state.
The shared state of the cluster is stored in etcd. It is a key/value store where all cluster data is kept, and it is highly available through consistent data replication. It is split into two Pods, where etcd-server holds the state of the cluster and etcd-server-events stores the events.
Kops creates an EBS volume for each etcd instance. It serves as its storage.
Kubernetes Controller Manager (kube-controller-manager): Kubernetes Controller Manager is in charge of running controllers. You already saw a few controllers in action like ReplicaSets and Deployments. Apart from object controllers like those, kube-controller-manager is also in charge of Node Controllers responsible for monitoring servers and responding when one becomes unavailable.
Kubernetes Scheduler (kube-scheduler): Kubernetes Scheduler watches the API Server for new Pods and assigns them to a node. From there on, those Pods are run by Kubelet on the allocated node.
DNS Controller (dns-controller): DNS Controller allows nodes and users to discover the API Server.