metrics-server

metrics-server

简介

metrics-server 是 kubernetes 内置的容器资源指标来源;

从Kubernetes v1.8 开始,资源使用情况的监控可以通过 Metrics API的形式获取,例如容器CPU和内存使用率。这些度量指标可以由用户直接访问(例如,通过使用kubectl top命令),或者由集群中的控制器(例如,Horizontal Pod Autoscaler)使用来进行决策,具体的组件为Metrics Server,用来替换之前的heapster,heapster从1.11开始逐渐被废弃。

Metrics-Server是集群核心监控数据的聚合器。它存储了集群中各节点的监控数据,并且通过aggregate api向其它组件(kube-scheduler、HorizontalPodAutoscaler、Kubernetes集群客户端等)提供集群中的pod和node的cpu和memory的监控指标;

Metrics-Server作为一个 Deployment对象默认部署在Kubernetes集群中

Metrics Server 可以支持多达 5000 个集群节点,每个节点的资源占用率非常低,Metrics Server 在每个节点上占用 0.5m CPU 和 4M 内存。

注意:

  1. metric-server提供的是实时的指标(实际是最近一次采集的数据,保存在内存中),并没有数据库来存储
  2. 这些数据指标并非由metric-server本身采集,而是由每个节点上的cadvisor采集,metric-server只是发请求给cadvisor并将metric格式的数据转换成aggregate api
  3. 由于需要通过aggregate api来提供接口,需要集群中的kube-apiserver开启该功能

流程

Metrics server定时从 Kubelet(cAdvisor) 的Summary API(类似/ap1/v1/nodes/nodename/stats/summary)采集指标信息,这些聚合过的数据将存储在内存中,且以metric-api的形式暴露出去;

image-资源指标图

图中从右到左的架构组件包括以下内容:

  • cAdvisor: 用于收集、聚合和公开 Kubelet 中包含的容器指标的守护程序。

    PS:

    1. cAdvisor 支持从 cgroups 读取指标,它适用于 Linux 上的典型容器运行时。 如果你使用基于其他资源隔离机制的容器运行时,例如虚拟化,那么该容器运行时必须支持 CRI 容器指标 以便 kubelet 可以使用指标。
    2. k8s 1.7 以前会在每个节点上安装 cAdvisor; 从 1.7 以后, cAdvisor 集成到 kubelet 中。
  • kubelet: 用于管理容器资源的节点代理。 可以使用 /metrics/resource/stats kubelet API 端点访问资源指标。

  • Summary API: kubelet 提供的 API,用于发现和检索可通过 /stats 端点获得的每个节点的汇总统计信息。

  • metrics-server: 集群插件组件,用于收集和聚合从每个 kubelet 中提取的资源指标。 API 服务器提供 Metrics API 以供 HPA、VPA 和 kubectl top命令使用。Metrics Server 是 Metrics API 的参考实现。

  • Metrics API: Kubernetes API 支持访问用于工作负载自动缩放的 CPU 和内存。 要在你的集群中进行这项工作,你需要一个提供 Metrics API 的 API 扩展服务器。

Metrics API

metrics-server 实现了 Metrics API。此 API 允许你访问集群中节点和 Pod 的 CPU 和内存使用情况。 它的主要作用是将资源使用指标提供给 K8s 自动缩放器组件。

下面是一个 node001.k8s.com 节点的 Metrics API 请求示例:

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/node001.k8s.com" | jq '.'

# 开启 代理
kubectl proxy --port=8080
# 或者 使用 curl 命令调用API,其结果和上方结果一致
curl http://localhost:8080/apis/metrics.k8s.io/v1beta1/nodes/node001.k8s.com
# 查询 test-nginx-7fd96f5f44-7hhcc 这个 pod 资源使用信息
curl http://127.0.0.1:8080/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/test-nginx-7fd96f5f44-7hhcc

Metrics Server

安装

# 下载 yaml 清单
# 需要注意 metrics-server 与 k8s 兼容性问题
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml
mv components.yaml metrics-server-v0.6.3.yaml

# 修改镜像地址为内网仓库地址
docker pull registry.k8s.io/metrics-server/metrics-server:v0.6.3
docker tag registry.k8s.io/metrics-server/metrics-server:v0.6.3 harbor.k8s.com/baseimage/metrics-server:v0.6.3
sed -i 's@image: registry.k8s.io/metrics-server/metrics-server:v0.6.3@image: harbor.k8s.com/baseimage/metrics-server:v0.6.3@g' metrics-server-v0.6.3.yaml

kubectl apply -f metrics-server-v0.6.3.yaml

# 验证
kubectl api-versions|grep metrics

kubectl top nodes
上一篇
下一篇