This is the primary management component in Kubernetes.
When you run a kubectl command, this is what talks to the `kube-api` server.
The kube-api server firstly authenticates the request and then validates it.
It then retries the data from the etcd cluster and then responds back with the requested information (showing the output of kubectl get nodes for example)
Can also implement the APIs directly by sending a post request.
The kubeapi-server creates a pod object, without assigning it to a node.
It then updates the information in the etcd cluster.
It then updates the user that the pod has been created.
The Scheduler continuously monitors the kubeapi-server
The Scheduler identifies the right node to place the pod on.
It indicates this back to the kubeapi-server
The kubeapi-server then updates the information in the etcd cluster.
The information is then passed to the Kubelet, in the appropriate worker node.
The kubelet then creates the pod on the node and instructs the container runtime to deploy the application image.
Once done, the kubelet updates the status back to the API server.
The kubeapi-server then updates the data back into the etcd cluster.
A similar pattern is followed as soon as a change is requested. The kubeapi-server is the heart of all of the tasks and changes in the cluster.
The above is not required, if you bootstrapped using the kubeadm tool.
You can download and configure the kube-api server to run on your Master Node.
The kube-api server is ran with a lot of parameters.
Not need to understand all of the options right now.
Having a high level understanding is good, when you configure the cluster from scratch.
All components in a Kubernetes cluster need to know where they are.
A lot of the components in the above config file are certificates, which are needed for the connectivity between different components.
These are part of the SSL / TLS certificates.
The option etcd-servers is where you specify the location of the etcd server.
This is how the kube-api server connects to the etcd servers.
How to view the kube-api options in an existing cluster?
An example is kubectl get pods -n kube-system
If you set up the cluster with the kubeadm tool, the kubeadm tool deploys the kube-api server as a pod like so:
You can see the api-server options in the /etc/kubernetes/manifests/kube-apiserver.yaml file.
In a non kubeadm setup, you can inspect the options in the systemdkubeapi service file.
You can also see the running process and the implemented options, by running ps -aux | grep kube-apiserver. Run this on the Master Node.