k8s从入门到放弃之DaemonSet控制器
Kubernetes中的DaemonSet(简称Ds)控制器是一种工作负载资源,用于在集群中的每个节点(或者满足特定条件的节点)上运行一个Pod副本。这种控制器确保了所有符合条件的节点都会运行该Pod的一个副本,这对于需要在每个节点上运行的系统级服务特别有用,比如网络插件的守护进程、日志收集器等。
DS控制器特性
- 节点覆盖:默认情况下,DaemonSet会调度Pod到所有可用的节点上。你可以通过节点选择器或亲和性规则来限制哪些节点应该运行DaemonSet的Pod。
- 自动扩展和收缩:当你向集群中添加新节点时,如果它们符合DaemonSet的条件,则DaemonSet控制器会自动在这些节点上创建Pod。同样地,如果节点被移除,相应的Pod也会被垃圾回收机制自动删除。
- 更新策略:DaemonSet支持多种更新策略,包括"OnDelete"和"RollingUpdate"。使用"RollingUpdate",可以实现无缝的滚动更新,而不会中断服务。
主要使用场景
- 监控和日志收集:例如Prometheus node-exporter或Fluentd,这些工具通常需要在每个节点上运行以收集数据。
- 存储和网络:某些网络插件或存储驱动程序可能需要在每个节点上运行自己的代理或守护进程。
- 系统管理和服务发现:在某些情况下,你可能需要在每个节点上运行一些辅助服务或工具,以便进行系统管理和增强服务发现功能。
资源文档查询:kubectl explain ds
DaemonSet控制器案例
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ds-filebeat
spec:
selector:
matchLabels:
app: file
template:
metadata:
labels:
app: file
spec:
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: Exists
effect: NoSchedule
containers:
- name: filebeat
image: elastic/filebeat:7.8.1
imagePullPolicy: IfNotPresent
ports:
- name: http
protocol: TCP
containerPort: 5044
查看pod状态
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ds-filebeat-g7l76 1/1 Running 0 2m58s 172.16.166.144 node1 <none> <none>
ds-filebeat-g8vgf 1/1 Running 0 2m57s 172.16.104.54 node2 <none> <none>
ds-filebeat-l64lm 1/1 Running 0 2m56s 172.16.219.94 master <none> <none>