Skip to main content

K8S 监控组件 metrics-server

metrics-server 是 Kubernetes 集群资源使用情况的聚合器,Kubernetes 中有些组件依赖资源指标API(metric API)的功能 ,如 kubectl top, hpa。如果没有资源指标 API 接口,这些组件或命令都无法运行。

$ kubectl top pods
error: Metrics API not available
  • 通过 Metrics API 可以获取指定 node 或者 pod 的当前资源使用情况(而无法获取历史数据)
  • Metrics API的api路径:/apis/metrics.k8s.io/
  • Metrics API的使用需要在K8S集群中成功部署 metrics-server

先决条件

  • Kubernetes 1.28+
  • kubectl 1.28+

版本选择

查看版本兼容矩阵,选择 Metrics Server 0.7.x 版本

获取 YAML

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server.yaml
提示

需要确认部署文件内的容器镜像版本号:image: registry.k8s.io/metrics-server/metrics-server:v0.7.2

安装

kubectl apply -f components.yaml

验证 kube-api

$ kubectl api-versions|grep metrics
metrics.eks.amazonaws.com/v1
metrics.k8s.io/v1beta1

# 获取指定API Metrics
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods

可以使用 top 访问 Metrics API 了

kubectl top nodes
kubectl top pods

高可用性

只需将值设置 replicas 为大于 1 即可。

资源配额

v0.5.0 开始,Metrics Server 默认 100m CPU, 200Mi 内存。

在以下范围内,默认的资源足够应付。

对于超过 100 个节点的集群,需额外分配:

  • 每个节点 1m 个核心
  • 每个节点 2Mi 内存

其他配置

根据您的集群设置,您可能还需要更改传递给 Metrics Server 容器的标志。最有用的标志:

  • --kubelet-preferred-address-types 确定连接到特定节点的地址时使用的节点地址类型的优先级(默认[Hostname、InternalDNS、InternalIP、ExternalDNS、ExternalIP])
  • --kubelet-insecure-tls 不验证 Kubelets 提供的服务证书的 CA。仅用于测试目的。
  • --requestheader-client-ca-file 指定根证书包以验证传入请求的客户端证书。
  • --node-selector 可以完成根据标签从指定节点抓取指标

您可以通过运行以下命令获取 Metrics Server 配置标志的完整列表:

docker run --rm registry.k8s.io/metrics-server/metrics-server:v0.7.2 --help

参考文档