今日讯!【云原生 • 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,让整个流程运转起来;
标签:
-
2022-02-07 14:57:45
奇迹!绝杀!女足亚洲杯逆转夺冠!<
刚刚,中国女足上演逆转绝杀奇迹!她们在亚洲杯决赛中3:2力克韩国队,时隔16年再夺亚洲杯冠军!
-
2022-02-07 14:57:45
中国政府与阿根廷共和国政府签署共建“一带一路”谅解备忘录<
新华社北京2月6日电(记者安蓓)国家发展改革委6日称,国家发展改革委主任何立峰与阿根廷外交、国际贸易和宗教事
-
2022-02-07 14:57:43
中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明(全文)<
新华社北京2月6日电中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明一、应中方邀请,阿根廷
-
2022-02-07 14:57:40
春节假期国内旅游出游2.51亿人次<
春节遇冬奥,旅游年味浓。根据文化和旅游部数据中心测算,2022年春节假期7天,全国国内旅游出游2 51亿人次,同比
-
2022-02-07 14:57:40
中吉签署关于经典著作互译出版的备忘录 开启两国人文交流互鉴新阶段<
新华社北京2月6日电(记者史竞男)国家主席习近平6日会见来华出席北京2022年冬奥会开幕式的吉尔吉斯斯坦总统扎帕
-
2023-03-24 19:13:42
今日讯!【云原生 • Prometheus】云原生kubernetes服务发现原理图解
上节分析了Prometheus服务发现核心流程(如下图),Discoverer基于不同协议发现采集点,通过channel通知到updater协程,然后更新到di
-
2023-03-24 17:52:16
cpi计算公式讲解_cpi计算公式
1、消费物价指数英文缩写为CPI,是根据与居民生活有关的产品及劳务价格统计出来的物价变动指标,通常作为观察通货膨胀水平的
-
2023-03-24 16:47:31
成都五星级酒店名单 环球速递
成都五星级酒店如下:1、成都首座万丽酒店,位于成都人民南路四段48号;2、成都新东方千禧大酒店,位于成都神仙树南路41号;3、成都明悦大酒店
-
2023-03-24 16:31:13
全画幅新品4月发布!适马17mm F4和50mm F2镜头参数公布
【ITBEAR科技资讯】3月24日消息,适马即将发布三款Contemporary系列镜头。消息称,适马将在4月3日发布这三款镜头,其中包括全画幅的17mmF4和50
-
2023-03-24 15:00:48
热头条丨巨石强森曾拒绝让饰演沙赞的柴克莱威现身《黑亚当》
巨石强森曾拒绝让饰演沙赞的柴克莱威现身《黑亚当》,巨石强森,柴克莱威,超级英雄,柴克·莱威,电视剧导演,黑亚当(电影),沙赞!(电影)
-
2023-03-24 13:46:42
中国足协两名官员同时被查详细内容-今日精选
大家好,小太来为大家解答以上问题。中国足协两名官员同时被查很多人还不知道,现在让我们一起来看看吧!1、想必大家现在对于中国足协两名官员
-
2023-03-24 12:12:52
浙江成立主题出版发展研究院,打造标杆性国家出版智库
“主题出版”的概念源于原国家新闻出版总署2003年起实施的主题出版工程,即围绕党和国家重点工作和重大会议、活动、事件、节庆日等集中开展...
-
2023-03-24 11:06:48
环球热门:新瀚新材:3月23日融资买入189.64万元,融资融券余额2763.37万元
3月23日,新瀚新材(301076)融资买入189 64万元,融资偿还126 45万元,融资净买入63 19万元,融资余额2757 29万元。
-
2023-03-24 10:05:38
世界信息:北京启动2023年职工匠师申报!这些人才优先——
北京日报客户端记者王天淇北京市总工会近日发布通知,启动2023年职工匠师申报工作,将优先吸纳大工匠及提名人选、“北京智造”“北京服务”...
-
2023-03-24 09:22:23
什么是爆吧 每日聚焦
1、爆吧是一种网络暴力活动。爆吧主要是指在贴吧内不停地发无实质内容的辱骂贴、水贴、垃圾贴、挖坟等,扰乱贴吧秩序。2、爆吧起源于在网络上
-
2023-03-24 09:03:45
恒大物业:2月末有2730个在管项目,继续暂停买卖
恒大物业:2月末有2730个在管项目,继续暂停买卖恒大物业3月23日早间在港交所公告,截至2023年2月28日,集团有2730个在管项目,其在管总建筑面积约5
-
2023-03-24 06:58:38
用一句话写作文几句话(通用28篇)
用一句话写作文几句话第1篇在这浩瀚的简直无边无际的宇宙中,一句话的力量似乎十分渺小,就如沙漠中的一颗沙,海洋中的一滴水。但是,一粒沙子
-
2023-03-24 02:48:07
今日精选:斯兰星人卡片_斯兰星人
1、高速外星人斯兰星人(スラン星人∕AlienSran)体长:2~51米高速外星人斯兰星人(12张)体重:69千克~2
-
2023-03-23 23:10:26
刚刚!湖北省省长为他们颁发聘书_全球新消息
今天(3月23日)“相约春天赏樱花”经贸洽谈暨世界500强对话湖北活动拉开序幕海内外嘉宾共赴樱花之约在湖北省省长国际企业家咨询会议上7位...
-
2023-03-23 21:01:21
问题四则:借朋友的车撞了人,我不赔钱,对不对?
问题一:借朋友的车撞了人,车有全险,我不赔钱,对不对?答:这种观点肯定是不对的,而且容易没朋友。首先,如果你是酒驾或者其他保险不理赔
-
2023-03-23 20:04:53
处暑的读音怎么读 处暑的读音是第几声 环球短讯
处暑的读音怎么读处暑的读音是第几声处暑的读音:chǔshǔ。处暑,即为“出暑”,是炎热离开的意思,这时三伏已过或近尾声,初秋炎热将结束...
-
2023-03-23 19:04:03
李鸿彬:3.23黄金避险情绪再次来袭,多头重拾涨势_环球热消息
李鸿彬:3 23黄金避险情绪再次来袭,多头重拾涨势,黄金,白银,李鸿彬
-
2023-03-23 18:00:12
为什么水熊虫捏一下就死了-今日最新
水熊虫本身体积就小,身体比较软,在进入隐身状态后是很容易遭到物理攻击的,水熊虫的弱点是机械损伤,所以才会被捏一下就死了,具体可以看看
-
2023-03-23 16:35:23
天天观点:今日爱疯4s手机(爱疯4S是什么玩意)
爱疯4s手机,爱疯4S是什么玩意很多人还不知道,现在让我们一起来看看吧!1、是喜欢Iphone4的发烧友的一种称呼。2、不过我认为4S呵Iphone4没太大差别
-
2023-03-23 15:27:34
椰视频|抢占上市时间差 万宁东澳西瓜行情喜人-天天新动态
椰视频|抢占上市时间差万宁东澳西瓜行情喜人
-
2023-03-23 13:58:28
工行网上银行网址查询,中国工商银行网银查询 全球观热点
本文内容是由小编为大家搜集关于工行网上银行网址查询,以及中国工商银行网银查询的资料,整理后发布的内容,让我们赶快一起来看一下吧!本文目
-
2023-03-23 12:41:51
世界滚动:劲仔食品:控股股东质押9.03%公司股份
劲仔食品1月12日公告,公司近日接到公司控股股东周劲松的通知,获悉其所持有本公司的部分股份被质押,本次质押3642万股公
-
2023-03-23 12:46:10
环球视讯!葡萄酒品种有哪些
1、赤霞珠“红葡萄品种之王”赤霞珠(CabernetSauvignon)原产自法国波尔多,由长相思(SauvignonBlanc)和品丽珠(Cabernet
-
2023-03-23 11:12:37
每日消息!乌鲁木齐失业金领取标准
失业金分为失业保险金及失业补助金,领取标准会有不同。乌鲁木齐失业补助金领取标准:参保缴费满一年的,按每人每月894元计发;参保缴费不足一
-
2023-03-23 10:01:19
当前热点-多动症常见的5种表现,需警惕!
多动症的“多动”更多出现在需要保持安静或作业时,而不是出现在自由活动时。因此,不能仅仅因为孩子坐不住或不认真听讲,就武断的认为他们...
-
2023-03-23 08:39:47
怎么在默认应用设置关联(如何在默认应用设置页面创建关联)
1、1 点击开始按钮,打开开始菜单,点击里面的“控制面板”2 点击查看方式,切换到大图标。2、3 点击打开“默认程序”图标。3、4 进入...
-
2023-03-23 05:50:13
环球视讯!聚焦中概 | 趣头条将退市,股价再挫32%!知乎绩后升超9%
华盛资讯3月22日讯,热门中概股多数走强,纳斯达克金龙中国指数微跌0 03%。截至发稿,知乎涨超9%,2022年全年总收入36 05亿元同比增21 8%;中概教
-
2023-03-23 01:10:08
勇士队计划以 1.58 亿美元的价格交易乔丹·普尔。 全球微动态
勇士队计划以1 58亿美元的价格交易乔丹·普尔。,库里,交易,勇士队,汤普森,波尔津吉斯,华盛顿奇才,乔丹·普尔
-
2023-03-22 23:26:42
最新消息:呼和浩特十大必去景点 呼和浩特旅游攻略景点
呼和浩特是内蒙古的首府,也是内蒙古的经济,政治,文化中心,当地也有许多知名景区极具特色,那么今天就让我们来一起详细了解一下呼和浩特十
-
2023-03-22 21:50:13
新时代!官方:30岁莫拉塔出任西班牙队长,卡瓦哈尔担任副队
直播吧3月22日讯西班牙前锋奥亚萨瓦尔在国家队官方采访中,谈到了球队目前的队长顺位。奥亚萨瓦尔透露自己目前是第四顺位队长人选,前三依次为