热门标签 | 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



推荐阅读
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 本文详细探讨了MySQL并发参数的优化与调整方法,旨在帮助读者深入了解如何通过合理配置这些参数来提升数据库性能。文章不仅介绍了常见的并发参数及其作用,还提供了实际操作中的调整策略和最佳实践,适合希望提高数据库管理技能的技术人员阅读。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • top 命令是一个强大的工具,可以实时动态地监控系统的整体运行状况。它整合了多种信息,提供了一个全面的系统性能和运行信息视图。通过 top 命令的交互界面,用户可以使用热键进行各种管理操作。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • Spark与HBase结合处理大规模流量数据结构设计
    本文将详细介绍如何利用Spark和HBase进行大规模流量数据的分析与处理,包括数据结构的设计和优化方法。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 本文详细介绍了进程、线程和协程的概念及其之间的区别与联系。进程是在内存中运行的独立实体,具有独立的地址空间和资源;线程是操作系统调度的基本单位,属于进程内部;协程则是用户态下的轻量级调度单元,性能更高。 ... [详细]
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
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社区 版权所有