了解Metrics之前先了解kubectl自带的一个top
命令,它是显示资源利用率的,包括cpu,内存和存储。
通过kubectl top --help
了解到top
命令有两个子命令,支持pod和node这两个维度去查看。
当我们使用kubectl top node
和kubectl top pod
命令时报错:
其实这个原因是top
命令是需要调用一个资源的,该资源恰好提供了cpu或者内存的信息,而提供这个资源的就是报错信息中所提到的heapster
,这个heapster
是一个k8s早期的监控组件,为top提供数据来源,之后这个组件被完全弃用,官方社区研发了一个新的组件来替换它,替代者就是Metrics-server
,它的功能就是一个聚合器,Metrics-server
并不直接采集cpu等监控数据,它是从cadvisor
组件中去聚合响应的监控数据,cadvisor
已经内置到k8s agent中了,所以我们只需要安装Metrics-server
即可
部署方式
# 下载所需文件
git clone https://github.com/kubernetes-incubator/metrics-server
cd metrics-server/deploy/kubernetes
# 编辑替换源地址并添加参数
vi metrics-server-deployment.yaml
# 修改镜像地址并添加最后两行参数
···
containers:
- name: metrics-server
image: lizhenliang/metrics-server-amd64:v0.3.1
imagePullPolicy: IfNotPresent
args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
···
# 应用所有 yaml文件
kubectl apply -f .
# 查看metrics-server状态
kubectl get pod -n kube-system
# 查看metrics-server是否注册到apiservice中
kubectl get apiservice
添加参数说明:
--kubelet-insecure-tls
:让metrics-server以非https安全方式连接kubectl--kubelet-preferred-address-types
:让metrics-server不用主机名而使用节点实际的IP地址连接kubelet
若网络访问慢,也可直接下载本站压缩包,点击下载
wget https://leif.fun/downloads/kubernetes/metrics-server.zip
unzip metrics-server.zip
cd metrics-server
kubectl apply -f .
文件功能介绍:
metrics-server-deployment.yaml
:部署metrics服务metrics-server-service.yaml
:暴露metrics服务metrics-apiservice.yaml
:把metrics服务注册到k8s的api中- 其他文件:授权访问
接下来就可以正常使用top命令查看资源状态了
注意:1000m=1c
总结
监控流程:kubectl top
-> apiserver
-> metrics-server pod
-> kubectl(cadvisor)