当前位置: 首页>行业 >

环球即时看!Prometheus 云原生kubernetes服务发现原理图解

来源: 腾讯云 | 时间: 2023-03-23 14:23:42 |

云原生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服务发现原理图解

上节分析了Prometheus服务发现核心流程(如下图),Discoverer基于不同协议发现采集点,通过channel通知到updater协程,然后更新到di

2023-03-23

【全球新视野】等离子和液晶的区别是什么

1、分辨率:等离子虽然屏幕大,但是分辨率没有液晶高;液晶屏幕小,但是像素可以做得更小,因此液晶的分辨率反而更高。2、亮度:现在市场上的液

2023-03-23

友谊第一比赛第二的感悟句子(友谊第一比赛第二的精神)_环球热闻

1、“友谊第一,比赛第二”是体育精神,“友谊第一,比赛第二”作为我国上世纪七十年代体育工作的一项方针,大致经历了提出、宣传贯彻、讨论质

2023-03-23

林师傅在首尔林师傅(林师傅在首尔第二郜) 今日热门

林师傅在首尔林师傅,林师傅在首尔第二郜这个很多人还不知道,现在让我们一起来看看吧!1、林师傅在首尔的电视剧,因为林师傅和善姬在准备结婚

2023-03-23

socket protect_socket am3 世界即时看

1、AM3最好的cpu最高是羿龙系列了,羿龙六核1100T,次点就是四核羿龙955。2、AM3+最高的cpu是八核系列F

2023-03-23

驻中非大使馆发布紧急安全提醒,请尚在班吉以外地区中国公民立即报备

紧急安全提醒当前,非洲等一些国家安全风险高企,中非处首都班吉以外其他地区安全风险等级均为红色,也就是极高风险。“3·19案”再次说明有关

2023-03-23

夏日绝句的诗意

1、《夏日绝句》诗意:作者通过描写项羽的事迹表明人活着就要作人中的豪杰,为国家建功立业。死也要为国捐躯,成为鬼中的英雄。表达了自己对与

2023-03-23

闽南语翻译汉语大全(闽南语翻译在线)

1、悦→ghian,第2~3间声,口读音,与“做”字同声调;广东海陆丰河洛话。2、例如:悦到裤湿→口读音:ghian1~2gao/gakou2~3darm

2023-03-23

皮肤上有红点瘙痒_皮肤上有红点痒是什么病_速递

1、皮肤上的红点和瘙痒很可能是过敏性皮肤病,可能与饮食或口服某些药物引起的过敏有关,也可能与接触刺激引起的过敏有关。2、

2023-03-23

翻牌子的小视频_翻牌子

1、显然是从正面翻到背面。2、皇帝选择当晚由哪位妃嫔侍寝,自然要看着诸妃的绿头牌,再将写着他中意的那位妃嫔的名字的牌子翻

2023-03-22

贵州:推动耐药结核病精准诊治取得实效_全球热点

贵州:推动耐药结核病精准诊治取得实效

2023-03-22

世界短讯!偏偏喜欢你演员表

1、陈乔恩饰钱宝宝2、贾乃亮饰项昊3、黄宗泽饰沈文涛4、郑爽饰萧晗5、许绍雄饰李继洲6、张云龙饰顾小白7、高伟光饰杜枫8、郑龙饰

2023-03-22

甘肃省天水市法院开展“半年清积”攻坚集中行动

法治日报全媒体记者赵志锋通讯员王保祥自甘肃省法院部署开展“半年清积”攻坚集中行动以来,天水市法院以开局就是决战、起步就是冲刺的干劲,

2023-03-22

当前看点!【基金策略】指数探底回升,今日基金思路分享

【基金策略】指数探底回升,今日基金思路分享,加仓,板块儿,上证指数,基金策略,基金思路,创业板指数,散户投资者

2023-03-22

世界关注:成都动物园下雨天开放吗

开放的,但是下雨天部分露天场馆的动物可能会回到室内哦。游客服务中心可以免费为游客提供雨伞及热开水、微波炉、自制垃圾袋和临时性药物,为

2023-03-22

全球播报:赵睿死亡凝视嚣张怒吼队友,看看杜锋第一时间的反应,意味深长啊

赵睿死亡凝视嚣张怒吼队友,看看杜锋第一时间的反应,意味深长啊,杜锋,广东队,江苏队,中国男篮,死亡凝视,中国篮球,国际篮球赛事,中国体育联赛,

2023-03-22

keep+宾语+宾补的用法例句_keep out-环球视点

1、应该是keepoutthesun keepoutofthesun是错误短语。2、正确用法请参看例句:K

2023-03-22

【天天热闻】提高水分利用率 广东各地多措并举确保粮食生产

气象监测记录显示,今年以来,广东省平均降水量仅有82 5毫米,较往年偏少近4成。眼下正值春耕插秧的关键时节,广东各地多措

2023-03-22

盛家伦

1、盛家伦(1911年3月18日——1957年5月10日),作曲家,广东中山人。2、生于汉口。3、早年就读于汉口文华

2023-03-22

全球快看点丨胡歌罕见为《浪姐2》成员打call,看清是谁:比张萌金莎还有面子

众所周知,胡歌是娱乐圈中的一位人气比较高的明星,他出道至少有15年时间了,在此期间,胡歌给观众们带来了很多优秀的影视剧作品,胡歌参演的

2023-03-22

资讯

胡松辉:澳门特区正在努力争取承办CBA赛事

昨晚,第六届粤澳杯第二回合的比赛在恩平体育中心落下帷幕,广东队以89∶77赢下比赛。两回合比赛,广东队以177∶160的优势获得本届比赛的冠

2022-07-08     
北京推出14条秋游文化线路

金秋时节,北京市文化和旅游局以赏银杏品文化为主题,推出14条“叶落的季节——漫步北京赏银杏品文化主题线路”,邀市民和游客以步行、骑行

2021-10-27     
基因编辑发力 培育高质量人源化供体猪

此次人体试验,仅仅验证了基因编辑猪克服异种器官移植的超急性排斥反应,还需解决延迟性排斥反应、消耗性血栓等问题。但通过这次试验,能更

2021-10-27     
中国经济高质量发展步伐稳健 长期向好基本面未变

在全球疫情走势和经济走势趋于复杂的背景下,中国经济巨轮将驶向何方,举世关注。2020年10月26日至29日,党的十九届五中全会在京举行,明确

2021-10-27     
南美解放者杯决赛允许近4.5万观众入场

南美洲足联主席多明格斯25日与今年解放者杯决赛对阵的两支俱乐部负责人会晤,宣布决赛现场观众人数增加到球场容量的75%,即近4 5万人。今年

2021-10-27     
22年从警生涯 面对荣誉他说不要给我报功

9月24日,时任安徽省安庆市公安局迎江分局刑警大队大要案中队中队长周磊因在工作中激烈搏斗引发心源性猝死,倒在了工作岗位上,经医院抢救

2021-10-27