守护进程集确保所有符合条件的节点都运行Pod的副本。通常,Pod运行的节点由Kubernetes调度器选择。但是,守护进程集Pod是由守护进程集控制器创建和调度的。这会带来以下问题
ScheduleDaemonSetPods功能(在AWS上的Red Hat OpenShift Service中默认启用)允许您通过向守护进程集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时会忽略不可调度的节点。