前言

       在学习Kubernetes时,关于kubectl top命令查看不了工作节点或者Pod对象的资源使用情况,出现报错"error: Metrics API not available"。查看官方文档才发现这一个资源指标监控工具默认是没有部署的,需要手动部署。下面就简单了解一下这个工具是什么?有什么用?怎么安装?怎么用?


一、Metrics Server是什么?

从两篇官方文档大概了解Metrics Server是什么,用来干嘛的:
https://kubernetes.io/zh/docs/tasks/debug-application-cluster/resource-metrics-pipeline/
https://github.com/kubernetes-sigs/metrics-server/
Metrics Server:资源指标监控服务器,是Kubernetes内置可扩展、高效的容器资源指标来源。例如Pod中容器或工作节点的CPU 和内存使用率,可通过Metrics API 在 Kubernetes 中获得。并且可结合HPA(Horizontal Pod Autoscalers)实现Pod资源的自动伸缩。


二、Metrics Server API是什么?

      Metrics Server从Kubelet API 收集指标,通过Kubernetes聚合器注册在Master API Server中。为集群提供Node、Pods资源利用率指标。当我们使用kubectl top对资源获取指标,Metrics Server一般会有以下几步操作:
发起获取指标数据:kubectl top --> api server–> Metrics Server -->kubelet(cadvisor)–>pod
返回指标数据:pod–>kubelet–>Metrics Server api–>api server–>client


三、Metrics Server性能与功能

  • 适用于大多数集群的单一部署
  • 快速自动缩放,每 15 秒收集一次指标
  • 资源消耗少,为集群中的每个节点使用1毫厘CPU 内核和 2 MB 内存
  • 可扩展支持多达 5,000 个节点集群
  • 基于 CPU/内存的水平自动缩放
  • 自动调整/建议容器所需的资源

四、Metrics Server版本兼容性

Metrics Server版本Metrics API 组/版本支持的 Kubernetes 版本
0.6.xmetrics.k8s.io/v1beta1*1.19+
0.5.xmetrics.k8s.io/v1beta1*1.8+
0.4.xmetrics.k8s.io/v1beta1*1.8+
0.3.xmetrics.k8s.io/v1beta11.8-1.21

五、Kubernetes 1.20安装Metrics Server

Metrics Server版本更新记录:https://github.com/kubernetes-sigs/metrics-server/releases

5.1 下载yaml文件

[root@k8s-master ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.0/components.yaml

5.2 修改yaml文件

主要修改三个地方:
      由于官方的yaml文件默认拉取镜像的地址是k8s.gcr.io的,国内无法访问,因此需要修改镜像拉取地址。
      由于Metrics Server默认是基于https通信,因此在kubelet组件与它通信时,需要配置不验证https证书。添加–kubelet-insecure-tls参数,不验证kubelet提供的https证书
      修改metrics-server容器监听的端口为1000以上

[root@k8s-master ~]# mv components.yaml metrics-server.yaml	#修改yaml文件名称
[root@k8s-master ~]# vim metrics-server.yaml
- --secure-port=443		修改为	- --secure-port=4443
- containerPort: 443	修改为	- containerPort: 4443
image: k8s.gcr.io/metrics-server/metrics-server:v0.5.0	修改为	registry.cn-shenzhen.aliyuncs.com/zengfengjin/metrics-server:v0.5.0
添加- --kubelet-insecure-tls

在这里插入图片描述
      其中registry.cn-shenzhen.aliyuncs.com/zengfengjin/metrics-server:v0.5.0为我自己在阿里云的镜像仓库里面拉取metrics-server:v0.5.0的镜像。
      由于Pod需要监听1000以下的端口需要root权限,如果不修改- --secure-port与containerPort的值大于1000的话,在启动容器时会报错:"panic: failed to create listener: failed to listen on 0.0.0.0:443: listen tcp 0.0.0.0:443: bind: permission denied
"


5.3 创建metrics-server

[root@k8s-master ~]# kubectl apply -f metrics-server.yaml
[root@k8s-master ~]# kubectl get pods metrics-server -n kube-system		
#yaml文件部署的metrics-server,pod对象会隶属于kube-system命名空间下。因此在查看metrics-server pod对象时需要加-n指定命名空间

在这里插入图片描述

[root@k8s-master ~]# kubectl describe pods metrics-server-d8765cc78-krkz2 -n kube-system	#查看metrics-server创建过程

在这里插入图片描述

[root@k8s-master ~]# kubectl logs metrics-server-d8765cc78-krkz2 -n kube-system	#查看启动过程

在这里插入图片描述


5.4 查看node与pod资源利用率

CPU单位换算:可以写m也可以写浮点数,例如0.5=500m,1=1000m

[root@k8s-master ~]# kubectl top nodes

在这里插入图片描述

[root@k8s-master ~]# kubectl top pods -n kube-system	#查看kube-system下各个pod的资源利用率

在这里插入图片描述

关于Metrics Server更多功能的体验,后面会持续更新。

Logo

开源、云原生的融合云平台

更多推荐