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>
-