文章采集api(MetricsAPI介绍Metrics-Server之前,必须要提一下API的概念)
优采云 发布时间: 2021-11-12 11:22文章采集api(MetricsAPI介绍Metrics-Server之前,必须要提一下API的概念)
概述
从v1.8开始,可以通过Metrics API的形式获取资源使用监控。具体的组件是Metrics Server,用来替代之前的heapster。heapster 从 1.11 开始逐渐被废弃。
Metrics-Server 是集群核心监控数据的聚合器。从Kubernetes1.8开始,在kube-up.sh脚本创建的集群中默认部署为Deployment对象。如果是其他部署方式,则需要单独安装。, 或者咨询相应的云厂商。
指标 API
在介绍 Metrics-Server 之前,不得不提一下 Metrics API 的概念
与之前的监控采集方法(hepaster)相比,Metrics API是一个全新的思路。官方希望核心指标的监控稳定,版本可控,用户可以直接访问(比如使用kubectl top命令),或者集群中的控制器(比如HPA)使用,就像其他Kubernetes一样蜜蜂。
官方放弃heapster项目,是将核心资源监控当成一等公民,即通过api-server或client直接访问,如pod和service,而不是安装一个heapster,由heapster单独采集和管理。
假设我们为每个pod和节点采集10个指标,从k8s的1.6开始,支持5000个节点和每个节点30个pod,假设采集的粒度为每分钟一次,那么:
10 x 5000 x 30 / 60 = 25000 平均每分钟2万多个采集指标
因为k8s的api-server将所有数据持久化在etcd中,显然k8s本身无法处理采集的这种频率,而且这种监控数据变化很快,而且是临时数据,所以需要单独的组件来处理,k8s版本只是部分存储在内存中,因此metric-server的概念诞生了。
其实Hepaster已经暴露了API,但是Kubernetes的用户和其他组件必须通过master代理访问,而且Hepaster的接口不像api-server那样有完整的认证和客户端集成。这个api还在alpha阶段(8月18日),希望能达到GA阶段。以 api-server 风格编写:通用 apiserver
有了Metrics Server组件,采集已经到达需要的数据,暴露了api,但是因为api需要统一,如何将请求转发到api-server /apis/metrics请求到Metrics Server ? 解决方案即:kube-aggregator,在k8s的1.7中已经完成。Metrics Server 之前没有发布,在 kube-aggregator 的步骤中延迟了。
kube-aggregator(聚合api)主要提供:
详细设计文档:参考链接
metric api的使用:
喜欢:
http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes
http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes/
http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/namespace//pods/
度量服务器
Metrics 服务器定期从 Kubelet 的 Summary API(类似于 /ap1/v1/nodes/nodename/stats/summary)获取指标信息采集。这些聚合后的数据会存储在内存中,并以metric-api的形式暴露出去。
Metrics server复用api-server库来实现自己的功能,比如认证、版本等,为了将数据存储在内存中,去掉默认的etcd存储,引入内存存储(即实现Storage接口)。因为是存储在内存中,所以监控数据不是持久化的,可以通过第三方存储进行扩展,与heapster一致。
Metrics服务器出现后,新的Kubernetes监控架构将如上图所示
官方地址:
用
如上所述,metric-server是一个扩展的apiserver,依赖kube-aggregator,所以需要在apiserver中开启相关参数。
--requestheader-client-ca-file=/etc/kubernetes/certs/proxy-ca.crt
--proxy-client-cert-file=/etc/kubernetes/certs/proxy.crt
--proxy-client-key-file=/etc/kubernetes/certs/proxy.key
--requestheader-allowed-names=aggregator
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
安装文件下载地址:1.8+,注意修改镜像地址为国内镜像
kubectl create -f metric-server/
安装成功后访问地址api地址为:
Metrics Server 的资源消耗会随着集群中 Pod 数量的不断增长而不断上升,因此需要
插件调整器垂直缩放这个容器。addon-resizer 根据集群中的节点数对 Metrics Server 进行线性扩展,以确保其能够提供完整的指标 API 服务。具体参考:链接
其他
基于 Metrics Server 的 HPA:参考链接
在kubernetes新的监控系统中,metrics-server属于Core metrics,提供API metrics.k8s.io,只提供Node和Pod的CPU和内存使用情况。Other Custom Metrics(自定义指标)由Prometheus等组件完成,后续文章会对自定义指标进行分析。
本文为容器监控实践系列文章,完整内容请看:container-monitor-book