环球热文:【云原生 • Prometheus】云原生kubernetes服务发现原理图解
2023-03-23 14:24:23 来源:腾讯云

云原生kubernetes服务发现原理图解

概述

上节分析了Prometheus服务发现核心流程(如下图),Discoverer基于不同协议发现采集点,通过channel通知到updater协程,然后更新到discoveryManager结构体trargets字段中,最终由sender协程将discoveryManagertargets字段数据发送给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接口获取到云原生集群中的PODServiceNodeEndpointsEndpointsliceIngress等对象的元数据,并基于这些信息生成Prometheus采集点,并且可以随着云原生集群状态变更进行动态实时刷新。

kubernetes云原生集群的PODServiceNodeIngress等对象元数据信息都被存储到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_fileca_file则指定访问API Server使用到的认证信息;role指定基于云原生集群中哪种对象类型做服务发现,支持PODServiceNodeEndpointsEndpointsliceIngress六种类型;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_HOSTKUBERNETES_SERVICE_PORT构建出来, token以及 ca信息从POD固定的文件中获取,因此这种场景下kubernetes_sd_configsapi_serverca_file是不需要配置的。

client-gokubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetesAPI Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作。 ❞

Informer机制

从之前分析的服务发现协议接口设计得知,了解k8s服务发现协议入口在discovery/kubernetes.goRun方法:

Run方法中switch罗列出不同role的处理逻辑,刚好和配置示例中role支持的六种云原生对象类型对应,只是基于不同的对象进行服务发现,基本原理都是一致的。

云原生服务发现基本原理是访问API Server获取到云原生集群资源对象,PrometheusAPI Server进行交互这里使用到的是client-go官方客户端里的Informer核心工具包。Informer底层使用ListWatch机制,在Informer首次启动时,会调用List API获取所有最新版本的资源对象,缓存在内存中,然后再通过Watch API来监听这些对象的变化,去维护这份缓存,降低API Server的负载。除了ListWatchInformer还可以注册自定义事件处理逻辑,之后如果监听到事件变化就会调用对应的用户自定义事件处理逻辑,这样就实现了用户业务逻辑扩展。

Informer机制工作流程如下图:

Informer机制本身比较复杂,这里先暂时不太具体说明,只需要理解Prometheus使用Informer机制获取和监听云原生资源对象,即上图中只有「绿色框部分是自定义业务逻辑」,其它都是client-go框架informer工具包提供的功能。

这其中的关键就是注册自定义AddFuncDeleteFuncUpdateFunc三种事件处理器,分别对应增、删、改操作,当触发对应操作后,事件处理器就会被回调感知到。比如云原生集群新增一个POD资源对象,则会触发AddFunc处理器,该处理器并不做复杂的业务处理,只是将该对象的key放入到Workqueue队列中,然后Process Item组件作为消费端,不停从Workqueue中提取数据获取到新增PODkey,然后交由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、注册资源事件,分别对应资源创建、资源删除和资源更新事件处理;

❝ 这里的 podAddCountpodDeleteCountpodUpdateCount分别对应下面三个指标序列,指标含义也比较明显: 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、事件处理,AddFuncDeleteFuncUpdateFunc注册的事件处理逻辑一样,处理逻辑也比较简单:就是获取资源对象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,让整个流程运转起来;

环球热文:【云原生 • Prometheus】云原生kubernetes服务发现原理图解

2023-03-23

天天要闻:2023年元旦假期需要调休吗 2023年元旦3天假期怎么安排

2023-03-23

阜阳师范大学原党委书记刘树生接受纪律审查和监察调查-环球讯息

2023-03-23

【天天速看料】起源二对csgo有什么影响吗 起源二对csgo影响介绍[多图]

2023-03-23

手骨节疼什么原因造成的_手骨节疼怎么办_世界百事通

2023-03-23

3年投入约2700万元,新西兰政府出手帮助年轻人走出失恋|当前消息

2023-03-23

【世界独家】bcbg是什么牌子

2023-03-23

笔记本电脑耳机没声音怎么设置win10(笔记本电脑耳机没声音怎么设置)|速读

2023-03-23

右旋糖酐铁的作用_右旋糖酐铁的作用

2023-03-23

九江学院吧钟佩瑶_九江学院吧

2023-03-22

