Kubernetes Fundamentals
Kubernetes has six main components that need to be running to get a functioning cluster:
1. The API Server
2. The Scheduler
3. The controller manager
4. The kubelet
5. The proxy (alias kube proxy)
6. An etcd cluster
Each of these components can run as a standard Linux processes on your nodes, or they can run as Docker containers themselves.

Image retrieved from @wattsteve Kubernetes training slide.
Components of Kubernetes cluster
Master Node: As seen from the above architectural diagram, the master node runs the API server, the scheduler, and the controller manager. The master node can also be configured in a multi-master highly available setup. The scheduler and controller elect a leader and the API servers can be fronted by a load balancer.
API Server: The API server exposes a REST interface to all of the Kubernetes resources and it is highly configurable.
Scheduler: The Scheduler main responsibility is to place the containers on the node in the cluster according to various policies, metrics, and resource requirements. It is also configurable via the command line flags.
Controller: The controller manager is responsible for reconciling the actual state of the the cluster with the desired state, as specified via the API. In effect, it is a control loop that performs actions based on the observed state of the cluster and the desired state. The main controller is also configurable.
Worker Nodes
All the worker nodes run the *kubelet* and *kube proxy*, as well as the Docker engine.
kubelet: The *kubelet* interacts with the underlying **Docker** engine also installed on all the nodes and makes sure that the containers that need to run are actually running.
kube-proxy: The kube-proxy is in charge of managing the network connectivity to the containers.
As an alternative to running a Docker Engine, you can also run Kubernetes with rkt, For more information on how to do this, you may refer to the documentaion: https://kubernetes.io/docs/getting-started-guides/rkt/