概述

从 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相关推荐

  1. Kubernetes基于Metrics Server的HPA

    Kubernetes基于Metrics Server的HPA [TOC] 1. 环境说明和相关介绍 我的kubernetes环境: kubeadm安装的kubernetes1.11 Horizonta ...

  2. Kubernetes — 安装 Metrics Server

    目录 文章目录 目录 Kubernetes Metrics Server 启用 API Aggregator 安装 Metrics Server Kubernetes Metrics Server K ...

  3. k8s搭建监控:安装metrics server和dashboard

    安装metrics server 参考:https://github.com/kubernetes-sigs/metrics-server kubectl  create -f components. ...

  4. Easypack: Ansible方式部署工具中增加Metrics Server支持

    在Easypack中提供了多套Kubernetes快速部署的工具,基于Bash脚本和Ansible的,Ansible的方式也有基于K3S和普通的Kubernetes的两种.这篇文章介绍一下普通Kube ...

  5. Metrics Server安装以及报错解决

    在查看kubernetes的测试环境中,使用top命令查看Pod的CPU.内存使用过程中,遇到以下问题: $ kubectl top po W0818 03:22:46.090578 26207 to ...

  6. k8s 1.14部署metrics server显示running但是报ServiceUnavailable错误

    k8s 1.14部署metrics server显示running但是报ServiceUnavailable错误 查看metrics server日志: [root@master metrics-se ...

  7. 安装 Metrics server

    安装 Metrics server Metrics Server 是 Kubernetes 内置自动缩放管道的可扩展.高效的容器资源指标来源. Metrics Server 从 Kubelets 收集 ...

  8. 【K8S 七】Metrics Server部署中的问题

    目录 填坑过程 问题一:启动metrics server报证书错误:x509: cannot validate certificate for x.x.x.x because it doesn't c ...

  9. Kubernetes 【监控】1. Metrics Server、Aggregator APIServer和Prometheus监控体系

    文章目录 1. 背景 2. 简介 3. 监控对象类型 4. Metrics Server简介 5. Metrics Server部署 5.1 下载并解压Metrics-Server 5.2 修改Met ...

  10. java metrics 简书_Metrics Server 安装

    #什么是metrics-server? kubernetes 集群资源监控之前可以通过 heapster 来获取数据,在 1.11 开始开始逐渐废弃 heapster 了,采用 metrics-ser ...

最新文章

  1. 解析并符号 读取dll_Spring IOC容器之XmlBeanFactory启动流程分析和源码解析
  2. 《HFSS电磁仿真设计从入门到精通》一第2章 入门实例——T形波导的内场分析和优化设计...
  3. Unity 2D游戏开发快速入门(内部资料)
  4. 开源项目_可能使用到的开源项目集合
  5. 软件体系结构的风格(转载)
  6. 2020CCPC威海
  7. 北京矿大计算机考研每年分数线,2021中国矿业大学北京考研国家线公布时间_国家线是多少分...
  8. oracle 数据库新建实例导入数据
  9. linux PHP卸载不了
  10. python 交集_Python设置交集
  11. 【CV学习笔记】OpenCV基本操作
  12. Postgresql----libpq
  13. PR短视频特效转场 快速画面分割视频转场过渡PR转场模板
  14. 矩阵的矩阵指数函数_精通R编程:使用包,创建对象和基本矩阵函数
  15. if条件句有大括号和没有大括号的区别
  16. Java中成员变量和局部变量在内存中的分配
  17. iPad/iPhone与电脑共享文件
  18. 如何做好团队测试建设
  19. OpenGL ES总结(一)OpenGL 初识
  20. IE主页被恶意修改处理办法

热门文章

  1. 基于图像去雾处理的雾霾污染程度评估(任务书+lunwen+翻译及原文+答辩PPT)
  2. 计算机语言 帕斯卡,用帕斯卡语言编程
  3. macOS下 wacom “安全设置阻止Wacom软件发布事件”错误的解决方法
  4. html随机出现一张图片,图片随机飘动用html怎么做
  5. 2020你好,2020再见
  6. constraint PK_LDBACKUPTEXTINFO primary key (xx) using index tablespace lisi
  7. day4 高阶函数 嵌套函数 装饰器 内置函数 列表生成式 迭代器 生成器
  8. 为什么我认识的机械工程师都抱怨工资低?
  9. 一位真正的好人却永远走了
  10. 网易前端微专业课程讨论区问答精选