DaemonSet 确保所有符合条件的节点都运行 Pod 的副本。通常,Pod 运行的节点由 Kubernetes 调度器选择。但是,DaemonSet Pod 由 DaemonSet 控制器创建和调度。这会带来以下问题
**ScheduleDaemonSetPods** 功能(在 OpenShift Dedicated 中默认启用)允许您通过向 DaemonSet Pod 添加 `NodeAffinity` 项(而不是 `spec.nodeName` 项)来使用默认调度器而不是 DaemonSet 控制器来调度 DaemonSet。然后使用默认调度器将 Pod 绑定到目标主机。如果 DaemonSet Pod 的节点亲和性已存在,则将其替换。DaemonSet 控制器仅在创建或修改 DaemonSet Pod 时执行这些操作,并且不会对 DaemonSet 的 `spec.template` 进行任何更改。
kind: Pod
apiVersion: v1
metadata:
name: hello-node-6fbccf8d9-9tmzr
#...
spec:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchFields:
- key: metadata.name
operator: In
values:
- target-host-name
#...
此外,`node.kubernetes.io/unschedulable:NoSchedule` 容忍度会自动添加到 DaemonSet Pod。默认调度器在调度 DaemonSet Pod 时会忽略不可调度的节点。