DaemonSet的主要作用

DaoemonPod 处理的场景有如下几种:

<aside> 💡 注意DaemonPod为了完成上述的功能, 可能运行的时机比整个集群被创建出来还早, 是由 kubelet 直接创建

</aside>

DaemonSet 定义

并且 DaemonSet 在创建Pod的时候, 会自动给 Pod加上 NodeAffinity, 从而保证 Pod只会在指定节点上, 同时,它还会自动给这个 Pod 加上一个Toleration,从而忽略节点的 unschedulable“污点”。

<aside> 💡 DaemonPod 同样也可以像 Deployment 一样进行版本管理, 升级等, 但和 Deployment 依赖 ReplicaSet 对象进行版本管理不同, 在 DaemonSet 中使用的是 controllerrevision 用于记录某种 Controller 对象的版本 ( StatefulSet也同样使用 ) 可以执行 kubectl get controllerrevision 查看

</aside>

DaemonSet 更新策略

目前DaemonSet支持RollingUpdate(滚动更新)和OnDelete(删除时更新)两种更新策略,滚动更新为默认的更新策略,工作逻辑类似于Deployment控制,不过仅支持使用maxUnavailabe属性定义最大不可用Pod资源副本数(默认值为1),而删除时更新的方式则是在删除相应节点的Pod资源后重建并更新为新版本。相关配置在 spec.updateStrategy

<aside> 💡 DaemonSet控制器的滚动更新机制也可以借助于minReadySeconds字段控制滚动节奏,必要时可以执行暂停和继续操作,因此它也能够设计为金丝雀发布机制。

</aside>