Kubernetes集群之Metrics Server资源指标监控
前言 在学习Kubernetes时,关于kubectl top命令查看不了工作节点或者Pod对象的资源使用情况,出现报错"error: Metrics API not available"。查看官方文档才发现这一个资源指标监控工具默认是没有部署的,需要手动部署。下面就简单了解一下这个工具是什么?有什么用?怎么安装?怎
前言
在学习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.x | metrics.k8s.io/v1beta1 | *1.19+ |
0.5.x | metrics.k8s.io/v1beta1 | *1.8+ |
0.4.x | metrics.k8s.io/v1beta1 | *1.8+ |
0.3.x | metrics.k8s.io/v1beta1 | 1.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更多功能的体验,后面会持续更新。
更多推荐
所有评论(0)