Metrics API 包括Custom Metrics API(自定义指标 API)和 Resource Metrics API(资源指标 API)。我们一般说的 Metrics API 泛指 Resource Metrics API,也就是通过 kubectl top 命令访问的API,是侠义上的。
Metrics API,即Kubernetes Resource Metrics API。它是Kubernetes API组中的一员,在集群中提供了一组基本的指标( 允许管理员访问集群中节点和 Pod 的 CPU 和内存使用情况。),以支持自动伸缩和类似的用例。
图中从右到左的架构组件包括以下内容:
Kubernetes Metrics Server(Kubernetes指标服务器),它是一个可扩展的、高效的容器资源度量源。
Metrics Server is a scalable, efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.
Metrics Server 用于监控每个 Node 和 Pod 的负载(用于Kubernetes内置自动扩缩管道)。Metrics Server从Kubelets 收集资源指标,并通过 Metrics API 在Kubernetes apiserver中公开,供 Horizontal Pod Autoscaler 和 Vertical Pod Autoscaler 使用。Metrics API 也可以通过kubectl top访问,使其更容易调试自动扩缩管道。
以下使用场景是 Metrics Server 不支持的:
对于不受支持的用例,建议使用Prometheus 等完整的监控解决方案。
Metrics Server 实现了 Metrics API。管理员必须部署提供 Metrics API 服务的 metrics-server 或其他适配器才能访问它。
因为 Metrics API 不在默认的Kubernetes API组中,它需要通过如 Metrics Server 添加至K8s集群的API组中,才能使用户通过客户端访问它。
Resource Metrics API 由metrics-server和prometheus-adapter实现。
正常运行的,完整的kubernetes集群,包括已经安装好calico网络和coredns。
具体详见:https://github.com/kubernetes-sigs/metrics-server#requirements
部署metrics server有两种方法:
Chart包和YAML清单下载地址是:https://github.com/kubernetes-sigs/metrics-server/releases
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/metrics-server-helm-chart-3.8.2/metrics-server-3.8.2.tgz
# 解压 chart
tar zxvf metrics-server-3.8.2.tgz
# 进入 metrics-server 目录
cd metrics-server
# 查看并复制 ci/ci-values.yaml中的参数
cat ci/ci-values.yaml
# 备份 values.yaml
cp values.yaml values.yaml.bak
# 修改 values.yaml
vim values.yaml
修改内容如下所示
# 通过 diff 命令对比修改前后的文件内容。
# diff values.yaml values.yaml.bak
6c6
< repository: bitnami/metrics-server
---
> repository: k8s.gcr.io/metrics-server/metrics-server
8c8
< tag: "0.6.1"
---
> tag: ""
77d76
< - --kubelet-insecure-tls
修改说明:
返回到 metrics-server 文件夹的上级目录
root@k8s-01:~/metrics-server/metrics-server# cd ../
root@k8s-01:~/metrics-server# helm install metrics-server metrics-server
NAME: metrics-server
LAST DEPLOYED: Sun Oct 2 18:48:30 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
***********************************************************************
* Metrics Server *
***********************************************************************
Chart version: 3.8.2
App version: 0.6.1
Image tag: bitnami/metrics-server:0.6.1
***********************************************************************
helm默认安装在default命名空间内。
# 下载 YAML 清单
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 备份 YAML 清单
cp components.yaml components.yaml.bak
# 比较修改后的 YAML 清单
# diff components.yaml components.yaml.bak
135d134
< - --kubelet-insecure-tls
141c140
< image: bitnami/metrics-server:0.6.1
---
> image: k8s.gcr.io/metrics-server/metrics-server:v0.6.1
修改解释见使用Helm安装的步骤。
kubectl apply -f components.yaml
等待30s 后,metrics-server 部署成功。
kubectl get pod -n kube-system
kubectl top node
kubectl top pod
输出参数:
假如使用kubectl top nodes出现下面的现象,可能是因为kubernetes集群网络cacoli的配置的网段和构建集群的网段不一致。
[root@vm31 ~]# kubectl top nodes --use-protocol-buffers
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
vm31 232m 11% 1395Mi 36%
vm32 <unknown> <unknown> <unknown> <unknown>
vm33 <unknown> <unknown> <unknown> <unknown>