I know what a replication controller is responsible for and what it is not. I exactly know the purpose and how to use them. But I can't find an answer to this question. What is a replication controller? Is it a pod? Is it a process? I think it is not a pod because when I list the pods, replication controllers are not listed. You say "kubectl get rc" to list replication controllers. So is it a process? If it is a process where is it created and where does it run? On master node? If it is a single process, isn't it also a single point of failure?
Edit: As I said, I know what it is, what it is not. And I exactly know how to use it. Please don't try to explain what ReplicationController and ReplicaSet do.
Edit2:
Here is the conclusion from our discussion with Suresh Vishnoi over the chat.
"kube-controller-manager" pod which runs inside "kube-system" namespace is the process that manages all the controller loops.
A ReplicationController is a type of controller loop along with others like NamespaceController, EndpointController, ServiceAccountController etc.
From offical kubernetes docs: In applications of robotics and automation, a control loop is a non-terminating loop that regulates the state of the system. In Kubernetes, a controller is a control loop that watches the shared state of the cluster through the apiserver and makes changes attempting to move the current state towards the desired state. Examples of controllers that ship with Kubernetes today are the replication controller, endpoints controller, namespace controller, and serviceaccounts controller.(ref)
"kube-controller-manager" pod runs inside "kube-system" namespace on "master" nodes. A ReplicationController, ReplicasetController etc. (control loops) is a "goroutine" in this "kube-controller-manager" pod. They are not individual processes. This can also be verified if you rsh into "kube-controller-manager" pod (
oc rsh <POD_NAME>) and dops -ef. There you will see a single process.See this piece of code: https://github.com/kubernetes/kubernetes/blob/master/cmd/kube-controller-manager/app/apps.go#L69
Go Routines vs Threads: http://tleyden.github.io/blog/2014/10/30/goroutines-vs-threads/
Kudos to Suresh Vishnoi, Cheers
kube-controller-manager is the process you are looking for. It has the reconciling loops which works toward getting the shared state of cluster and then make changes to bring the current status of the server to the desired state. The key controllers are replication controller, endpoint controller, namespace controller, and service account controller.
If it is a process where is it created and where does it run? On master node?
Its in the kube-system namespace
If it is a single process, isn't it also a single point of failure?
it provide following flags in order to achieve High availability
-leader-elect Default: true
Start a leader election client and gain leadership before executing the main loop. Enable this when running replicated components for high availability.
--leader-elect-lease-duration duration Default: 15s
The duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate. This is only applicable if leader election is enabled.
--leader-elect-renew-deadline duration Default: 10s
The interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. This is only applicable if leader election is enabled.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With