深圳市气象局:24日夜间将出现今年首场雷雨大风天气过程

2023-03-22

柳岩原名叫什么

2023-03-22

2xso-dimm是什么意思_2xso dimm-微头条

2023-03-22

大连原中昊光明化工研究设计院改造地块因故中止 起拍价5.18亿

2023-03-22

某小说网站的假5秒盾逆向,ja3指纹验证经验分享 环球讯息

2023-03-22

世界看点:足球报谈徐正源续约:率队在气质上不屈不挠,大胆用新人很难得

2023-03-22

为城市更新发展之路提供新样本 万华集团在京召开“绿色金融赋能城市更新”媒体座谈会|世界要闻

2023-03-22

郑州金水区法院探索金融案件要素式审判 即时

2023-03-22

环球最新:春雨纷纷至周五!申城今日最高温18℃,周四再迎冷空气

2023-03-22

雷军再谈小米造车:更在意软件利润,目标是进入世界前五

2023-03-22

美国纽约社区银行子公司旗星银行完成收购签名银行部分资产

2023-03-21

北方国际: 关于北方转债预计满足赎回条件的提示性公告 要闻速递

2023-03-21

1990年,39岁利比里亚总统被执行枪决照片,已经完全没了颐指气使-世界消息

2023-03-21

每日速讯:湖口县气象台发布雷电黄色预警信号【III级/较重】【2023-03-21】

2023-03-21

新民快评|佘山的故事,未完待续 今日讯

2023-03-21

吉林最低工资标准2023还未调整 2023年吉林最低工资多少钱一个月?-天天快消息

2023-03-21

东岳小学的“第三课堂”

2023-03-21

观速讯丨《狂野之心》轰雷炮机巧怎么使用?轰雷炮机巧使用方法为你呈上具体是什么情况

2023-03-21

【全球速看料】怎样制作暑假课程表格_暑假课程表空白表格

2023-03-21

广州男篮卡位战送同曦4连败 崔永熙25+12林葳11+6+5 当前资讯

2023-03-20

150名师生共植新绿|天天微资讯

2023-03-20

【环球快播报】《地铁跑酷》盾牌飞行器获得教程

2023-03-20

世界播报:鱼泡泡

2023-03-20

新消息丨武侯区随迁子女入学政策2023

2023-03-20

异动快报:三人行(605168)3月20日10点55分触及涨停板-环球观点

2023-03-20

要闻:国台办:大陆方面欢迎马英九先生来访

2023-03-20

【环球报资讯】19分钟2改判,2-1神奇逆转!阿隆索紧握拳头庆祝,拜仁吞4年首败

2023-03-20

热门看点:五香牛肉简单做法_怎么做五香牛肉

2023-03-20

人在杭州,刚刚落户,300万能选什么房

2023-03-19

王者荣耀:西施皮肤值不值得买?做到这三点,皮肤无脑买!

2023-03-19

高速收费电子发票怎么开

2023-03-19

重大男生偷拍女生并发表不当言论是什么情况-每日看点

2023-03-19

颜值高、配置高!网友果断放弃iPhone14买二手iPhone13Pro!

2023-03-19

【天天热闻】唇亡齿寒成语故事ppt_唇亡齿寒成语故事

2023-03-19

诺基亚610怎么下软件(诺基亚610怎么下载软件)

2023-03-18

车技堪忧!来到曼城瓜迪奥拉已经先后摧毁了四辆车总价值385万元

2023-03-18

咐组词语和拼音_咐组词语

2023-03-18

这是国少队抵达阿联酋之后所进行的第一场热身赛-世界即时

2023-03-18

北京互联网法院以案说法—— 网购古玩原石风险远超线下

2023-03-18

怒喝了800ml的新疆牛奶,终于比出差别了! 全球微资讯

2023-03-18

welcometothejungle鼓谱_welcometothejungle

2023-03-17

海底捞,被谁“薅”怕了?-天天速读

2023-03-17

众生药业子公司新冠口服药来瑞特韦片上市申请获受理 众生药业最新公告(今日/头条)-天天视讯

2023-03-17

企业信息调查表模板_企业调查表模板-当前快播

2023-03-17

南丁格尔_说一说南丁格尔的简介|天天观察

2023-03-17

