一、DaemonSet介绍
DaemonSet 的主要作用,是在 Kubernetes 集群里,运行一个 Daemon Pod。DaemonSet 只管理 Pod 对象,然后通过 nodeAffinity 和 Toleration 这两个调度器参数的功能,保证了每个节点上有且只有一个 Pod。
二、DaemonSet 使用场景
每个节点上只有一个这样的 Daemon Pod 实例,然后当有新的节点加入 Kubernetes 集群后,该 Pod 会自动地在新节点上被创建出来。当旧节点被删除后,它上面的 Pod 也会相应地被回收掉。Daemon Pod 的意义确实是非常重要的。比如的作用:
• 网络插件的 Agent 组件,都必须运行在每一个节点上,用来处理这个节点上的容器网络。
• 存储插件的 Agent 组件,也必须运行在每一个节点上,用来在这个节点上挂载远程存储目录,操作容器的 Volume 目录,比如:glusterd、ceph。
• 监控组件和日志组件,也必须运行在每一个节点上,负责这个节点上的监控信息和日志搜集,比如:fluentd、logstash、Prometheus 等。
三、DaemonSet调度
DaemonSet通过kubernetes默认的调度器scheduler会在所有的node节点上运行一个Pod副本,可以通过如下三种方式将Pod运行在部分节点上:
• 指定nodeName节点运行
• 通过标签运行nodeSelector
• 通过亲和力调度node Affinity和node Anti-affinity
DaemonSet调度算法用于实现将Pod运行在特定的node节点上
四、示例
相较于Deployment,StatefulSet,DaemonSet没有副本数,因为他是一个节点启动一个,容器。
apiVersion: apps/v1
kind: DaemonSet
metadata:labels:app: nginxname: nginx
spec:revisionHistoryLimit: 10selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.15.2imagePullPolicy: IfNotPresentresources:limits:memory: 200Micpu:100mrequests:cpu: 100mmemory: 200MiterminationGracePeriodSeconds: 30
五、更新与回滚
kubectl set image ds nginx nginx=nginx:1.15.3 -n test --recordkubectl rollout history ds nginx --revision=2 -n test#更新多次后查看更新记录
kubectl rollout history ds nginx -n test