简述:

在k8s早期版本中,对资源的监控使用的是heapster的资源监控工具。

但是从 Kubernetes 1.8 开始,Kubernetes 通过 Metrics API 获取资源使用指标,例如容器 CPU 和内存使用情况。

这些度量指标可以由用户直接访问,例如通过使用kubectl top 命令,或者使用集群中的控制器。

Metrics API: 通过 Metrics API,您可以获得 node 或 pod 当前的资源使用情况(但是不存储)。

metres-server比 heapster 优势在于: 访问不需要 apiserver 的代理机制,提供认证和授权等; 很多集群内组件依赖它(HPA,scheduler,kubectl top),因此它应该在集群中默认运行;

k8s从1.11版开始,将集群的监控体系、数据的获取机制转移向metrics-server

在集群中,若要获取集群内部的资源使用信息,需要通过metrics-server来实现。

而若要使用metrics-server,就必须创建一个适用于metrics-server的API的资源指标。

因为,集群中自带的API无法直接识别第三方的资源指标。

所以这里就要用到自定义的资源指标API功能

在k8s中,资源指标分两种:

  1.k8s自带的资源指标,也就是说集群内部的资源指标

  2.自定义资源指标,允许用户自定义资源指标来实现用户想要实现的功能

我们可以通过命令:kubectl api-versions来查看集群中已存在的资源指标API

重点说明一下:

metres-server在GitHub项目地址有两个用的比较多的:

  官方稳定版的:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server

  这个不知道是不是官方的,不过使用者也很多:https://github.com/kubernetes-incubator/metrics-server/tree/master/deploy

  首先说一下,其实两种方式的我都部署过,但是官方的最新版的metrics-server:v0.3.3和addon-resizer:1.8.5这两个组件,在默认使用资源清单部署时,试了无数次,镜像下载下来了,但死活Running不起来。

  找了好多文档,看了好多博客,就是起不来,可能是技术还没有到位。为了避免踩坑,这里建议使用早点的release-1.11版本,在:

  https://github.com/kubernetes/kubernetes/tree/release-1.11/cluster/addons/metrics-server这个版本中修改一下资源清单就可以Running起来

  第二个kubernetes-incubator没什么太大问题。

一、使用官方资源清单部署:(release-1.11版)

  1.下载资源清单:

   使用for循环快速下载资源清单:

 for file in auth-delegator.yaml auth-reader.yaml metrics-apiservice.yaml metrics-server-deployment.yaml metrics-server-service.yaml resource-reader.yaml ;do wget https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.11/cluster/addons/metrics-server/$file;done

   2.修改资源清单参数:这里使用的镜像为metrics-server:v0.2.1和addon-resizer:1.8.3

 vim metrics-server-deployment.yaml
......
containers:
- name: metrics-server
image: gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.2.1 #修改镜像仓库地址
command:
- /metrics-server
# - --source=kubernetes.summary_api:'' #注释这行
- --source=kubernetes.summary_api:https://kubernetes.default?kubeletHttps=true&kubeletPort=10250&insecure=true #添加这行表示不验证客户端证书
ports:
- containerPort:
name: https
......
 vim resource-reader.yaml
......
rules:
- apiGroups:
- ""
resources:
- pods
- nodes
- nodes/stats #添加这行,否则无法获取其他节点数据。
- namespaces
......

  3.部署资源清单:

  切换到下载好资源清单的目录下

 kubectl apply -f ./

  4.验证:

    查看集群中是否构建metrics-server的API

 kubectl api-versions
......
metrics.k8s.io/v1beta1
......

   查看metrics-server的pod是否Running

 kubectl get pods -n kube-system
......
NAME READY STATUS RESTARTS AGE
metrics-server-v0.2.1-55c4957fd4-9z65b / Running 8h

     查看kubectl top 命令是否可用:

 [root@K8s-master ~]# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
myapp-deploy-9dc49d6f8-56s7k 0m 2Mi
myapp-deploy-9dc49d6f8-gsw8c 0m 3Mi
myapp-deploy-9dc49d6f8-z6mxv 0m 3Mi
[root@K8s-master ~]# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master 290m % 1027Mi %
k8s-node1 46m % 463Mi %
k8s-node2 47m % 459Mi %

  5.疑问:

  即使pod可以Running起来,即使有metrics-server的API,即使可以使用kubectl top命令,但是addon-resizer:1.8.3容器中的日志依然有报错:

 [root@K8s-master ~]# kubectl logs kube-state-metrics-8578649b5-gj29z -n kube-system -c addon-resizer
