<p>I'm new to kubernetes and I'm trying to understand how labels work on a node. We have eks server version 1.14 running in our organization. I'm trying to change built-in deprecated labels.</p>

<p>In aws-node daemonset, I want to replace beta.kubernetes.io/os to kubernetes.io/os and beta.kubernetes.io/arch to kubernetes.io/arch.</p>

<p>Since it both beta.kubernetes.io/arch and kubernetes.io/arch labels when i describe a node. </p>

<ul>
<li>Is it safe to go ahead remove the beta.kubernetes.io/arch and
beta.kubernetes.io/os labels?  </li>
<li>I want to understand if I change the label, what are its effects?</li>
<li>Does Pods running on that node are affected? </li>
<li>Can apiVersion: apps/v1 change built-in labels?</li>
<li>Can I just run <code>kubectl label node "node-name" beta.kubernetes.io/arch=amd64 -</code> to remove the labels?</li>
<li><p>Is there a need to apply the daemonset ?</p>

<pre><code>kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: aws-node
  namespace: kube-system
  labels:
    k8s-app: aws-node
spec:
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      k8s-app: aws-node
  template:
    metadata:
      labels:
        k8s-app: aws-node
    spec:
      priorityClassName: system-node-critical
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: "beta.kubernetes.io/os"
                    operator: In
                    values:
                      - linux
                  - key: "beta.kubernetes.io/arch"
                    operator: In
                    values:
                      - amd64
</code></pre>

<p>kubectl describe node/ip-10-xx-xx-xx.ec2.internal -n kube-system</p></li>
</ul>

<pre><code>    Labels:             beta.kubernetes.io/arch=amd64
                        beta.kubernetes.io/instance-type=c4.xlarge
                        beta.kubernetes.io/os=linux
                        failure-domain.beta.kubernetes.io/region=us-east-1
                        failure-domain.beta.kubernetes.io/zone=us-east-1a
                        group=nodes
                        kubernetes.io/arch=amd64
                        kubernetes.io/hostname=ip-10-182-32-156.ec2.internal
                        kubernetes.io/os=linux

</code></pre>

<p>From the <a href="https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#kubernetesioarch" rel="nofollow noreferrer">documentation</a> we can read that <code>beta.kubernetes.io/arch</code> and <code>beta.kubernetes.io/os</code> are deprecated since version 1.14 (<a href="https://v1-16.docs.kubernetes.io/docs/setup/release/notes/#deprecations-and-removals" rel="nofollow noreferrer">removed on version 1.18</a>) and <code>kubernetes.io</code> should be used instead. </p>

<p>You are using version 1.14 and there is no reason for you to change/remove these labels. Changing them would add one more layer of complication to your cluster when you want to add a node for example (you have to always keep in mind that you have non-stock labels in your nodes).</p>

<blockquote>
  <ul>
  <li>Is it safe to go ahead remove the beta.kubernetes.io/arch and beta.kubernetes.io/os labels?</li>
  </ul>
</blockquote>

<p>It's safe but unnecessary unless you have applications running on mixed clusters and you are using these labels.</p>

<blockquote>
  <ul>
  <li>I want to understand if I change the label, what are its effects?</li>
  </ul>
</blockquote>

<p>From the <a href="https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#betakubernetesioarch-deprecated" rel="nofollow noreferrer">documentation</a> we can read: </p>

<p>kubernetes.io/arch: This can be handy if you are mixing arm and x86 nodes.</p>

<p>kubernetes.io/os: This can be handy if you are mixing operating systems in your cluster (for example: mixing Linux and Windows nodes).</p>

<p>So these labels are there for your convenience, you can use them to keep track of things. </p>

<blockquote>
  <ul>
  <li>Does Pods running on that node are affected?</li>
  </ul>
</blockquote>

<p>No, pods are still going to be normally scheduled .</p>

<blockquote>
  <ul>
  <li>Can I just run  <code>kubectl label node "node-name" beta.kubernetes.io/arch=amd64 -</code>  to remove the labels?</li>
  </ul>
</blockquote>

<p>To remove the label you can run: </p>

<pre><code>kubectl label node "node-name" beta.kubernetes.io/arch-
</code></pre>

<p>To remove from all nodes:</p>

<pre><code>kubectl label nodes --all beta.kubernetes.io/arch-
</code></pre>

<blockquote>
  <ul>
  <li>Is there a need to apply the daemonset ?</li>
  </ul>
</blockquote>

<p>I particularly don't see a need for that.  </p>
