Kubernetes 作业管理之 DaemonSet

本文详细介绍了Kubernetes中的DaemonSet控制器,用于确保每个节点上运行一个特定的Pod。DaemonSet适用于网络、存储和监控组件,通过控制器模型保证每个Node上的Pod数量。创建和管理DaemonSet涉及nodeAffinity和tolerations的设置,并通过ControllerRevision进行版本控制和回滚。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文是对 Kubernetes 作业管理中的容器化守护进程相关设计的理解,由于 DaemonSet 这个知识点相对较为容易理解,所以主要是作的张磊在极客时间上《深入剖析 Kubernetes》课程的笔记。



Why(为什么要有 DaemonSet)

使用场景:

  1. 各种网络插件的 Agent 组件,都必须运行在每一个节点上,用来处理这个节点上的容器网络;
  2. 各种存储插件的 Agent 组件,也必须运行在每一个节点上,用来在这个节点上挂载远程存储目录,操作容器的 Volume 目录;
  3. 各种监控组件和日志组件,也必须运行在每一个节点上,负责这个节点上的监控信息和日志搜集。

What(DaemonSet 是什么)

一句话:在 Kubernetes 集群中的每一个节点中运行一个 Daemon Pod

How(DaemonSet 如何保证每个 Node 上有且只有一个被管理的 Pod)

DaemonSet 会保证每个 Node 上有且只有一个被管理的 Pod,是利用“控制器模型”原理实现。

原理: DaemonSet Controller,首先从 Etcd 里获取所有的 Node 列表,然后遍历所有的 Node。这时,它就可以很容易地去检查,当前这个 Node 上是不是有一个携带了指定标签的 Pod 在运行。有多余 Pod 的话就调用 Kubernetes API 删除;没有这种 Pod 的话就利用 Pod 来创建一个。

有2个点:
DaemonSet Controller 会在创建 Pod 的时候,自动在这个 Pod 的 API 对象里,加上一个 nodeAffinity 定义。其中,需要绑定的节点名字,正是当前正在遍历的这个 Node。
此外,DaemonSet 还会给这个 Pod 自动加上另外一个与调度相关的字段,叫作 tolerations。这个字段意味着这个 Pod,会“容忍”(Toleration)某些 Node 的“污点”(Taint)。
具体可以看最后的“使用实例”。

另外,DaemonSet 控制器操作的直接就是 Pod,没有 ReplicaSet 这样的对象参与其中,所以,它的版本维护是使用 API 对象的方式实现,名为 ControllerRevision。
这个 ControllerRevision 对象,实际上会保存某一版本对应的完整的 DaemonSet 的 API 对象。并且,在 Annotation 字段保存了创建这个对象所使用的 kubectl 命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值