一、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: nginx
name: nginx
spec:
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.2
imagePullPolicy: IfNotPresent
resources:
limits:
memory: 200Mi
cpu:100m
requests:
cpu: 100m
memory: 200Mi
terminationGracePeriodSeconds: 30
五、更新与回滚
kubectl set image ds nginx nginx=nginx:1.15.3 -n test --record
kubectl rollout history ds nginx --revision=2 -n test
#更新多次后查看更新记录
kubectl rollout history ds nginx -n test