DaemonSet
在Kubernetes中,DaemonSet 是一种控制器,用于确保在集群中的每个节点(或您指定的一组节点)上运行一个 Pod 的副本。DaemonSet 常用于在集群中运行一些提供系统级功能的 Pod,例如:
- 日志收集:在每个节点上运行日志收集器,以收集所有节点上的容器日志。
- 监控:在每个节点上部署监控代理,以收集性能指标。
- 存储:为集群中的每个节点提供存储相关服务,例如使用
glusterfs
或ceph
。- 网络:运行网络插件,例如覆盖网络或服务发现。
- 安全:部署安全相关的代理或扫描器。
DaemonSet 与 Deployment 类似,都可以用来管理 Pod 的生命周期,但它们的主要区别在于:
- 范围:Deployment 管理的 Pod 副本数量是可配置的,而 DaemonSet 总是尝试在每个符合条件的节点上运行一个 Pod 副本。
- 选择性:DaemonSet 可以定义在哪些节点上运行 Pod,通过节点标签和选择器来控制。
- 更新:当 DaemonSet 更新时,它会逐个节点更新 Pod,而不是同时更新所有 Pod。
为什么#
所以为什么要使用DaemonSet,来想象一个场景:
现在我有Node1 Node2 Node3
,每个Pod
中都有自己的logs
,但是如果某个地方出bug
了,那么我们会傻傻地去看每一个Pod
中的logs来排查错误,但是这个效率太低了
因此我们会再创建一个Node
用来日志收集,资源监控等功能
那么如何保证是我想要的Node的日志能够成功传送到Node4呢?
这就需要使用到DaemonSet
比如说日志收集,DaemonSet
就可以使用一个叫 Fluentd
的组件,组成一个Pod,
然后用选择器选择自己想要使用 DaemonSet
的 Node
,这样子就会像上面图片一样执行:
当Node1~3
这些节点的 type = microservice
就会都 装有一个 DaemonSet
用于收集日志,然后把日志传送到 Node4
上
使用#
指定 Pod 只运行在 指定的 Node 节点上
nodeSelector
只调度到匹配指定的 label 的 Node 上
nodeAffinity
功能更加丰富的 Node 选择器, 支持集合操作
podAffinity
调度到满足条件的 Pod 所在的 Node 上
与 Deployment
和 StatefulSet
一样
1 | cd /home/echin |
1 | apiVersion: apps/v1 |
1 | kubectl create -f daemonset.yaml |
查看是否成功:
1 | hhhyc@hhhyc:~/daemonset$ sudo kubectl get ds |
或者:
1 | hhhyc@hhhyc:~/daemonset$ sudo kubectl get po |
🆗,感觉这一块学的东西不是很多,直接GPT启动…..
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Echin の 博客!