<p>I am trying to do some research on replicaSet for my learning purpose. I was able to create a replicaSet successfully with matchLabels. To test the matchExpression selector, I created a pod first then a new replica set to test if the replica set will be able to check the labels from the running pods. But this failed with error. Here is what I did so far.</p>

<ol>
<li>Created a pod first with a specific label. Pod runs successfully.</li>
<li>Create a replicaSet with matchExpressions matching the value with the label specified in the pod.</li>
</ol>

<p>After the second step I get error. Below are the YAML files and the error.
Can you help me understand the issue here ? </p>

<p>Here is the pod-definition.yaml</p>

<pre><code>apiVersion: v1
kind: Pod
metadata:
  name: nginx-app
  labels:
    tier: frontend1

spec:
  containers:
  - name: nginx-c
    image: nginx
</code></pre>

<p>Here is the replicaset-definition.yaml</p>

<pre><code>apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-2
spec:
  replicas: 2
  selector:
    matchExpressions:
      - {key: tier, operator: In, values: [frontend1]}
  template:
    metadata:
      labels:
        tier: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
</code></pre>

<p>Error while creating replica set:</p>

<blockquote>
  <p>master $ kubectl create -f /root/replicaset-definition.yaml</p>
  
  <p>The ReplicaSet "replicaset-2" is invalid:
  spec.template.metadata.labels: Invalid value:
  map[string]string{"tier":"nginx"}: <code>selector</code> does not match template
  <code>labels</code></p>
</blockquote>

<p>Can you try with the following by changing the label in template section.</p>

<pre><code>apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-2
spec:
  replicas: 2
  selector:
    matchExpressions:
      - {key: tier, operator: In, values: [frontend1]}
  template:
    metadata:
      labels:
        tier: frontend1
    spec:
      containers:
      - name: nginx
        image: nginx
</code></pre>
