从 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单独管理。
Metrics server出现后,新的Kubernetes监控架构将变成上图的样子
核心流程(黑色部分):这是 Kubernetes正常工作所需要的核心度量,从 Kubelet、cAdvisor 等获取度量数据,再由metrics-server提供给Dashboard、HPA控制器等使用。
监控流程(蓝色部分):基于核心度量构建的监控流程,比如Prometheus可以从metrics-server获取核心度量,从其他数据源(如Node Exporter等)获取非核心度量,再基于它们构建监控告警系统。
二、安装部署metrics-server
1、克隆配置文件:
[root@k8s-master ~]# git clone https://github.com/kubernetes-incubator/metrics-server
2、拉去镜像
[root@k8s-node-1 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
[root@k8s-node-1 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 k8s.gcr.io/metrics-server-amd64:v0.3.6
[root@k8s-node-1 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
3、修改配置文件
[root@k8s-master ~]# vim metrics/metrics-server-deployment.yaml
修改:
containers:
- name: metrics-server
image: k8s.gcr.io/metrics-server-amd64:v0.3.6
command:
- /metrics-server
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
imagePullPolicy: IfNotPresent
args:
- --cert-dir=/tmp
- --secure-port=4443
[root@k8s-master ~]# kubectl apply -f metrics/
[root@k8s-master ~]# kubectl get pods --namespace=kube-system -o wide
三、测试
1、使用Kubectl测试
(1)查看节点监控数据
[root@k8s-master ~]# kubectl top nodes
(2)查看Pod监控数据
[root@k8s-master ~]# kubectl top pods
2、使用Proxy代理接口测试
[root@k8s-master ~]# kubectl proxy --port=8081 &
[root@k8s-master ~]# curl http://localhost:8081/apis/metrics.k8s.io/v1beta1/nodes
[root@k8s-master ~]# curl http://localhost:8081/apis/metrics.k8s.io/v1beta1/pods