prometheus-adapter原理分析

本文深入剖析了 Prometheus 与 prometheus-adapter 的工作原理及其实现机制,详细介绍了 Kubernetes API Server 中聚合层的功能及其如何通过 APIService 对象扩展 API 路径,并解释了 prometheus-adapter 如何实现自定义指标的查询与注册。

原理分析

prometheus+prometheus-adapter的工作原理

prometheus通过聚合层扩展kubenetes API原理

聚合层在 kube-apiserver 进程内运行。在扩展资源注册之前,聚合层不做任何事情。 要注册 API,用户必须添加一个 APIService 对象,用它来“申领” Kubernetes API 中的 URL 路径。 自此以后,聚合层将会把发给该 API 路径的所有内容 转发到已注册的 APIService。

总结原理如下:

  • aggregatorServer 通过 APIServices 对象关联到某个 Service 来进行请求的转发,其关联的 Service 类型进一步决定了请求转发的形式。aggregatorServer 包括一个 GenericAPIServer 和维护自身状态的 Controller。其中 GenericAPIServer 主要处理 apiregistration.k8s.io 组下的 APIService 资源请求,而Controller包括:
    • apiserviceRegistrationController:负责根据 APIService 定义的 aggregated server service 构建代理,将CR的请求转发给后端的 aggregated server
    • availableConditionController:维护 APIServices 的可用状态,包括其引用 Service 是否可用等
    • autoRegistrationController:用于保持 API 中存在的一组特定的 APIServices
    • crdRegistrationController:负责将 CRD GroupVersions 自动注册到 APIServices 中
    • openAPIAggregationController:将 APIServices 资源的变化同步至提供的 OpenAPI 文档
  • apiserviceRegistrationController 负责根据 APIService 定义的 aggregated server service 构建代理,将CR的请求转发给后端的 aggregated server。apiService 有两种类型:Local(Service为空)以及Service(Service非空)。apiserviceRegistrationController 负责对这两种类型 apiService 设置代理:Local 类型会直接路由给 kube-apiserver 进行处理;而Service类型则会设置代理并将请求转化为对 aggregated Service 的请求(proxyPath := "/apis/" + apiService.Spec.Group + "/" + apiService.Spec.Version),而请求的负载均衡策略则是优先本地访问 kube-apiserver(如果service为kubernetes default apiserver service:443) =>通过 service ClusterIP:Port 访问(默认)或者通过随机选择 service endpoint backend 进行访问:


画图说明aggregator

prometheus-adapter源码分析

代码地址:ht

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值