关于DaemonSet的理解
来源:1-6 【原理剖析】K8S控制器管理原理剖析与实战
Mr_Raymond
2020-08-29 18:49:48
DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
DaemonSet 的一些典型用法:
在每个节点上运行集群存守护进程
在每个节点上运行日志收集守护进程
在每个节点上运行监控守护进程
https://kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/
上面是官网对DaemonSet的描述,侧重点和老师的讲解不一样。
老师讲的时候让我很费解,我仔细反复听了好几遍,又查阅相关资料,才get到,老师讲的是什么样的应用适合用DaemonSet。
老师讲到,一个Node只需要运行一个DaemonSet,就可以完成整个业务的需求。然后接着就是使用DaemonSet的应用场景。
这是让我困惑的地方,而且似乎有逻辑上的问题 -- DaemonSet只是一个应用发布的调度管理者,并不是运行在Node上的(这么讲容易理解为是一个应用)。
老师特别强调,DaemonSet主要作用是确保每个Node只有一个Pod, 但我个人认为DaemonSet确保每个Node都有且只有一个Pod,都有才是重点。
我的理解,DaemonSet首先是一个负责Pod发布的控制器,他确保集群上每个节点(或通过nodeSelector匹配的所有节点)都运行同一个Pod副本,即一样功能的Pod。
那么DaemonSet就很适合发布这样的应用:
需要在所有Pod中运行的应用,比如日志收集,监控,一些全局代理服务等。
需要在所有特定类型的节点上运行的应用,比如对某些打了特殊标签的Node,部署针对性的全局应用(这里的全局是指匹配特殊标签的所有Node)。
DadmonSet的主要作用是确保符合条件的所有Node,都部署同样的Pod(且只有一个这样的Pod),这样才能更好的理解什么样的应用适合用DaemonSet来发布。
不知道我的理解对不对,希望老师指正。
1回答
同学理解得非常清晰,赞!daemonset的三大点中的另外两点我在课程中没有提及,你这段是很好的补充。
对于每个节点都会运行一个pod,这条是有所限制的,通常在实际环境都设置了污点,所以并不准确。下面是一些常用的亲和性和污点的例子:
https://blog.csdn.net/m0_49051691/article/details/108013530
基本功比较扎实的同学可以实际感受下