如何预估 Kubernetes 集群中监控组件的资源消耗

本文描述的监控指标,仅包含 Kubernetes 基础的指标,不包含业务相关指标,相关组件为 prometheus-server、kube-state-metrics、node-exporter,数据的保存周期为 3 天。

1. 集群中监控相关组件

1
2
3
4
helm -n monitor list

NAME    	NAMESPACE      	REVISION	UPDATED                                	STATUS  	CHART            	APP VERSION
prom-k8s	monitor	        1       	2022-05-12 16:47:53.789549796 +0800 CST	deployed	prometheus-15.0.1	2.32.0     
1
2
3
4
5
6
7
8
kubectl -n monitor get deploy,daemonset

NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/prom-k8s-kube-state-metrics   1/1     1            1           102d
deployment.apps/prom-k8s-prometheus-server    1/1     1            1           102d

NAME                                               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/prom-k8s-prometheus-node-exporter   20        20        20      20           20          <none>          102d

2. 指标计算方式

  • 集群全部节点数

count(kube_node_created{app_kubernetes_io_instance="prom-k8s"}) by (cluster)

  • 集群版本

sum by (cluster,kubelet_version)(kube_node_info{app_kubernetes_io_instance="prom-k8s"})

  • 运行的 POD 数量

sum(kube_pod_info) by (cluster)

  • 监控组件使用的内存

sum(container_memory_working_set_bytes{image!="", namespace="monitor"}) by (cluster)

  • 监控组件使用的 CPU

sum (rate (container_cpu_usage_seconds_total{namespace="monitor"}[5m])) by (cluster)

3. 统计数据分析

节点数量Kuberntes 版本POD 数量监控占用内存监控占用 CPU
19 v1.16.8 1046 7.04 GB 0.289
22 v1.19.15 1014 4.56 GB 0.239
28 v1.18.20 974 3.23 GB 0.187
12 v1.16.11 600 2.94 GB 0.134
8 v1.20.12 195 2.48 GB 0.598
9 v1.16.9 616 2.11 GB 0.116
13 v1.16.11 558 1.87 GB 0.096
20 v1.16.11 452 1.78 GB 0.099
14 v1.16.11 378 1.57 GB 0.064
9 v1.19.15 284 1.52 GB 0.090
6 v1.16.11 428 1.48 GB 0.102
12 v1.16.8 324 1.36 GB 0.052
9 v1.16.11 382 1.09 GB 0.065
4 v1.20.12 220 1.08 GB 0.052
12 v1.16.11 504 1.04 GB 0.060
4 v1.20.12 156 1.01 GB 0.042
4 v1.16.11 170 937.66 MB 0.055
8 v1.16.11 254 914.81 MB 0.053
10 v1.16.8 435 907.60 MB 0.032
10 v1.16.11 278 852.69 MB 0.034
11 v1.16.11 420 839.70 MB 0.047
7 v1.16.11 268 815.48 MB 0.046
4 v1.16.11 248 804.21 MB 0.032
9 v1.16.11 256 784.44 MB 0.034
10 v1.16.11 284 776.07 MB 0.047
6 v1.16.11 222 745.46 MB 0.034
8 v1.16.11 252 709.10 MB 0.034
5 v1.16.11 200 678.32 MB 0.036
7 v1.16.11 202 642.48 MB 0.037
5 v1.16.8 174 640.41 MB 0.030
7 v1.20.12 97 624.49 MB 0.025
6 v1.16.11 198 590.52 MB 0.029
6 v1.20.12 95 578.39 MB 0.034
7 v1.16.11 222 569.38 MB 0.032
6 v1.16.11 140 560.03 MB 0.027
8 v1.16.11 166 557.45 MB 0.028
5 v1.20.12 70 494.62 MB 0.019
5 v1.16.11 120 455.13 MB 0.024
6 v1.16.8 112 449.50 MB 0.022
7 v1.16.11 128 448.15 MB 0.026
6 v1.16.11 112 441.64 MB 0.022
6 v1.16.11 112 437.66 MB 0.026
2 v1.16.11 84 326.72 MB 0.024
2 v1.20.15 11 208.16 MB 0.012

每个集群平均 POD 数量 306 个,平均内存占用 1246 MB,一个 POD 大约占用 40 MB 内存,CPU 消耗基本可以忽略。