kubernetes daemonset基础原理

本文深入探讨了Kubernetes中DaemonSet的工作原理与实现细节。DaemonSet确保特定类型的pod在每个节点上运行,通过监听DaemonSet、Pod和Node对象变化,维持集群状态与描述状态一致。文章详细介绍了DaemonSet控制器的syncLoop机制,包括获取节点状态、决定Pod的创建与删除、维护Pod数量和版本一致性等关键步骤。

1)概述

代理性质的进程需要在每一个节点上,或多个节点上运行,此时可以使用kuberntes daemonset来实现。在实际中,一般会将日志采集的代理、网络插件通过daemonset方式及进行部署。

2)大致原理

daemonset的控制器会监听kuberntes的daemonset对象、pod对象、node对象,这些被监听的对象之变动,就会触发syncLoop循环让kubernetes集群朝着daemonset对象描述的状态进行演进。

3)细节实现

控制器每一次syncLoop都会进行下面5步操作

1)获取当前状态的map: 这个map描述着坐落到每一个节点的daemonset pod
nodename --> [daemonPod 1, daemonPod 2 …]

2)遍历每一个node:
podsShouldBeOnNode(node, map, ds) --> 得到两个列表(具体过程会受调度器的预选算法影响):
a、一个node name列表(不为空,则表示该node需要新建一个pod)
b、该node上待删除的pod列表。

3)pod数量一致性:实际创建Pod和删除pod:
把node name列表汇总,待删除pod列表汇总,最后将这两者输入到一个方法来实际调用apiserver接口创建pod和删除pod即可,这样就达到期望状态。

4)pod版本一致性:
调用rollingUpdate(),本质还是通过删除部分Running状态pod和非Running状态的pod来实现更新

5)更新daemonset对象的status字段

4)重点方法

                                |-> dsc.getNodesToDaemonPods()  //获取当前状态
                                |
                                |
                  |-> manage -->|-> dsc.podsShouldBeOnNode() --> dsc.nodeShouldRunDaemonPod	//汇总需要创建的pod和待删除的Pod
                  |             |
                  |             |
syncDaemonSet --> |             |-> dsc.syncNodes  //Pod数量一致性
                  |
                  |-> rollingUpdate  //Pod版本一致性
                  |
                  |
                  |-> updateDaemonSetStatus  //更新daemonset对象的status字段

5)参考

  1. https://www.jianshu.com/u/a004b422adae
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值