热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux+agent卸载_DevOps专题|基础Agent部署系统

随着京东云业务规模、管理机器规模的扩大,各类agent也在逐渐增多,如日志agent、监控agent、控制系统agent等。这对agent的部署、升级、
318151cf19bdc46cef58d406dacf767d.png

随着京东云业务规模、管理机器规模的扩大,各类agent也在逐渐增多,如日志agent、监控agent、控制系统agent等。这对agent的部署、升级、状态维护提出了很高的要求,一旦某个全局agent进行了错误地部署、升级,可能会导致agent的资源使用率过高,进而会对全公司的业务产生影响。在此背景下需要有一个统一管理系统来对全网agent的部署、升级进行管控,可以灵活的指定不同的发布策略进行灰度更新,如按照pin层面升级、按照集群层面等等。基于此,京东云自研了ifrit系统用于全网agent的部署、升级和状态维护。

总体架构

ifrit是阿拉伯神话中一种遇火而生,浴火重生的精灵,只有英雄才有驾驭它的能力。这里的“火”可以指代全网每一个节点,“英雄”则可以指代管理员。此外,阿拉丁神话中的“灯神”就是一种ifrit,灯神可以帮阿拉丁实现愿望,京东云ifrit系统也可以帮助我们管理节点。

ifrit 架构自上而下分为ifrit-manageifrit-masterifrit-agent三大模块,如下图所示:

16f5108226c8eea6f6b03496b5d610ab.png

ifrit-agent:负责本机所需业务agent以及ifrit-agent本身的部署、升级、状态维护,定期从ifrit-master中拉取本机agent配置用以管理本机所有agent。配置完成后向ifrit-master汇报本机的agent状态信息。

ifrit-master:每个集群内部署一套master,向上提供ifrit-manage发布部署、更新指令和agent状态查询接口;向下为本集群内所有ifrit-agent提供agent配置信息查询和agent状态回传接口。

ifrit-manage:向用户提供web界面,在该页面可以对指定agent进行灰度更新和全量更新、查看操作记录等。

ifrit-agent

ifrit-agent设计目标:

• 定期获取agent配置信息并向master汇报agent状态信息

• 程序包下载、校验

• 安装

• 卸载

• 升级

• 安装包完整性检测

• 实例存活检测

• 自升级

• 自守护

由于几乎所有部署、监控等相关功能都依赖于agent,ifrit-agent在机器中以服务形式存在并且开机自启动。若ifrit-agent启动时网络服务未启动。则会导致机器在数分钟内无法使用部署、监控、日志服务等功能,同时也无法采集到docker容器类应用的初始化日志,因此ifrit-agent启动时配备重试机制,以确保网络服务已经启动。

ifrit-agent在访问master接口获取期望agent状态信息时,需要带上机器类型和机器uuid(例如内网中的ip、云主机上的instance-id等)。其中机器类型(主要是操作系统、cpu架构)可通过初始化时执行命令获取,或使用golang中的条件编译将机器类型直接写在程序中。

iFrit-master

ifrit-master负责agent管理工作,全网部署agent的增删查改都是通过ifirt-manage调用ifrit-master接口完成的。当集群规模增大时,直接读取mysql获取agent版本信息会对数据库造成很大压力,为了避免这类问题,ifrit-master中采用redis缓存,以固定时间间隔读取mysql中agent版本信息,并合成为ifrit-agent可直接读取的数据缓存到redis,如下图所示:

2ae93b8164f7350efee06ef24e99df87.png

为了减少因agent升级导致的全网业务故障,ifrit-master提供了灰度发布机制,即指定一批机器更新agent到指定版本灰度运行。待灰度验证通过后,在集群内全量部署该agent。同时,ifrit系统可以根据不同机器类型部署不同的业务agent,目前京东云内支持了容器、linux物理机、arm64架构机器和windows系统机器。

iFrit-manage

ifrit-manage统一管理多个集群的master,主要功能如下:

• 用户权限管理

• 分级发布(集群粒度)

• agent状态查询

• 操作审计

ifrit-manage本身作为运营后台的一部分,可读权限由运营后台统一管理。ifrit写操作是高危操作,默认只有超级管理员(一般为公司运维人员)有写权限,其他人员可以通过在配置文件中添加写权限。

根据业务需要,可以将机器划分到不同集群中,当有agent需要变更时,运维人员在灰度验证通过后,按照给定的集群顺序分集群进行部署。运维完成一个集群的agent部署后,15分钟内(ifrit-agent主循环周期+ifrit-master redis缓存周期)该集群内所有指定类型机器应当变更生效,运维验证部署生效后方可对下一个集群进行部署。

单集群分级发布

以上的ifrit系统已经具备了集群粒度的分级发布功能,但是随着集群规模越来越大,集群粒度的agent上线仍然有很大风险,因此需要一套更细粒度的分级发布机制,以便于降低agent上线事故带来的影响。

ifrit中根据集群规模大小,使用一致性hash算法将集群中的机器均匀分成若干批,并分批上线。一致性hash算法是hash算法的改进,和普通hash算法的关键区别是,对于节点和数据(ifrit中使用机器uuid)都做一次hash运算,并比较节点和数据的hash值,顺时针方向取距离数据点的节点。若hash后的节点分布不均匀,可通过引入虚拟节点增大节点数目,从而使得散落在hash环上的节点更加均匀,如下图。

45d7a06dad7bcf5b0e04f0ed084ded7d.png
dcf7619400fe199bf97d92b0cf1110db.png

集群分批完成后,集群内进行agent全量上线时首先进行小流量验证,验证通过后按照一定时间间隔更新redis缓存信息,新增键值expect_default_hash1_CONTAINER等。此时ifrit-agent获取agent版本信息的优先级为:灰度数据>hash数据>全量数据(时间戳相同的情况)。还可以通过暂停更新/删除redis中hash类型的数据,实现agent上线的暂停与回滚(操作mysql数据间接实现)。

自此,ifrit实现了单集群内的agent上线分级发布。

看完本文后,您是否有所收获呢,如果您想了解更多关于京东云翼的讯息,欢迎点击“阅读”了解更多~

也欢迎点击“京东云”了解更多精彩内容

d2564b9bf94839de83d4459eb6e28cd4.png
f2ac8aa7e2ed3fdcfdbc8581c5490193.png



推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • KVM配置调整
    一内存CPU调整1.1增大虚拟机内存[root@k8s-01~]#virshshutdownvm01-centos7域vm01-centos7被关闭[root@k8s-01~]#v ... [详细]
author-avatar
KeNnyT0nGMM_934
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有