守护程序集确保所有符合条件的节点都运行 Pod 的副本。通常,Pod 运行的节点由 Kubernetes 调度器选择。但是,守护程序集 Pod 由守护程序集控制器创建和调度。这会带来以下问题
ScheduleDaemonSetPods 功能在 OpenShift Container Platform 中默认启用,它允许您通过向守护程序集 Pod 添加 NodeAffinity
项(而不是 spec.nodeName
项)来使用默认调度器而不是守护程序集控制器调度守护程序集。然后使用默认调度器将 Pod 绑定到目标主机。如果守护程序集 Pod 的节点亲和性已存在,则将其替换。守护程序集控制器仅在创建或修改守护程序集 Pod 时执行这些操作,并且不会对守护程序集的 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
容忍度会自动添加到守护程序集 Pod。默认调度器在调度守护程序集 Pod 时会忽略不可调度的节点。