Repository: kubernetes
Issue: 'requiredDuringSchedulingIgnoredDuringExecution' evicts Daemonset when node label removed
Labels: kind/bug,sig/scheduling,needs-triage

### What happened?

The node affinity requires that the Daemonset be deployed on a node with a specified label. Affinity type is requiredDuringSchedulingIgnoredDuringExecution.
When Daemonset has been running for a while, remove the label.
Daemonset will be destroyed.

However, according to [the official doc,](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity-per-scheduling-profile) the Daemonset type is IgnoredDuringExecution, and the pod should not be destroyed after the tag is removed.
```
Note: 
In the preceding types, IgnoredDuringExecution means that if the node labels change after Kubernetes schedules the Pod, the Pod continues to run.
```

### What did you expect to happen?

After the label is removed, Daemonset should continue to run (consistent with the IgnoredDuringExecution described in the doc).

### How can we reproduce it (as minimally and precisely as possible)?

apply the following yaml and modify the image path. [full yaml link](https://gitee.com/OpenCloudOS/xuanwan/blob/master/os-update-operator/configs/deploy/operator/up-proxy.yaml)
```
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: up-proxy
  namespace: kube-system
  labels:
    control-plane: up-proxy
spec:
  selector:
    matchLabels:
      control-plane: up-proxy
  template:
    metadata:
      labels:
        control-plane: up-proxy
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: kubernetes.io/os
                    operator: In
                    values:
                      - linux
                  - key: xuanwan.opencloudos.org/updater-interface-version
                    operator: In
                    values:
                      - 1.0.0
                  - key: kubernetes.io/arch
                    operator: In
                    values:
                      - amd64
                      - arm64
      containers:
      - name: up-proxy
        image: <up-proxy-container-path>
        imagePullPolicy: IfNotPresent
```
On the node label xuanwan.opencloudos.org/updater-interface-version= "1.0.0" and wait for Daemonset deployed and run.
Remove the node label and observe whether Daemonset continues to run

### Anything else we need to know?

_No response_

### Kubernetes version

<details>

```console
$ kubectl version
v1.27.4
```

</details>


### Cloud provider

<details>
</details>


### OS version

<details>

```console
# On Linux:
$ cat /etc/os-release
NAME="OpenCloudOS"
VERSION="9.2"
ID="opencloudos"
ID_LIKE="opencloudos"
VERSION_ID="9.2"
PLATFORM_ID="platform:oc9"
PRETTY_NAME="OpenCloudOS 9.2"
$ uname -a
Linux kube-master 6.6.47-12.oc9.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Sep 24 16:15:42 CST 2024 x86_64 GNU/Linux


</details>


### Install tools

<details>

</details>


### Container runtime (CRI) and version (if applicable)

<details>

</details>


### Related plugins (CNI, CSI, ...) and versions (if applicable)

<details>

</details>