<p>I'm trying to understand basic Kubernetes concepts but its documentation a bit confusing, as for me.</p>

<p>For example, the <code>Replication Controller</code> is mentioned in the <a href="https://kubernetes.io/docs/concepts/overview/components/?origin_team=T08E6NNJJ#kube-controller-manager" rel="nofollow noreferrer">kube-controller-manager</a>.</p>

<p>At the same time, <a href="https://kubernetes.io/docs/concepts/?origin_team=T08E6NNJJ#kubernetes-objects" rel="nofollow noreferrer">Kubernetes Concepts</a> page says about <code>ReplicaSet</code> object.</p>

<p>And only after some googling I found <a href="https://towardsdatascience.com/key-kubernetes-concepts-62939f4bc08e" rel="nofollow noreferrer">this post</a> on Medium:</p>

<blockquote>
  <p>Replication Controllers perform the same function as ReplicaSets, but Replication Controllers are old school. ReplicaSets are the smart way to manage replicated Pods in 2019.</p>
</blockquote>

<p>And this is not mentioned anywhere in the official docs.</p>

<p>Can somebody please explain to me about <strong><em>Endpoints</em></strong> and <strong><em>Namespace Controllers</em></strong>?</p>

<p>Are they still "valid" Controllers - or they are also outdated/replaced by some other controller/s?</p>

<h3>Replica Controller Vs Replica Set</h3>
<p>The functionality of both Replica Controller and Replica Set are quite the same - they are responsible to make sure that <strong>X</strong> number of pods with label that is equal to there label selector will be scheduled to different nodes on the cluster.<br>
(Where <strong>X</strong> is the value that is specified in the <code>spec.replicas</code> field in the Replica Controller / Replica Set yaml).</p>
<p>ReplicaSet is a replacement for the Replica controller and supports richer expressions for the label selector.
You can choose between 4 values of operators <code>In, NotIn, Exists, DoesNotExist</code> - see <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#set-based-requirement" rel="nofollow noreferrer">Set-based requirement</a>.</p>
<p><strong>A rule of thumb:</strong>  When you see Replica Controller is mentioned in one the docs or other tutorials  - refer to it as ReplicaSet AND consider using <a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/" rel="nofollow noreferrer">Deployment</a> instead.</p>
<hr />
<h3>Regarding Endpoints and Namespace Controllers</h3>
<p>The K8S control plane contains multiple controllers - each controller watches a desired state of the resource that it responsible for (Pods, Endpoints, Namespaces etc') via an infinite control loop - also called <a href="https://coreos.com/kubernetes/docs/latest/replication-controller.html#the-reconciliation-loop-in-detail" rel="nofollow noreferrer">Reconciliation Loop</a>.</p>
<p>When a change is made to the desired state (by external client like kubectl) the reconciliation loop detects this and attempts to mutate the existing state in order to match the desired state.</p>
<p>For example, if you increase the value of the <code>replicas</code> field from 3 to 4, the ReplicaSet controller would see that one new instance needs to be created and will make sure it is scheduled in one of the nodes on the cluster. This reconciliation process applies to any modified property of the pod template.</p>
<p>K8S supports the following controllers (at least those which I'm familiar with):</p>
<pre><code>1 )  ReplicaSet controller.

2 )  DaemonSet controller.

4 )  Job controller.

5 )  Deployment controller.

6 )  StatefulSet controller.

7 )  Service controller.

8 )  Node controller.

9 )  Endpoints controller.  # &lt;---- Yes - its a valid controller.

10 ) Namespace controller.  # &lt;---- Yes - its a valid controller.

11 ) Serviceaccounts controller.

12 ) PersistentVolume controller.

13 ) More?
</code></pre>
<p>All resides in the control plane under a parent unit which is called the 'Controller Manager'.</p>
<hr />
<h3>Additional point</h3>
<p>There is also a small difference in the syntax between Replica Controller:</p>
<pre><code>apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
</code></pre>
<p>And the ReplicaSet which contains <code>matchLabels</code> field under the <code>selector</code>:</p>
<pre><code>apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels: #&lt;-- This was added
      tier: nginx
</code></pre>
