• 【博客433】将公共组件agent以daemonset和sidecar模式部署的利弊


    将公共组件agent以daemonset方式部署的好处

    daemonset模式部署agent好处

    1、如果以sidecar或者打包到业务Image中以 “Per Pod Per Agent” 的方式部署, 那么基础组件的Server端的压力可能也会成倍增长。

    2、业务容器中存在一些其它agent进程时,我们在为Pod申请资源(cpu/mem request and limit)时,不仅要考虑业务应用本身的资源消耗,还要考虑这些基础组件的资源消耗。而且一旦某些Agent有Bug,比如内存泄漏,这将导致Pod牵连被重建,甚至Cgroup OOM在kill进程时,可能将业务进程kill了。

    违背了Kubernetes&微服务的部署最佳实践:Per Process Per Contaienr

    3、假设一个Node上运行10个Pod,那么就会有x10的基础组件数量在Node上。没有容器化之前,一个Node只要部署一个组件进程即可,容器化之后,集群中组件Agents数量要几十倍的增长,如果业务进行了微服务拆分,这个指数会更大,这些基础组件服务端是否能承受比以往高几十倍上百倍的通信请求,都是要解决的大问题。

    4、如果你要全网升级某个基础组件Agent,你需要重新打所有业务镜像,然后全网业务要进行灰度升级。因为一个Agent的升级,导致你不得不重建业务Pod。

    解决方法:

    将基础组件Agents从业务Pod中剥离,通过Kubernetes的容灾,热升级,负载均衡等特性来管理这些基础组件Agent。

    daemonset模式无法胜任,需要sidecar模式的例子

    场景:大数据量的业务pod日志采集

    daemonset模式缺陷:假设以daemonset模式部署filebeat来采集此node上的日志

    1、filebeat单个agent可能出现采集不及时,但是有些pod还没被采集到时就被删除了,导致日志采集缺失

    2、每个pod的日志量不一样,有的大有的小,但是filebeat并不会知道哪个pod的日志多,哪个少,只会对每个日志文件启动一个go协程去watch并采集,这样导致日志量大的pod出现日志延迟

    使用sidecar解决:

    每个pod中部署一个sidecar容器来采集此pod的日志,这样采集时不会被其它pod影响,并且可以根据每个pod中业务容器的日志量情况来绝对其sidecar日志采集容器需要的资源量

  • 相关阅读:
    氟化钙光学窗口保护镜片 光学元件红外测温窗口保护片
    Linux :mysql数据库自动备份
    JavaWeb篇_01——JavaEE简介【面试常问】
    VirtualAllocAPi逆向笔记
    代码随想录算法训练营第五十九天 | 动态规划 part 17 | 647. 回文子串、516.最长回文子序列
    java反序列化基础
    python代码中经常看到,if __name__ == “__main__“,作用是啥
    前端使用Echart实现动态图表
    为什么蘑菇街会选择上云?是被动选择还是主动出击?
    Leetcode 1684. 统计一致字符串的数目
  • 原文地址:https://blog.csdn.net/qq_43684922/article/details/126085985