Metrics-server
概述
从 v1.8 开始,资源使用情况的监控可以通过 Metrics API的形式获取,具体的组件为Metrics Server,用来替换之前的heapster,heapster从1.11开始逐渐被废弃。
Metrics-Server是集群核心监控数据的聚合器,从 Kubernetes1.8 开始,它作为一个 Deployment对象默认部署在由kube-up.sh脚本创建的集群中,如果是其他部署方式需要单独安装,或者咨询对应的云厂商。
Metrics API
介绍Metrics-Server之前,必须要提一下Metrics API的概念
Metrics API相比于之前的监控采集方式(hepaster)是一种新的思路,官方希望核心指标的监控应该是稳定的,版本可控的,且可以直接被用户访问(例如通过使用 kubectl top 命令),或由集群中的控制器使用(如HPA),和其他的Kubernetes APIs一样。
官方废弃heapster项目,就是为了将核心资源监控作为一等公民对待,即像pod、service那样直接通过api-server或者client直接访问,不再是安装一个hepater来汇聚且由heapster单独管理。
假设每个pod和node我们收集10个指标,从k8s的1.6开始,支持5000节点,每个节点30个pod,假设采集粒度为1分钟一次,则:
10 x 5000 x 30 / 60 = 25000 平均每分钟2万多个采集指标
因为k8s的api-server将所有的数据持久化到了etcd中,显然k8s本身不能处理这种频率的采集,而且这种监控数据变化快且都是临时数据,因此需要有一个组件单独处理他们,k8s版本只存放部分在内存中,于是metric-server的概念诞生了。
其实hepaster已经有暴露了api,但是用户和Kubernetes的其他组件必须通过master proxy的方式才能访问到,且heapster的接口不像api-server一样,有完整的鉴权以及client集成。这个api现在还在alpha阶段(18年8月),希望能到GA阶段。类api-server风格的写法:generic apiserver
有了Metrics Server组件,也采集到了该有的数据,也暴露了api,但因为api要统一,如何将请求到api-server的/apis/metrics
请求转发给Metrics Server呢,解决方案就是:kube-aggregator,在k8s的1.7中已经完成,之前Metrics Server一直没有面世,就是耽误在了kube-aggregator这一步。
kube-aggregator(聚合api)主要提供:
- Provide an API for registering API servers.
- Summarize discovery information from all the servers.
- Proxy client requests to individual servers.
详细设计文档:参考链接
metric api的使用:
Metrics API 只可以查询当前的度量数据,并不保存历史数据
Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护
必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据
如:
http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodeshttp://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes/<node-name>http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/namespace/<namespace-name>/pods/<pod-name>
Metrics-Server
Metrics server定时从Kubelet的Summary API(类似/ap1/v1/nodes/nodename/stats/summary)采集指标信息,这些聚合过的数据将存储在内存中,且以metric-api的形式暴露出去。
Metrics server复用了api-server的库来实现自己的功能,比如鉴权、版本等,为了实现将数据存放在内存中吗,去掉了默认的etcd存储,引入了内存存储(即实现Storage interface)。因为存放在内存中,因此监控数据是没有持久化的,可以通过第三方存储来拓展,这个和heapster是一致的。
image.png
Metrics server出现后,新的Kubernetes 监控架构将变成上图的样子
核心流程(黑色部分):这是 Kubernetes正常工作所需要的核心度量,从 Kubelet、cAdvisor 等获取度量数据,再由metrics-server提供给 Dashboard、HPA 控制器等使用。
监控流程(蓝色部分):基于核心度量构建的监控流程,比如 Prometheus 可以从 metrics-server 获取核心度量,从其他数据源(如 Node Exporter 等)获取非核心度量,再基于它们构建监控告警系统。
官方地址:https://github.com/kubernetes-incubator/metrics-server
开启聚合层(Aggregation Layer)
关于聚合层的一些知识
聚合层运行在apiserver进程内部,允许用户为集群安装额外的Kubernetes风格的API,扩展core API的功能。聚合层需要启动apiserver的时候开启方可使用。
在用户注册扩展资源之前,聚合层什么也不做。用户要注册API,必需向系统中添加一个APIService对象,用来声明API的URL路径以及处理请求的后端APIService。此后,聚合层会将发往那个路径的所有请求(e.g. /apis/myextension.mycompany.io/v1/…)都转发给注册的APIService。
一般情况下,APIService对象以extension-apiserver运行在集群中的一个pod中,如果需要主动管理添加的资源,extension-apiserver还需要与一个或多个controlller进行关联,apiserver-builder为双方提供了一个框架。
Service Catalog是Kubernetes的一种API扩展实现,方便Kubernetes集群内部应用访问集群外部、由第三方管理、提供的服务,如由云供应商提供的数据库服务。Service Catalog的安装会为它所提供的服务提供extension-apiserver和controller两个扩展组件。
开启聚合层
修改apiserver配置文件,加入如下启动参数来启用aggregation layer:
--requestheader-client-ca-file=/etc/kubernetes/ssl/ca.pem
--requestheader-allowed-names=aggregator
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
---------------------
使用
如上文提到的,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/
image
安装成功后,访问地址api地址为:
image
Metrics Server的资源占用量会随着集群中的Pod数量的不断增长而不断上升,因此需要
addon-resizer垂直扩缩这个容器。addon-resizer依据集群中节点的数量线性地扩展Metrics Server,以保证其能够有能力提供完整的metrics API服务。具体参考:链接
其他
基于Metrics Server的HPA:参考链接
kubernetes的新监控体系中,metrics-server属于Core metrics(核心指标),提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况。而其他Custom Metrics(自定义指标)由Prometheus等组件来完成,后续文章将对自定义指标进行解析。
本文为容器监控实践系列文章,完整内容见:container-monitor-book
https://www.jianshu.com/p/7cf4ca422c1b
Metrics-server相关推荐
- Kubernetes基于Metrics Server的HPA
Kubernetes基于Metrics Server的HPA [TOC] 1. 环境说明和相关介绍 我的kubernetes环境: kubeadm安装的kubernetes1.11 Horizonta ...
- Kubernetes — 安装 Metrics Server
目录 文章目录 目录 Kubernetes Metrics Server 启用 API Aggregator 安装 Metrics Server Kubernetes Metrics Server K ...
- k8s搭建监控:安装metrics server和dashboard
安装metrics server 参考:https://github.com/kubernetes-sigs/metrics-server kubectl create -f components. ...
- Easypack: Ansible方式部署工具中增加Metrics Server支持
在Easypack中提供了多套Kubernetes快速部署的工具,基于Bash脚本和Ansible的,Ansible的方式也有基于K3S和普通的Kubernetes的两种.这篇文章介绍一下普通Kube ...
- Metrics Server安装以及报错解决
在查看kubernetes的测试环境中,使用top命令查看Pod的CPU.内存使用过程中,遇到以下问题: $ kubectl top po W0818 03:22:46.090578 26207 to ...
- k8s 1.14部署metrics server显示running但是报ServiceUnavailable错误
k8s 1.14部署metrics server显示running但是报ServiceUnavailable错误 查看metrics server日志: [root@master metrics-se ...
- 安装 Metrics server
安装 Metrics server Metrics Server 是 Kubernetes 内置自动缩放管道的可扩展.高效的容器资源指标来源. Metrics Server 从 Kubelets 收集 ...
- 【K8S 七】Metrics Server部署中的问题
目录 填坑过程 问题一:启动metrics server报证书错误:x509: cannot validate certificate for x.x.x.x because it doesn't c ...
- Kubernetes 【监控】1. Metrics Server、Aggregator APIServer和Prometheus监控体系
文章目录 1. 背景 2. 简介 3. 监控对象类型 4. Metrics Server简介 5. Metrics Server部署 5.1 下载并解压Metrics-Server 5.2 修改Met ...
- java metrics 简书_Metrics Server 安装
#什么是metrics-server? kubernetes 集群资源监控之前可以通过 heapster 来获取数据,在 1.11 开始开始逐渐废弃 heapster 了,采用 metrics-ser ...
最新文章
- 解析并符号 读取dll_Spring IOC容器之XmlBeanFactory启动流程分析和源码解析
- 《HFSS电磁仿真设计从入门到精通》一第2章 入门实例——T形波导的内场分析和优化设计...
- Unity 2D游戏开发快速入门(内部资料)
- 开源项目_可能使用到的开源项目集合
- 软件体系结构的风格(转载)
- 2020CCPC威海
- 北京矿大计算机考研每年分数线,2021中国矿业大学北京考研国家线公布时间_国家线是多少分...
- oracle 数据库新建实例导入数据
- linux PHP卸载不了
- python 交集_Python设置交集
- 【CV学习笔记】OpenCV基本操作
- Postgresql----libpq
- PR短视频特效转场 快速画面分割视频转场过渡PR转场模板
- 矩阵的矩阵指数函数_精通R编程:使用包,创建对象和基本矩阵函数
- if条件句有大括号和没有大括号的区别
- Java中成员变量和局部变量在内存中的分配
- iPad/iPhone与电脑共享文件
- 如何做好团队测试建设
- OpenGL ES总结(一)OpenGL 初识
- IE主页被恶意修改处理办法
热门文章
- 基于图像去雾处理的雾霾污染程度评估(任务书+lunwen+翻译及原文+答辩PPT)
- 计算机语言 帕斯卡,用帕斯卡语言编程
- macOS下 wacom “安全设置阻止Wacom软件发布事件”错误的解决方法
- html随机出现一张图片,图片随机飘动用html怎么做
- 2020你好,2020再见
- constraint PK_LDBACKUPTEXTINFO primary key (xx) using index tablespace lisi
- day4 高阶函数 嵌套函数 装饰器 内置函数 列表生成式 迭代器 生成器
- 为什么我认识的机械工程师都抱怨工资低?
- 一位真正的好人却永远走了
- 网易前端微专业课程讨论区问答精选