您的位置:首页 >聚焦 >

天天热议:【云原生 • Prometheus】云原生kubernetes服务发现原理图解

2023-03-20 05:09:58    来源:腾讯云

云原生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,让整个流程运转起来;

标签:

相关推荐

上合组织国家大使点赞全球吉庆生肖设计大赛邀请展 沉浸式体验中国传统文化

世界消息!各地多措并举促消费

中央纪委国家监委网站:一刻不停推进重点领域反腐|当前要闻

15名老人被骗走16万余元,这伙卖“神药”的骗子被一锅端! 当前独家

城市副中心大运河游船开启今春首航!乘船攻略,一文收藏 焦点热门

7天股价暴跌超70%!超千亿元蒸发!美国这一银行,拟这样“自救”

苏州一女子涉嫌杀夫后藏尸冰柜15个多月 ,亲属发现后报警_天天新动态

净化校园环境 护航“无邪未来”

“华尔街300亿自救”没能止住银行业危机,第一共和银行股价还是崩了

环球热点!坠海美无人机被发现:在水下约900米处 到底是怎么回事?

【新时代新征程新伟业——团结奋斗 强国复兴】攻坚克难挑重任 实干担当见成效 全球热头条

民生答卷!换种方式带你看

观焦点:美国大型零售商:零售犯罪成美国流行病 商店每天遭受洗劫

全球微头条丨五个一百:奋斗创造美好生活 拼搏绘就向上中国

全面注册制相关业务首次全网测试进展如何?记者探访→

焦点资讯:美国银行接连关闭,金融市场震荡,高盛集团:将影响美国经济

世界观热点:苏州大学再回应 !“开除学籍”

7月1日实施!电动自行车乘员头盔“强制性国家标准”来了 新资讯

找工作的看过来!北京近期有这些现场招聘会|环球速看料

大波美图来袭!北京颐和园多种花卉进入最佳观赏期 环球简讯

朔城区:唱响生态发展新“牧歌”

内蒙古能源集团春季重大项目集中开工 王莉霞出席-今日热闻

世界今头条!呼和浩特的“块头”变大了

玩具龙头跨界!实丰文化拟投8000万进军光伏赛道

世界热文:ChatGPT多模态大模型重要突破!龙头股20cm涨停,受益上市公司梳理

太原市迎泽区十大行动建设全省消费升级引领区

以诚信建设为主线 山西省注册会计师行业发展显成效

天天百事通!3月17日起山西省九价HPV疫苗9岁至45岁女性都能打

山西省医疗纠纷调解工作规范化建设水平显著提升 全球观察

山东乳山探获一特大型金矿床 查明金金属量近50吨 消息

【报资讯】20万请明星直播带货,仨月成交278元……法院判了!

全球微资讯!花粉过敏“元凶”多是树草 外出需看天防护

北京花时历·樱花|报春“消息树”开花,赏樱攻略来了!

2023直招军士预报名通道已开启!400余个专业可报

世界观察:去年我国全部工业增加值超40万亿元,制造业规模连续13年居世界首位

世界报道:制作兵马俑一共分几步?专家:有些制作者仅14岁

WTT新加坡大满贯赛:国乒锁定全部五项金牌

五一出境游签证预约激增 去这些国家必须早预约_环球滚动

阿根廷首都地区超2万居民用电仍未恢复 政府起诉供电公司

观天下!土耳其地震致该国接近5万人死亡 包括6000余名外国公民

去年我国全部工业增加值超40万亿元(新数据 新看点)

一大学开设“公务员专业”:学费1920元,课程包括申论、行测

每日动态!1秒加价2.3亿!南京7年来最贵地王诞生

俞敏洪:不要因为友情背叛对朋友失去信心,不要因为错误决策对自身失去信心

有券商“绕道抢跑”接入行情,监管已三令五申,为何仍有违规发生? 世界速讯

全面降准来了!任泽平:利好股市、债市、房市

2023樱花大片,武汉上演! 天天观点

环球即时看!上门做饭、喂宠物等兼职兴起,律师提醒:需签订协议厘清责任

每日观察!稳开高走持续回暖,我国旅游市场快速升温

