千家信息网

监控资源指标管道 Metrics API的用法

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,资源指标管道:从 Kubernetes 1.8开始,资源使用指标,例如容器 CPU 和内存使用率,可通过 Metrics API 在 Kubernetes 中获得。这些指标可以直接被用户访问,比如使用
千家信息网最后更新 2025年02月03日监控资源指标管道 Metrics API的用法
  • 资源指标管道:
    从 Kubernetes 1.8开始,资源使用指标,例如容器 CPU 和内存使用率,可通过 Metrics API 在 Kubernetes 中获得。这些指标可以直接被用户访问,比如使用kubectl top命令行,或者这些指标由集群中的控制器使用,例如,Horizontal Pod Autoscaler,使用这些指标来做决策;
  • Metrics API:
    通过 Metrics API,您可以获得指定节点或 pod 当前使用的资源量。此 API 不存储指标值,因此想要获取某个指定节点10分钟前的资源使用量是不可能的;
  • Metrics API 仓库:
    API源码GitHub仓库地址:
  • Metrics Server:
    Metrics Server是一种API Server。其提供了核心的Metrics API,通过在主 API server 中注册的 Metrics Server Kubernetes 聚合器来采集指标信息,就像k8s组件kube-apiserver提供了很多API群组一样,但它不是k8s组成部分,而是运行在k8s之上的单个Pod;
    为了让用户无缝的使用Metrics Server当中的API,还需要把这类自定义的API通过聚合器聚合到核心API组里,然后可以把此API当作是核心API的一部分并且通过kubectl api-versions可直接查看;
    Metrics Server 收集指标数据的方式是从各节点上kubelet提供的Summary API 即10250端口收集数据,收集Node和Pod核心资源指标数据,主要是内存和cpu方面的使用情况,并将收集的信息存储在内存中;
  • 您需要部署它,否则在集群中将不可用
    Metrics API 需要在集群中部署 Metrics Server。否则它将不可用;

在Kubernetes集群中部署 Metrics API(Metrics Server)

  • k8s新一代架构
    核心指标流水线:kubelet、metrics-server、api-server提供的api组成,统计cpu累计使用率、内存实时使用率、Pod资源占用率及容器的磁盘占用率;
    监控流水线:用于从系统收集各种指标数据并提供终端用户、存储系统及HPA,它们包含核心指标及许多非核心指标。非核心指标本身不能被k8s所解析;
  • 部署手册参考
    我部署metrics-server参考的官方站点
  • 从官方站点下载部署metrics server所需的yaml文件
    使用for循环下载
[root@node1 metrics]# lltotal 24-rw-r--r-- 1 root root  398 Feb 28 03:30 auth-delegator.yaml-rw-r--r-- 1 root root  419 Feb 28 03:30 auth-reader.yaml-rw-r--r-- 1 root root  388 Feb 28 03:30 metrics-apiservice.yaml-rw-r--r-- 1 root root 3252 Feb 28 03:30 metrics-server-deployment.yaml-rw-r--r-- 1 root root  336 Feb 28 03:30 metrics-server-service.yaml-rw-r--r-- 1 root root  795 Feb 28 03:30 resource-reader.yaml[root@node1 metrics]# 
  • 修改metrics-server-deployment.yaml文件
    修改容器当中的自定义变量资源限制,不然无法running;
command: //此处修改    - /metrics-server    - --metric-resolution=30s    # These are needed for GKE, which doesn't support secure communication yet.    # Remove these lines for non-GKE clusters, and when GKE supports token-based auth.    - --kubelet-port=10250    #- --deprecated-kubelet-completely-insecure=true    - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIPcommand: //此处修改    - /pod_nanny    - --config-dir=/etc/config    - --cpu=5m    - --extra-cpu=0.5m    - --memory=80Mi    - --extra-memory=8Mi    - --threshold=5    - --deployment=metrics-server-v0.3.6    - --container=metrics-server    - --poll-period=300000    - --estimator=exponential    # Specifies the smallest cluster (defined in number of nodes)    # resources will be scaled to.    #- --minClusterSize={{ metrics_server_min_cluster_size }}
  • 修改resource-reader.yaml文件
    添加nodes/stats
rules:- apiGroups:  - ""  resources:  - pods  - nodes  - namespaces  - nodes/stats
  • 提前下载镜像文件,在各个node节点上
    参考脚本
[root@node2 ~]# cat pull-metrics.sh #!/bin/bash#docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer:1.8.7docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 k8s.gcr.io/metrics-server-amd64:v0.3.6docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer:1.8.7 k8s.gcr.io/addon-resizer:1.8.7docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer:1.8.7[root@node2 ~]# 
  • Metrics Server 应用构建
    不可重复构建
[root@node1 metrics]# kubectl apply -f ./clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator createdrolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader createdapiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io createdserviceaccount/metrics-server createdconfigmap/metrics-server-config createddeployment.apps/metrics-server-v0.3.6 createdservice/metrics-server createdclusterrole.rbac.authorization.k8s.io/system:metrics-server createdclusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created[root@node1 metrics]# [root@node1 ~]# kubectl get pods -n kube-systemNAME                                                         READY   STATUS    RESTARTS   AGEmetrics-server-v0.3.6-cf56dfd4-mj7p2        2/2        Running           0            22s
  • 测试等待结果
    有的时候需等待一会,才能刷出数据来
[root@node1 ~]# kubectl top nodesNAME    CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   node1   137m         6%     1043Mi          69%       node2   21m          2%     333Mi           20%       node3   23m          2%     343Mi           28% 
  • 通过接口访问节点资源信息路径

查看node资源指标

[root@node1 metrics]# kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq  | less

查看pods资源指标

[root@node1 metrics]# kubectl get --raw "/apis/metrics.k8s.io/v1beta1/pods" | jq  | less
0