张堰镇建立“平安企业联盟” 确保安全问题看得见管得到有回应

2023-03-17

单单的拼音怎么写_单单的拼音

2023-03-17

科翔股份(300903):3月16日北向资金减持39.24万股_快讯

2023-03-17

马苏够潮,身穿背心下搭碎花阔腿裤,时髦的打扮哪像38岁

2023-03-17

03月16日20时广东清远昨日累计报告阳性感染者确诊418例 怎么判断自己是否属于轻型感染者|当前焦点

2023-03-16

3月16日龙虎榜揭秘:1.1亿抢筹三维通信 机构净买15只股

2023-03-16

双星新材:公司目前中高低端产品均有涉及,产品主要出口,包括日本韩国等市场

2023-03-16

榴莲不甜怎么补救呢? 榴莲不甜有什么补救措施

2023-03-16

分享伊洛纳的玩法及伊洛纳的一些游戏小知识

2023-03-16

焦点简讯:2023年铜门发展趋势

2023-03-16

世界球精选!张小泉:融资净偿还32.62万元,融资余额7403.8万元(03-15)

2023-03-16

欧冠对阵英超球队进球榜:梅西27球最多,本泽马16球次席&C罗第三

2023-03-16

kindle怎么邮箱传书_kindle邮箱传书

2023-03-16

资讯推荐:松花江岸边钩机坠江,一男子不幸身亡

2023-03-15

环球观热点:阳光消保 美好陪伴——光大银行启动2023年金融消费者权益保护教育宣传活动

2023-03-15

女子铅球比赛中铅球直径必须在多少毫米之间_女子铅球正常多少米-世界热门

2023-03-15

今日战国时期兵器大多用什么材料制成(战国时期的兵器大多用哪种材料制成)_当前热议

2023-03-15

每日动态!花开的声音——中国科大的那些人那些事

2023-03-15

湘潭高新区:发放56万元加装电梯补贴_焦点讯息

2023-03-15

【天天快播报】长沙奶奶火了 她给孙女做的衣服 太让人羡慕

2023-03-15

【新要闻】缝多音字组词_缝多音字组词有哪些

2023-03-15

顾村公园几号门离地铁站近

2023-03-15

哈尔滨清明节免费活动汇总(持续更新) 世界时讯

2023-03-14

银川康银巷(宝湖路—金凤五路)慢行绿道工程预计4月底整体完工|世界快看

2023-03-14

焦点讯息:8937.77 米!“深地工程”再获突破

2023-03-14

全球热头条丨大连重工为旭阳中燃研制的6.78米焦炉机械顺利投用

2023-03-14

立夏有哪些习俗_立夏有什么习俗

2023-03-14

山东阿城继电器有限公司

2023-03-14

建行卡开户行查询方式 世界讯息

2023-03-14

快讯2023-03-14 00:23:39

2023-03-14

比上年增长百分比是什么意思_比上年增长百分比怎么算

2023-03-13

环球热消息:U20亚洲杯1/4决赛球员评分榜:李昊第二,中日韩球员包揽前四

2023-03-13

民考汉是怎么录取的_民考汉 观察

2023-03-13

今日热搜:俄罗斯成功使用质子

2023-03-13

即时:03月13日09时山东淄博疫情数据 阳了以后为什么会腰疼?应该怎么办?

2023-03-13

谷歌Pixel 7a曝光:6.1英寸大屏 外观变了 热议

2023-03-13

U20国足对阵韩国拒绝摆大巴 只要进球就请好样的 中国队拼了 焦点资讯

2023-03-13

齐鲁风采双色球查询结果(齐鲁风采双色球)_环球焦点

2023-03-12

03月12日18时江西南昌疫情数据 阳了以后为什么会腰疼?应该怎么办?

2023-03-12

全球实时:ps在线图片编辑软件_在线使用Photoshop照片编辑方法和技巧

2023-03-12

全球快看:萃取操作的基本原理是什么_萃取操作

2023-03-12

广西家畜品种资源保护与利用|环球最资讯

2023-03-12

成都到乐山大佛怎么走最方便_成都到乐山大概多少公里 微速讯

2023-03-12

环球信息:劳动力市场迎来“开门红” 新型用工模式保障稳定就业

2023-03-11

今日讯!滕泾村_关于滕泾村介绍

2023-03-11