Kubernetes中的DaemonSet通过以下机制确保每个节点运行指定Pod,并提供常用解决方案步骤:
-
节点匹配机制:
- DaemonSet Controller监听集群节点列表,根据
nodeSelector
或nodeAffinity
规则筛选目标节点。 - 默认无规则时,覆盖全部节点(包括新加入节点)。
- DaemonSet Controller监听集群节点列表,根据
-
Pod自动部署与维持:
- 每个匹配节点自动创建Pod副本,若Pod被删除或节点重启,Controller重新创建。
- 新节点加入集群时,Controller在10秒内(默认同步周期)触发Pod部署。
-
更新与驱逐策略:
- 使用
RollingUpdate
或OnDelete
策略更新Pod模板,确保滚动替换或手动控制。 - 节点被标记为不可调度(
cordon
)或删除时,Pod保留但不会被迁移(需结合toleration
配置)。
- 使用
常见解决方案步骤:
-
检查DaemonSet配置:
nodeSelector: # 确认目标节点标签匹配 role: storage-node tolerations: # 确保容忍节点污点 - key: "disk-type" operator: "Exists"
-
验证节点状态:
kubectl get nodes --show-labels
检查节点标签是否正确。kubectl describe node <node-name>
查看污点(Taints)。
-
排查Pod状态:
kubectl get pods -l <daemonset-label> -o wide
确认Pod分布。kubectl describe daemonset <name>
查看事件(Events)及错误原因(如资源不足)。
-
强制触发同步:
- 删除目标节点上的Pod,触发Controller立即重建(
kubectl delete pod <name>
)。
- 删除目标节点上的Pod,触发Controller立即重建(