Kubernetes监控集群资源利用率(Metrics-server+cAdvisor)

了解Metrics之前先了解kubectl自带的一个top命令,它是显示资源利用率的,包括cpu,内存和存储。
image.png

通过kubectl top --help了解到top命令有两个子命令,支持pod和node这两个维度去查看。

image.png

当我们使用kubectl top nodekubectl top pod命令时报错:

image.png

其实这个原因是top命令是需要调用一个资源的,该资源恰好提供了cpu或者内存的信息,而提供这个资源的就是报错信息中所提到的heapster,这个heapster是一个k8s早期的监控组件,为top提供数据来源,之后这个组件被完全弃用,官方社区研发了一个新的组件来替换它,替代者就是Metrics-server,它的功能就是一个聚合器,Metrics-server并不直接采集cpu等监控数据,它是从cadvisor组件中去聚合响应的监控数据,cadvisor已经内置到k8s agent中了,所以我们只需要安装Metrics-server即可

image.png

部署方式

# 下载所需文件
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命令查看资源状态了

image.png

注意:1000m=1c

总结

监控流程:kubectl top -> apiserver-> metrics-server pod -> kubectl(cadvisor)

posted @ 2021-01-18 10:11  CloudNativeBJ  阅读(820)  评论(0编辑  收藏  举报