ERROR: logging before flag.Parse: I0605 ::09.624889 pod_nanny.go:] Invoked by [/pod_nanny --container=kube-state-metrics --cpu=100m --extra-cpu=1m --memory=100Mi --extra-memory=2Mi --threshold= --deployment=kube-state-metrics]
ERROR: logging before flag.Parse: I0605 ::09.624969 pod_nanny.go:] Watching namespace: kube-system, pod: kube-state-metrics-8578649b5-gj29z, container: kube-state-metrics.
ERROR: logging before flag.Parse: I0605 ::09.624972 pod_nanny.go:] storage: MISSING, extra_storage: 0Gi
ERROR: logging before flag.Parse: I0605 ::09.625799 pod_nanny.go:] Failed to read data from config file "MISSING/NannyConfiguration": open MISSING/NannyConfiguration: no such file or directory, using default parameters
ERROR: logging before flag.Parse: I0605 ::09.625829 pod_nanny.go:] cpu: 100m, extra_cpu: 1m, memory: 100Mi, extra_memory: 2Mi
ERROR: logging before flag.Parse: I0605 ::09.625838 pod_nanny.go:] Resources: [{Base:{i:{value: scale:-} d:{Dec:<nil>} s:100m Format:DecimalSI} ExtraPerNode:{i:{value: scale:-} d:{Dec:<nil>} s:1m Format:DecimalSI} Name:cpu} {Base:{i:{value: scale:} d:{Dec:<nil>} s:100Mi Format:BinarySI} ExtraPerNode:{i:{value: scale:} d:{Dec:<nil>} s:2Mi Format:BinarySI} Name:memory}]

期望有大佬可以给出解释

二、使用kubernetes-incubator的资源清单部署 

  1.下载资源清单(我这里直接克隆整个项目):   

 git clone https://github.com/kubernetes-incubator/metrics-server.git

   2.进入目录,修改资源清单:

 cd metrics-server/deploy/1.8+/
vim metrics-server-deployment.yaml
......
containers:
- name: metrics-server
image: gcr.azk8s.cn/google_containers/metrics-server-amd64:v0.3.3 #修改镜像仓库地址
imagePullPolicy: IfNotPresent
command: #添加这行
- /metrics-server #添加这行
- --kubelet-preferred-address-types=InternalIP #添加这行
- --kubelet-insecure-tls #添加这行表示不验证客户端证书
volumeMounts:
- name: tmp-dir
mountPath: /tmp
 vim resource-reader.yaml
......
rules:
- apiGroups:
- ""
resources:
- pods
- nodes
- namespaces
- nodes/stats #检查是否存在此项,若不存在,则添加
......

  3.部署:

 kubectl apply -f ./

4.验证:

  同上面的验证方式一样,这里不在叙述

    使用这种方式部署成功后,查看容器日志,未发现报错:

 kubectl logs metrics-server-5cf4b94d8b-pllxh -n kube-system
I0605 ::00.513687 serving.go:] Generated self-signed cert (apiserver.local.config/certificates/apiserver.crt, apiserver.local.config/certificates/apiserver.key)
I0605 ::01.126262 secure_serving.go:] Serving securely on [::]:

至此,metrics-server资源监控插件部署完成

