【云原生 • 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
,让整个流程运转起来;
标签:
- 【云原生 • Prometheus】云原生kubernetes服务发现原理图解
- 2021年上海进博会时间什么时候开始 上海进博会2021年时间表地址一览-环球热推荐
- 世界微资讯!neither是什么意思英语翻译成中文_neither是什么意思
- 每日热议!家用空调安装授权考试(家用空调安装)
- 天天热门:2022年春运什么时候开始?2022年春运时间表
- 新增2926.11亩,南昌赣江新区2023年供地计划公布|新消息
- 吊销未注销是什么意思还能正常经营吗(吊销未注销是什么意思) 天天通讯
- 观点:光山县2023年春茶开采启动仪式举行
- 天天亮点!南召法院高效执结一起金融借款合同纠纷案
- 西红柿吃多了会上火吗视频讲解_西红柿吃多了会上火吗
- 环球关注:养100对鸽子的成本_鸽子养殖成本利润
- 当前速递!日本每年因睡眠不足损失近8000亿元 部分公司引入午睡制度
- 世界速递!*ST海伦: 2022年度独立董事述职报告(黄华敏)
- 霍伊别尔:我们没有得到想要的结果 要全力以赴让孔蒂满意
- 微软必应上线 AI 绘图功能,Image Creator 对外扩大开放
- 大江万古流 江南文脉远-重点聚焦
- ISO20000认证需要什么材料
- 任然和仍然然意思区别_任然和仍然意思区别
- 内蒙古化德县100万千瓦风光储项目开工
- 山口和树-世界看热讯
- 滨海港镇_关于滨海港镇介绍
- 魔兽世界凄凉之地怎么去_凄凉之地幽灵电浆的巨型骸骨在哪-全球焦点
- 涉嫌严重违法,抚州市临川区住房保障中心职工张青杰接受监察调查
- 天天动态:如何锻炼腹斜肌_腹斜肌怎么练
- 环球今亮点!海岛春早轮训忙
- 瑞银董事长:收购瑞信是一次“紧急救援” 将降低瑞信投行业务规模|快消息
- 春天可以种砂仁吗 春季适合播种砂仁吗_天天快讯
- 反对无效!日本居民哭诉日政府,135万吨核污染水即将倒入太平洋|最新消息
- 晋江市阳溪中学党员义工服务队_对于晋江市阳溪中学党员义工服务队简单介绍
- 神俑降临漫画全集_神俑降临-快看
- 大脚世界频道管理员权限_大脚世界频道管理员
- 2023年安卓之光!小米13 Ultra最新进展:还在打磨MIUI 14系统_全球快报
- WTT新加坡大满贯赛:国乒锁定全部五项金牌_全球观点
- 全球快看:动漫中的美丽“继母”,而她最为经典,连老司机们都知道!
- 世界微速讯:厄瓜多尔中企员工:地震发生时高楼有明显晃动,有墙皮、玻璃碎片掉落
- 【民生烟台】烟台一地出台购房新政
- 新疆代表在联合国人权理事会第52届会议介绍暴恐危害 速讯
- 环球快消息!周雨彤新戏搭档李现,虽然一直不算火,但资源是真的好!
- 比亚迪新能源汽车_比基尼考
- 上海这个千年古镇今天开街!失传已久的这款美食回归!好吃好玩的攻略来了!-焦点热文
- 当前滚动:究竟|今年非洲猪瘟到底严重吗?对肉价有多大影响?
- 焦点关注:男士冬天帽子品牌_男士冬季帽子品牌大全
- 成圣的99种方法_成圣
- 微速讯:专家学者共话商圈建设发展 CBD国际消费中心商圈创建主旨论坛精彩上演
- 要闻:血液病有哪些症状很严重吗_血液病有哪些症状
- 请以童年生活为话题写一个片段_童年是一个谜混沌初开稚嫩好奇-天天热讯
- 满装瓶罐_关于满装瓶罐介绍
- 前沿热点:柏睿数据升级未来数智战略 发布全新数据智能产品矩阵
- 热文:男子离婚时才知媒婆私扣8万彩礼 法院判退还7万
- 当前焦点!dnf剑神刷图加点_快进来看看吧!
- 钢铁是怎样炼成的优美句段_钢铁是怎样炼成的好段_速讯
- [快讯]章源钨业发布解除质押公告 世界通讯
- 沈阳人才公寓咨询办理地点与电话-环球热点评
- 德媒 中国是德汽车工业重要引擎-世界新资讯
- 长沙高新区公租房结果公示查询官网入口+流程-百事通
- 环球速读:哈姆:不管火箭战绩如何 我们本应像他们那样打球
- 四家人身险公司退保率超10% 银保渠道投资储蓄型产品成退保高发区
- 当前时讯:福州二手房成交数据造假,客户的购房热情不假
- 炼焦煤整体供应端不改宽松趋势 煤价向上驱动不强|播资讯
- 赤身露体是什么意思_赤身露体是啥意思 天天微速讯
- 环球时讯:斯科特皮蓬:迈克尔乔丹才是历史最佳,勒布朗不尊重过去的球员
- 【全球速看料】大满贯赛:林高远怒吼晋级!2-0领先连丢2局,3-2绝杀淘汰梁靖崑
- 文水县南庄镇:用好监督执纪利器 严厉打击违法占地 要闻速递
- 五彩绳编法简单又漂亮(五彩绳编法)
- 深圳证监局:去年四季度基金投诉量大增,富荣基金居首 当前视点
- 新能源板块反弹,电池50ETF(159796)盘中涨幅超2%
- 热讯:什么是响应式网站?响应式网站未来的优势和特点
- 是什么让你这样对我_对于是什么让你这样对我简单介绍 世界新资讯
- 玫瑰花泡红枣的功效与禁忌_红枣的功效与禁忌
- 每日速看!保险业协会副秘书长马晓伟:将探索保险业消保从业人员资格认证体系研究
- 长盈精密:拟定增募资不超22亿元 用于新能源动力及储能电池零组件等项目
- 当前快看:学而思回应重启线下招生:幼儿园小学初中是素养课,高中涉及学科
- 克雷斯波:切尔西非常适合恩佐,他在大场面的表现很自然|世界今亮点
- 苹果 iPhone 14 / Plus 手机黄色配色版本今日正式发售|环球速递
- 记者探访多条路段,快递车占道,骑车人被挤进机动车道
- 当前视点!目标:画1000只大熊猫!她用彩绘为家乡提升颜值
- 全球看热讯:三元催化清洗剂多少钱(三元催化清洗的作用)
- 山寨币_关于山寨币的介绍_天天看点
- 微资讯!工商变更地址所需资料(工商变更地址需要什么资料)
- 实时焦点:港科股集体回调,快手等领涨,机构看好公司电商投资机会
- OpenAI老板向硅谷银行受困科技公司伸援手:不用签欠条,有钱再还
- 赠与合同可不可以撤销吗
- 手指月牙代表什么健康吗_手指月牙代表什么
- 抚远红海植业有限公司|世界独家
- 世界今亮点!冷冻式干燥机工作原理(冷冻机工作原理)
- 杭州迈利机电设备有限公司_关于杭州迈利机电设备有限公司简述
- 环球新消息丨【外企说两会】凯德潘子翔:长期看好中国市场前景,助力中国高质量发展
- 草莓酱怎么做_草莓酱的做法
- 折腾到联合国也不怕
- 新资讯:请问如何脱单_如何脱单
- 两老人相约外出双双迷路,获民警帮助后合影留念
- 全球焦点!难怪50、60岁都不穿黑裤子!今年流行“卡其白裤”,谁见都夸年轻
- 联合国成员国有多少个_联合国成员国有多少个-热消息
- 曼联主帅滕哈格当选英超2月最佳教练 天天热消息
- 广州大都会广场
- 无绳终端_关于无绳终端简介-当前热讯
- 十年生死两茫茫_说一说十年生死两茫茫的简介-全球播资讯
- 20026 pos机上的20026怎么按
- 抖音里怎么私信对方_抖音里怎么私信对方|环球今日报
- 不胜感激的近义词是什么_不胜感激的意思_全球动态
广告
广告
- 如何验证翡翠的真假?只需要简单8步 天天短讯
- DJI RS 3 Mini发布:2千克负载仅795克,支持快速竖拍 天天新消息
- 形容法律威严的句子(精选187句)
- 《宝可梦》满血情况下受到的伤害减半,能带来多少对战机会?
- 世界热推荐:活力中国丨在忙碌的生产线感知中国经济活力
- 全球消息!海南航空回应男子在航班上喊飞机要出事:该名旅客已移交机场公安
- 陆金贷(小额应急)网贷逾期3年多久上征信|全球百事通
- 比亚迪继续减持比亚迪股份,半年已减持超30%
- 胎压监测板块1月9日涨0.91%,通达电气领涨,主力资金净流出2377.78万元_环球快消息
- 世界速看:陆金贷(小额应急)贷款逾期八天延迟还款会影响征信吗
- 記者觀察|封關壬寅末終落幕 港深雙城記開新篇 世界微动态
- 南开区16岁小孩抚养费一般多少钱
- 世界微头条丨十来万的车,我选卡罗拉
- 新华视点|商圈火、景区旺 各地消费市场显活力|聚焦
- 每日热门:光猫和路由器怎么连接 光猫和路由器的正确连接方法
- 蔬菜生吃还是熟吃?你是哪一派?|天天观点
- 天天消息!九典制药(300705.SZ):非洛地平片获批上市
- 热水泡脚脚痒是怎么回事?-环球时快讯
- 面试时,最可怕的就是背调?-世界视点
- 环球短讯![快讯]广联航空:关于特定股东减持数量过半的进展