<p>I understand the difference between ReplicaSet and ReplicationController, of former being Set based and the latter Equality based. What I want to know is why was a newer implementation (Read ReplicaSet) introduced when the older ReplicationController achieves the same functionality.</p>

<p>I think this can be summed up to the 3 points below.</p>
<p>1 ) ReplicaSet is a replacement for the Replica controller and supports richer expressions for the label selector. You can choose between four 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>2 ) There is a small differnece in the syntax - ReplicaSet which contains <code>matchLabels</code> field under the selector:</p>
<pre><code>apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels: #&lt;-- This was added
      tier: nginx
</code></pre>
<p>3 ) When you see Replica Controller is mentioned in one the docs or other tutorials - refer to it as ReplicaSet AND consider using Deployment instead.</p>
