Kubernetes for Serverless Applications
上QQ阅读APP看书,第一时间看更新

Components

There are two main server roles with Kubernetes: masters and nodes; each of these roles is made up of several components.

Master servers are the brains of the cluster and they make decisions on where pods (more on those in the next section) are deployed within the cluster, as well as acting on and looking at the health of not only the cluster, but also the pods themselves.

The core components of a master server are:

  • kube-apiserver: This is the frontend to your Kubernetes control panel; no matter what you use to manage your cluster it will be talking directly to this API service.
  • etcd: etcd is a distributed key-value store that Kubernetes uses to store the state of your cluster.
  • kube-controller-manager: This service does behind-the-scenes work to maintain your cluster. It looks for nodes joining and leaving the cluster, ensuring that the correct number of pods are running, and that they are healthy and so on.
  • cloud-controller-manager: This service is new to Kubernetes. It works alongside kube-controller-manager and its purpose is to interact with the APIs of cloud providers such as AWS, Google Cloud, and Microsoft Azure. An example of the tasks it performs would be that, if a node was to be removed from the cluster, it would check your cloud services API to see if the node still exists. If it does then there could be a problem; if not, then more than likely the node has been removed because of a scaling event.
  • kube-scheduler: This chooses where pods should be launched based on a series of rules, utilization, and availability.

Next up we have nodes. Once deployed, the master interacts with components which are installed on the nodes to effect change within the cluster; these are where your pods run.

The components that go to make up the nodes are:

  • kubelet: This is the main component that runs on the node. It is responsible for accepting instructions from and reporting back to the master servers.
  • kube-proxy: This service helps the cluster communicate. It acts as a basic proxy for all network traffic on the nodes, and is capable of configuring TCP/UDP forwarding or acting as a TCP/UDP round-robin load balancer to a number of backends.
  • docker or rkt: These are the actual container engines on the nodes. The kubelet service interacts with these to launch and manage the containers running on each of your cluster nodes. Throughout the following chapters, we will look at launching nodes running both.
  • supervisord: This process manager and monitor maintains the availability of other services such as kubelet, docker, and rkt on the nodes.
  • fluentd: This service helps with cluster-level logging.

You may have noticed that the only mention of containers in these services was docker and rkt. Kubernetes does not actually directly interact with your containers; instead, it communicates with a pod.