【云原生 • Prometheus】云原生kubernetes服务发现原理图解
云原生kubernetes服务发现原理图解
概述
上节分析了Prometheus服务发现核心流程(如下图),Discoverer基于不同协议发现采集点,通过channel通知到updater协程,然后更新到discoveryManager结构体trargets字段中,最终由sender协程将discoveryManager的targets字段数据发送给scrape采集模块。
【资料图】
Discoverer定义的接口类型,不同的服务发现协议基于该接口进行实现:
type Discoverer interface { // Run hands a channel to the discovery provider (Consul, DNS, etc.) through which // it can send updated target groups. It must return when the context is canceled. // It should not close the update channel on returning. Run(ctx context.Context, up chan<- []*targetgroup.Group)}k8s协议配置
Prometheus本身就是作为云原生监控出现的,所以对云原生服务发现支持具有天然优势。kubernetes_sd_configs服务发现协议核心原理就是利用API Server提供的Rest接口获取到云原生集群中的POD、Service、Node、Endpoints、Endpointslice、Ingress等对象的元数据,并基于这些信息生成Prometheus采集点,并且可以随着云原生集群状态变更进行动态实时刷新。
❝
kubernetes云原生集群的POD、Service、Node、Ingress等对象元数据信息都被存储到etcd数据库中,并通过API Server组件暴露的Rest接口方式提供访问或操作这些对象数据信息。 ❞
「kubernetes_sd_configs配置示例:」
- job_name: kubernetes-pod kubernetes_sd_configs: - role: pod namespaces: names: - "test01" api_server: https://apiserver.simon:6443 bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt配置说明:
api_server指定API Server地址,出于安全考虑,这些接口是带有安全认证的,bearer_token_file和ca_file则指定访问API Server使用到的认证信息;role指定基于云原生集群中哪种对象类型做服务发现,支持POD、Service、Node、Endpoints、Endpointslice、Ingress六种类型;namespaces指定作用于哪个云原生命名空间下的对象,不配置则对所有的云原生命名空间生效;「为什么没有配置api server信息也可以正常进行服务发现?」
很多时候我们并不需要配置api server相关信息也可以进行服务发现,如我们将上面示例简化如下写法:
- job_name: kubernetes-pod kubernetes_sd_configs: - role: pod namespaces: names: - "test01"一般Prometheus部署在监控云原生集群上,从 Pod使用 Kubernetes API官方客户端库(client-go)提供了更为简便的方法:rest.InClusterConfig()。 API Server地址是从POD的环境变量KUBERNETES_SERVICE_HOST和KUBERNETES_SERVICE_PORT构建出来, token以及 ca信息从POD固定的文件中获取,因此这种场景下kubernetes_sd_configs中api_server和ca_file是不需要配置的。
❝
client-go是kubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作。 ❞
Informer机制
从之前分析的服务发现协议接口设计得知,了解k8s服务发现协议入口在discovery/kubernetes.go的Run方法:
Run方法中switch罗列出不同role的处理逻辑,刚好和配置示例中role支持的六种云原生对象类型对应,只是基于不同的对象进行服务发现,基本原理都是一致的。
云原生服务发现基本原理是访问API Server获取到云原生集群资源对象,Prometheus与API Server进行交互这里使用到的是client-go官方客户端里的Informer核心工具包。Informer底层使用ListWatch机制,在Informer首次启动时,会调用List API获取所有最新版本的资源对象,缓存在内存中,然后再通过Watch API来监听这些对象的变化,去维护这份缓存,降低API Server的负载。除了ListWatch,Informer还可以注册自定义事件处理逻辑,之后如果监听到事件变化就会调用对应的用户自定义事件处理逻辑,这样就实现了用户业务逻辑扩展。
Informer机制工作流程如下图:
Informer机制本身比较复杂,这里先暂时不太具体说明,只需要理解Prometheus使用Informer机制获取和监听云原生资源对象,即上图中只有「绿色框部分是自定义业务逻辑」,其它都是client-go框架informer工具包提供的功能。
这其中的关键就是注册自定义AddFunc、DeleteFunc和UpdateFunc三种事件处理器,分别对应增、删、改操作,当触发对应操作后,事件处理器就会被回调感知到。比如云原生集群新增一个POD资源对象,则会触发AddFunc处理器,该处理器并不做复杂的业务处理,只是将该对象的key放入到Workqueue队列中,然后Process Item组件作为消费端,不停从Workqueue中提取数据获取到新增POD的key,然后交由Handle Object组件,该组件通过Indexer组件提供的GetByKey()查询到该新增POD的所有元数据信息,然后基于该POD元数据就可以构建采集点信息,这样就实现kubernetes服务发现。
「为什么需要Workqueue队列?」
Resource Event Handlers组件注册自定义事件处理器,获取到事件时只是把对象key放入到Workerqueue中这种简单操作,而没有直接调用Handle Object进行事件处理,这里主要是避免阻塞影响整个informer框架运行。如果Handle Object比较耗时放到Resource Event Handlers组件中直接处理,可能就会影响到④⑤功能,所以这里引入Workqueue类似于MQ功能实现解耦。
源码分析
熟悉了上面Informer机制,下面以role=POD为例结合Prometheus源码梳理下上面流程。
1、创建和API Server交互底层使用的ListWatch工具;
2、基于ListWatch创建Informer;
3、注册资源事件,分别对应资源创建、资源删除和资源更新事件处理;
❝ 这里的
podAddCount、podDeleteCount和podUpdateCount分别对应下面三个指标序列,指标含义也比较明显:prometheus_sd_kubernetes_events_total(role="pod", event="add")prometheus_sd_kubernetes_events_total(role="pod", event="delete")prometheus_sd_kubernetes_events_total(role="pod", event="update")role标识资源类型,包括:"endpointslice", "endpoints", "node", "pod", "service", "ingress"五种类型;event标识事件类型,包括:"add", "delete", "update"三种类型。 ❞
4、事件处理,AddFunc、DeleteFunc和UpdateFunc注册的事件处理逻辑一样,处理逻辑也比较简单:就是获取资源对象key,并将其写入到Workqueue中;
❝ 对于
POD资源,这里的key就是:namespace/pod_name格式,比如key=test01/nginx-deployment-5ffc5bf56c-n2pl8。 ❞
5、给Workqueue注册一个无限循环处理逻辑,就能持续从Workqueue中取出key进行处理;
❝ 针对
Pod里的每个Container上的每个port,都会生成一个对应采集点target,其中__address__就是PodIP+port组合。 ❞
6、最后启动Informer,让整个流程运转起来;
标签:
- 世界百事通!初音未来的男朋友叫什么名字_初音未来的男朋友
- 世界观天下!一杯“荷塘咖啡”撬动文旅融合产业链 村民享受文旅发展红利
- 从缅甸逃回男子自述:水牢满地是血,女子遭囚禁虐打,好看的被卖至娱乐场所|看点
- 全球今年恐迎来厄尔尼诺“大烤”_热门看点
- 一张图:2023/07/03黄金原油外汇股指"枢纽点+多空占比"一览
- 黄酒怎么泡红枣?
- 定海浮生录·叁-每日关注
- 午评:两市放量上行沪指涨1.29% 汽车与保险行业领涨 世界即时看
- 【天天速看料】新田:李祥佐走访慰问困难党员和老党员
- 微头条丨服务不间断 持续助力高校毕业生就业
- 同情他们!第一批“吃螃蟹”的那些人,正提心吊胆开电动车
- 焦点简讯:成都东软学院学费多少_成都东软学院学费
- 呼和浩特强降雨引发山洪,致1人死亡2人失联
- 小暑吃黄的好处及方法
- 安控科技7月3日快速上涨
- 十年寒窗无人问一举成名天下知雪怕太阳草怕霜人怕没钱情怕伤_十年寒窗无人问
- 实时焦点:我恨狮子座人数_我恨狮子座
- 株洲桂娟餐饮服务有限责任公司_关于株洲桂娟餐饮服务有限责任公司概略-热推荐
- 毕业生报到证去哪里报到(毕业生报到证)|焦点精选
- 全球热消息:英国脱欧的原因及事件经过(英国脱欧的原因)
- 今日热议:津城天气:雷阵雨“灭火”!别想得美!
- 环球要闻:对虚开骗税等涉税违法行为亮剑出击广州市税务局释放税务稽查执法刚威
- 汕尾陆丰警方通报一加油站发生火灾:涉嫌放火者已被刑拘 全球播报
- 罗马诺:切尔西将继续与布莱顿谈凯塞多转会;球员已同意加盟-当前信息
- 全球今亮点!重庆启动水旱灾害防御Ⅳ级应急响应
- 9月上市/定位高于深蓝SL03 启源A07更多消息露出 全球最资讯
- 十个人电梯超重的问题_十人电梯超重官方答案 天天动态
- 红米手机参数配置对比(红米x40手机参数)
- 今日观点!《红楼梦》《小美人鱼》,“国家队”以芭蕾“明珠”点亮申城夏夜
- 世界最大跨径公轨两用悬索桥进入主塔施工阶段|世界百事通
- 世界观速讯丨喜报!我校7门课程新入选国家级一流本科课程
- 当前信息:蜗牛移动怎么查话费?_蜗牛移动怎么查话费
- 中金岭南韶关冶炼厂新增12万吨锌基新材建设项目(一期)工程开工_通讯
- 注意,发票作废的时代或将结束!
- 每日速看!秦静温乔舜辰最新章节1350章
- 局长信箱怎么查询回信西安医疗保障局(局长信箱怎么查询回信)
- 丹佛斯变频器面板按键说明图_变频器面板按键说明书
- 美国今年已发生186起儿童意外枪击事件 当前简讯
- 温网开赛前迎坏消息!郑钦文的运气太差了,网友:又要白忙活? 环球要闻
- 上财校友会无锡讲座分享会-环球快消息
- 【独家焦点】路面更平整,通行更顺畅!他们积极探索社区治理新模式
- 高校该不该开放?有商家将高校参观做成“付费生意”
- 世界即时看!视点|又见卖菜“小过重罚”11万,执法公平不能只靠法院兜底
- 麦博m111电路图(麦博m-111)_环球观点
- 中东土豪百亿补贴,高合汽车“续”上了?
- “第三支箭”落地 上市房企定增连续获批背后的市场脉搏 头条焦点
- 基督教歌曲耶稣爱你_天主教耶稣爱你网
- 儿童新冠二阳了怎么办 二阳会不会出现新冠后遗症 基本情况讲解
- 雅虎记者:阿努诺比希望在进攻端扮演更重要角色&想要多持球
- 高温催生避暑旅游热 :中信证券及外资扎堆买入加仓长白山,涨停还有几个
- 新资讯:在马赛遇袭中国游客已前往瑞士并提前回国
- 赵鹏获任中国人保党委副书记
- 惠来县发布暴雨橙色预警
- 《夏目友人帐》将制作第七季 ,15周年庆祝影片公开
- 当时明月在——怀念林文月教授丨人来人往
- 王源被人民文娱点评,言辞犀利,句句说到观众的心坎里 世界微头条
- 阿根廷首次使用人民币偿付到期外债 天天速递
- 2022~2023年内蒙古养老金调整新消息和养老金上调细则最新消息(全文)_天天快看点
- 甘肃省中级职称评审需要哪些资料_甘肃省中级职称评审
- 又一家科创型生物医药企业落地宝山!
- 台退役少将于北辰言论被台海军前舰长打脸:我同学真的不知道_全球快看
- 超长约!格兰特5年1.6亿回归开拓者 环球速讯
- 赛尔号格尔顿(查尔顿 赛尔号精灵) 全球聚看点
- 每日速递:党建引领“五共”善治 ——创新基层治理的“大冶样本”
- 焦点简讯:苹果成为首家收盘市值达到3万亿美元的公司 iPhone 15换机周期要来了
- 雄县属于哪个市哪个省(雄县属于哪个市)
- 曝汪姓男艺人性侵19岁女子 具体是什么情况? 当前观察
- 掘金夜经济
- 邢台巨鹿:“红色驿站”里学习忙 世界球精选
- 神十六航天员是哪三位简介(董志川讲天文科普:航天员拍到月亮羞答答溜走)
- 360的老板_360老板是谁
- 世界即时看!张韶涵买的小岛图片(张韶涵买下太平洋小岛)
- AMD R5 5600X3D 处理器海外上架:6 核 12 线程,96MB 三级缓存
- 高考放分了,这些防骗“判断题”要答好-今日精选
- 全球热头条丨金银河:子公司碳酸锂产品中试生产线已投入生产运行并已实现产品销售
- 世界微头条丨word转jpg格式图片怎么弄手机_word转jpg
- 歌尔股份:上半年净利润同比预减76%-84% 全球微速讯
- 台湾黑社会老大(关于台湾黑社会老大的基本详情介绍)
- 播报:集泰股份:与武汉大学共建先进材料研究中心
- 国家外汇管理局公布2023年5月我国国际收支货物和服务贸易数据
- 东风不与周郎便 铜雀春深锁二乔原文 赤壁原文及翻译 世界热资讯
- 每日播报!温暖2023 | 十大最具影响力短视频火热征集中
- 果然是油画大师,丹麦油画之父画的美女,色彩明艳!
- 来自虞美人之坡结局 来自虞美人之坡简介
- 世界微资讯!什么叫开脸观音_什么叫开脸
- 莱音珠宝黄金价格今天多少一克(2023年06月30日)
- 每日观点:演员这首歌的歌词(演员的歌词是什么)
- 曾红娟(关于曾红娟介绍)
- 一天拆除14座桥 湖北交投集团打造“映山红”改扩建特种兵
- you suck翻译(you suck)-全球速讯
- 中航电测6月30日快速上涨 环球精选
- 今日热门!宗地镇戈岜小学志愿服务队
- 全球快资讯丨醉酒后故意伤害怎么判
- 27.77万亿元!公募基金规模再创历史新高
- 【天天报资讯】6.30盘前策略 今天继续实盘实时分享抓涨停
- 雅戈尔(600177):6月29日北向资金减持61.27万股
- 全球微速讯:国乒女单2人出局,钱天一爆冷不敌日本小将,何卓佳完败于孙颖莎
- 贵州和广西,主打一个双向奔赴!
- 装修建材板块6月29日跌1.63%,坚朗五金领跌,主力资金净流出2138.97万元 天天快播
- 世界今热点:一周数读
广告
广告
- 如何验证翡翠的真假?只需要简单8步 天天短讯
- DJI RS 3 Mini发布:2千克负载仅795克,支持快速竖拍 天天新消息
- 形容法律威严的句子(精选187句)
- 《宝可梦》满血情况下受到的伤害减半,能带来多少对战机会?
- 世界热推荐:活力中国丨在忙碌的生产线感知中国经济活力
- 全球消息!海南航空回应男子在航班上喊飞机要出事:该名旅客已移交机场公安
- 陆金贷(小额应急)网贷逾期3年多久上征信|全球百事通
- 比亚迪继续减持比亚迪股份,半年已减持超30%
- 胎压监测板块1月9日涨0.91%,通达电气领涨,主力资金净流出2377.78万元_环球快消息
- 世界速看:陆金贷(小额应急)贷款逾期八天延迟还款会影响征信吗
- 記者觀察|封關壬寅末終落幕 港深雙城記開新篇 世界微动态
- 南开区16岁小孩抚养费一般多少钱
- 世界微头条丨十来万的车,我选卡罗拉
- 新华视点|商圈火、景区旺 各地消费市场显活力|聚焦
- 每日热门:光猫和路由器怎么连接 光猫和路由器的正确连接方法
- 蔬菜生吃还是熟吃?你是哪一派?|天天观点
- 天天消息!九典制药(300705.SZ):非洛地平片获批上市
- 热水泡脚脚痒是怎么回事?-环球时快讯
- 面试时,最可怕的就是背调?-世界视点
- 环球短讯![快讯]广联航空:关于特定股东减持数量过半的进展






