一、概念
使用DaemonSet控制器,相当于在节点上启动了一个守护进程。通过DaemonSet控制器可以确保在每个节点上运行Pod的一个副本。如果有心的node节点加入集群,则DaemonSet控制器会自动给新加入的节点增加一个Pod的副本;反之,当有node节点被从集群中移除时,DaemonSet控制器也会自动回收Pod的副本。在删除DaemonSet控制器时,会删除DaemonSet控制器所创建的所有Pod的副本。
他可以实现与pod反亲和性同样的目的,每个节点分别创建一个相同的pod;
典型的用法:
1,在每个节点上运行集群的守护进程(例如:flannel,proxy)
2,在每个节点上运行日志收集的守护进程(例如:filebeat)
3,在每个节点上运行监控的守护进程(例如:zabbix、prometheus)
温馨提示:
1,当有新的节点加入集群,也会在新的节点上创建pod;
2,当有节点被集群移除,这些pod也会被收回;
3,删除daemonset资源,也会删除它所创建的pod;
4,如果节点被打了污点,且daemonset没有定义五点容忍,则pod并不会被调度到该节点上
二、DaemonSet操作案例
1、创建资源清单
这里设置了master的污点容忍,这样就可以在master上也能分配资源
[root@k8s231 daemonset]# cat daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ds-01
spec:
selector:
matchLabels:
k8s: xinjizhiwa
template:
metadata:
labels:
k8s: xinjizhiwa
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: c1
image: nginx:1.20.1-alpin
2、创建资源
[root@master deployment-demo]# kubectl apply -f daemonset.yaml
daemonset.apps/ds-01 created
3、查看资源
我们可以看到,在3个节点都有创建pod资源