k8s资源指标API及metrics-server资源监控的更多相关文章

  1. Kubernetes 学习23 kubernetes资源指标API及自定义指标API

    一.概述 1.上集中我们说到,官方文档提示说从k8s 1.11版本开始,将监控体系指标数据获取机制移向新一代的监控模型.也就意味着对于我们的k8s来讲现在应该有这样两种资源指标被使用.一种是资源指标, ...

  2. 海洋cms自带资源发布api插件和第三方资源站接入办法说明

    海洋cms自带资源发布api插件和第三方资源站接入办法说明 时间:2016-07-15 13:46 来源:CMS模版网 作者:大宇 阅读:7095次 ===海洋cms自带API资源发布插件说明===* ...

  3. k8s之资源指标API部署metrics-server

    1.部署metrics-server 从v1.8开始,引入了新的功能,即把资源指标引入api,资源指标:metrics-server,自定义指标:prometheus,k8s-prometheus-a ...

  4. k8s系列---资源指标API及自定义指标API

    不得不说千万不要随意更改版本,我用的1.13的版本,然后学到这一步时,还因yaml文件不同,卡住了很久,然后各种google才找到解决办法  https://www.linuxea.com/2112. ...

  5. kubernetes学习笔记之十二:资源指标API及自定义指标API

    第一章.前言 以前是用heapster来收集资源指标才能看,现在heapster要废弃了从1.8以后引入了资源api指标监视 资源指标:metrics-server(核心指标) 自定义指标:prome ...

  6. Kubernetes学习之路(二十三)之资源指标和集群监控

    目录 1.资源指标和资源监控 2.Weave Scope监控集群 (1)Weave Scope部署 (2)使用 Scope (3)拓扑结构 (4)实时资源监控 (5)在线操作 (6)强大的搜索功能 2 ...

  7. 十七,k8s集群指标API及自定义API

    目录 资源指标: Metrics-Server 资源指标: Metric-Server介绍 Metric-Server部署 下载yaml文件 因为有墙, 所以提前下载image镜像, 当然也可以手动修 ...

  8. k8s-资源指标API及自定义指标API-二十三

    一. 原先版本是用heapster来收集资源指标才能看,但是现在heapster要废弃了. 从k8s v1.8开始后,引入了新的功能,即把资源指标引入api: 在使用heapster时,获取资源指标是 ...

  9. kubernetes之配置Metrics Server

    Kubernetes 1.8 关于资源使用情况的 metrics,可以通过 Metrics API 获取到, Kubernetes 1.11 已经废弃 heapster.这里我们基于 Kubernet ...

随机推荐

  1. ·ios 圆角

    uiview 直接设置 view.layer.cornerRadius = 5 uiimageview 还需要在设置view.layer.masksToBounds = true .uiview设置这 ...

  2. Table 自定义设置边框线

    table上添加:border-collapse: collapse;//设置表格边框分开显示就可以设置tr td的边框线

  3. CSS样式之操作属性二

    ********css样式之属性操作******** 一.文本属性 1.text-align:cnter 文本居中 2.line heigth 垂直居中 :行高,和高度对应 3.vertical-al ...

  4. 2017ACM/ICPC广西邀请赛 Duizi and Shunzi

    题意:就是一个集合分开,有两种区分 对子:两个相同数字,顺子:连续三个不同数字,问最多分多少个 解法:贪心,如果当前数字不构成顺子就取对子 /2,如果可以取顺子,那么先取顺子再取对子 #include ...

  5. AspnetCore 2.0

    AspnetCore 2.0 本文地址 http://www.cnblogs.com/likeli/p/8204054.html 关于 API文档自动生成,用于对APP端的开发帮助文档生成,默认Pro ...

  6. Net Core迁移到MSBuild

    Net Core迁移到MSBuild平台(二)   阅读目录 一.前言 二.XML定义 三.结语 回到目录 一.前言 在上一篇文章.Net Core迁移到MSBuild的多平台编译问题中,简单的讲了下 ...

  7. Java微信公众平台开发(十一)--微信JSSDK中Config配置

    JSSDK曾经引爆前端以及后端的工程师,其魔性的力量毋庸置疑,在我们的技术眼里它的实现原理和根本是不能够被改变的,这篇文章就不对其js的实现做任何评价和解说了(因为我也不是很懂,哈哈),这里要说的是它 ...

  8. Promise 对象与Generator 函数

    异步编程的方法,大概有下面四种: 回调函数 事件监听 发布/订阅 Promise 对象 传统的编程语言,早有异步编程的解决方案(其实是多任务的解决方案).其中有一种叫做"协程"(c ...

  9. Android 使用RecyclerView实现多行水平分页的GridView效果和ViewPager效果

    前些天看到有人在论坛上问这种效果怎么实现,没写过也没用过这个功能,网上查了一下,大多是使用ViewPager+GridView或者HorizontalScrollView+GridView实现,不过貌 ...

  10. Hadoop 2.7.0模拟分布式实验环境搭建[亲测]

    实验目的: 本实验通过在PC电脑上同时运行3个虚拟机,一个为master节点,两个slave节点.    搭建环境: 主机:mac os 10.10   OS:CenOS 6.5 虚拟机:VMware ...