实验现象
创建ds
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.22.1
Pod正常运行
ds Pod默认追加的容忍
ds已删除,但是Pod还没删除完成
源码分析
pkg/controller/daemon/daemon_controller.go
manage函数(控制Pod运行在哪些节点上)->podsShouldBeOnNode函数->nodeShouldRunDaemonPod函数->simulate函数->Predicates函数(预选+污点容忍)
最终DaemonSet Pod会运行在符合条件调度的节点上,例如NodeSelector。
参考资料