最新通报:顶格罚款、吊销导游证!

“开门杀”后逃逸男子昨夜被查获

环球热推荐:两月前离婚被分走近5亿元股票,现又被刑拘!这家上市公司创始人麻烦大了

强盛公司被判赔7000万元:用勾兑大盐湖水冒充神药骗老年人,一瓶卖千元

焦点速读:20万请《步步惊心》女明星带货,仅成交278元

美媒:特朗普顾问建议他“不要呼吁抗议”,担心“国会山骚乱”重演|环球热议

日本蛋价飙升 多家餐饮店停供含蛋菜品|每日精选

天天微动态丨英国铁路工作人员再次举行罢工 部分地区火车停运

黎巴嫩镑对美元黑市汇率跌破110000 创历史新低-最新快讯

特朗普发文称自己将被逮捕,放话“美国梦已死”,全文大写英文字母 全球实时

焦点速读:雄安新区设立以来最大规模!80多家创新型企业现场签约

联合国:黑海港口农产品外运协议已延长_天天快看

查处150人!广西南宁警方整治飙车炫技违法行为

3月17日起山西省九价HPV疫苗9岁至45岁女性都能打 全球最资讯

动态焦点:新闻学是学什么的 出来能干什么(新闻学以后都可以做什么)

全球快看点丨失业保险断交有什么影响没-失业保险断交有什么影响

时光飞逝什么意思啊?比喻时光飞逝的唯美句子与有哪些?

ESIM卡是什么意思?USIM卡是什么意思啊?

H2是什么意思?h2网络代表什么含义啊?

天命之年是多少岁?60岁70岁80岁90岁都叫什么寿?

铜版纸克数一般是多少?157g铜版纸会不会太薄?

模拟考试是什么意思?为什么建议少做模拟题?

售价8.79万元起,长安逸达正式上市|当前关注

今日看点:瑞银和瑞士监管机构急于在周六晚上完成瑞信的交易

苏州洞庭山:碧螺春茶迎来采摘期

中国故事|当工程师遇到“宇宙订单”

焦点讯息:民生答卷!换种方式带你看

场面壮观!新疆昭苏千匹骏马草原奔腾-环球百事通

天天关注:卡塔尔学者:全球安全倡议为中东和平贡献中国方案

自曝欠款5700万元、门店人去楼空,连亏9年的克莉丝汀所有门店暂停运营

张兰境外家族信托被击穿,高净值人士该如何正确设立家族信托?_环球热点

7家营收超1000亿,5家盈利逾100亿!超200家A股公司秀业绩-世界观速讯

【世界新要闻】南非约翰内斯堡大学举办中医推广活动

世界今日报丨美专家:三大因素推动中国科技赶超美国

孟加拉国在华留学生:乐享中国乡村振兴发展的“独特秘方” 快资讯

我国最北自贸片区为中俄两国边贸发展积蓄动能

每日速讯:一场及时雨!2023年首次全面降准,带来哪些利好?

进出口银行副行长谈硅谷银行闪电破产:更多灰犀牛和黑天鹅事件或随时发生

美国市场的逻辑:定价衰退,但还未定价危机

全球热议:肺动脉高压能做手术吗多少钱_肺动脉高压能做手术吗

天天微速讯:王石谈区块链技术:必须和实体经济相融合

环球实时:新希望董事长刘永好:已组织相关人员研究ChatGPT 中国公司会跟上步伐

热点!smart品牌灵感研究所于杭州开启,今明两年将推两款新车

中国科学技术大学叶强:要培养适合数字经济的人才 不能只追求分数和排名

丁香园李天天:中国数字医疗不落后于欧美发达国家 线上问诊在韩国不被允许 天天快报

环球看点!上新了!个人养老金保险产品再扩容

世界快播:斯里兰卡抵印度航班遭遇调度失误:场面混乱 机场紧急补救

外媒:受洪水、热浪等影响,澳大利亚一河流出现数百万条死鱼 世界关注

银行业危机蔓延 日本媒体和专家称美欧紧缩政策埋下隐患

综述:日本航天频频受挫 专家反思研发体制问题-焦点精选

全球要闻:英媒:英国医护罢工潮有望结束