当前位置: 首页 > ai >正文

k8s监控方案实践补充(一):部署Metrics Server实现kubectl top和HPA支持

k8s监控方案实践补充(一):部署Metrics Server实现kubectl top和HPA支持

文章目录

  • k8s监控方案实践补充(一):部署Metrics Server实现kubectl top和HPA支持
  • 一、Metrics Server简介
  • 二、Metrics Server实战部署
    • 1. 创建RBAC(metrics-server-rbac.yaml)
    • 2. 创建Service(metrics-server-svc.yaml)
    • 3. 创建Deployment(metrics-server-deploy.yaml)
    • 4. 创建APIService(metrics-server-apiservice.yaml)
    • 5. 部署所有资源
  • 三、配置Prometheus抓取资源指标配置
  • 总结


随着容器化和微服务架构的不断发展,系统的复杂性与日俱增,构建一套完善的监控与资源管理体系已成为保障系统稳定运行的关键。在前几篇文章中,我们已经介绍了如何部署 Prometheus、Node Exporter、Grafana 以及 Alertmanager,并通过钉钉 Webhook 实现了监控告警的闭环。

在本篇补充文章中,我们将部署 Kubernetes 原生的资源指标采集组件 —— Metrics Server。它是实现 kubectl top 命令、自动水平扩缩容(HPA)等关键功能的基础,为进一步增强集群资源可观测性和智能调度能力提供支持。

一、Metrics Server简介

Metrics Server 是 Kubernetes 官方提供的资源指标聚合组件,主要用于收集各节点和各 Pod 的 CPU 与内存使用情况。它通过调用 Kubelet 的 Summary API 聚合数据,并将指标存储在内存中(不持久化),供 API Server 查询。

部署 Metrics Server 后,可以实现以下功能:

  • 使用 kubectl top 命令实时查看节点和 Pod 的资源使用情况
  • 为 HPA(Horizontal Pod Autoscaler)提供基础指标支撑,实现基于资源使用的自动扩缩容
  • 在某些 Kubernetes 仪表盘中显示资源使用情况(如 Kubernetes Dashboard)

⚠️ 需要注意的是,Metrics Server 并不会将数据持久化,也不支持 Prometheus 查询语法,它只适用于实时性要求高但不需要历史数据的场景。

g.cn/direct/31da7451a2e34431b7ce7606e6722ebf.png)

二、Metrics Server实战部署

1. 创建RBAC(metrics-server-rbac.yaml)

为 Metrics Server 分配所需的访问权限,包括读取节点、Pod 等资源指标,并配置相应的 ServiceAccount 与 RoleBinding

apiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-serverrbac.authorization.k8s.io/aggregate-to-admin: "true"rbac.authorization.k8s.io/aggregate-to-edit: "true"rbac.authorization.k8s.io/aggregate-to-view: "true"name: system:aggregated-metrics-reader
rules:
- apiGroups:- metrics.k8s.ioresources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-servername: system:metrics-server
rules:
- apiGroups:- ""resources:- pods- nodes- nodes/stats- namespaces- configmapsverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server-auth-readernamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server:system:auth-delegator
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:auth-delegator
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: system:metrics-server
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:metrics-server
subjects:
- kind: ServiceAccountname: metrics-servernamespace: kube-system

2. 创建Service(metrics-server-svc.yaml)

暴露 Metrics Server 的 HTTPS 服务端口,供 Kubernetes API Server 注册并访问其指标服务

apiVersion: v1
kind: Service
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:ports:- name: httpsport: 443protocol: TCPtargetPort: httpsselector:k8s-app: metrics-server

3. 创建Deployment(metrics-server-deploy.yaml)

部署 Metrics Server,配置启动参数、TLS 端口、探针、ServiceAccount 以及临时目录等关键运行参数

apiVersion: apps/v1
kind: Deployment
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:selector:matchLabels:k8s-app: metrics-serverstrategy:rollingUpdate:maxUnavailable: 0template:metadata:labels:k8s-app: metrics-serverspec:containers:- args:- --cert-dir=/tmp- --secure-port=4443- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --kubelet-insecure-tlsimage: harbor.local/k8s/metrics-server:0.4.3imagePullPolicy: IfNotPresentlivenessProbe:failureThreshold: 3httpGet:path: /livezport: httpsscheme: HTTPSperiodSeconds: 10name: metrics-serverports:- containerPort: 4443name: httpsprotocol: TCPreadinessProbe:failureThreshold: 3httpGet:path: /readyzport: httpsscheme: HTTPSperiodSeconds: 10securityContext:readOnlyRootFilesystem: truerunAsNonRoot: truerunAsUser: 1000volumeMounts:- mountPath: /tmpname: tmp-dirnodeSelector:kubernetes.io/os: linuxpriorityClassName: system-cluster-criticalserviceAccountName: metrics-servervolumes:- emptyDir: {}name: tmp-dir

4. 创建APIService(metrics-server-apiservice.yaml)

注册 metrics.k8s.io 资源组的 v1beta1 版本,使 Kubernetes 能够通过标准 API 查询 Metrics Server 提供的实时指标

apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:labels:k8s-app: metrics-servername: v1beta1.metrics.k8s.io
spec:group: metrics.k8s.iogroupPriorityMinimum: 100insecureSkipTLSVerify: trueservice:name: metrics-servernamespace: kube-systemversion: v1beta1versionPriority: 100

5. 部署所有资源

kubectl apply -f 01-metrics-server-rbac.yaml
kubectl apply -f 02-metrics-server-service.yaml
kubectl apply -f 03-metrics-server-deployment.yaml
kubectl apply -f 04-metrics-server-apiservice.yaml

三、配置Prometheus抓取资源指标配置

⚠️ 注意:Prometheus 不直接支持从 Metrics Server 抓取指标,但可以从 Kubelet 的 cAdvisor 路径采集节点与容器资源使用情况。

    - job_name: 'kubernetes-node-cadvisor'kubernetes_sd_configs:- role:  nodescheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- action: labelmapregex: __meta_kubernetes_node_label_(.+)- target_label: __address__replacement: kubernetes.default.svc:443- source_labels: [__meta_kubernetes_node_name]regex: (.+)target_label: __metrics_path__replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

总结

🚀 本篇文章补充了 Kubernetes 原生监控能力的关键组件 —— Metrics Server 的部署过程,解决了 kubectl top 无法使用的问题,并为 HPA 自动扩缩容提供资源指标支持。
✅下一篇补充文章将继续完善监控体系,介绍如何部署 kube-state-metrics,用于采集 Kubernetes 对象状态(如 Deployment、Pod、Node 等)的关键指标,为 Prometheus 提供结构化的集群状态数据支撑。

http://www.xdnf.cn/news/6204.html

相关文章:

  • ESG时代,EcoVadis认证如何提升企业国际竞争力
  • 苍穹外卖--菜品分页查询
  • 优雅的请求接口(java)
  • 制造业降本增效的核心要素
  • 通过SMTP协议实现Linux邮件发送配置指南
  • 0514得物、0509滴滴面试总结复盘
  • 20250514 无限空间,当 a(t)→0,所有‌物理距离‌ d→0 ‌,这个状态是什么,是无限大的无限致密状态吗
  • 什么是临时对象?临时对象在什么情况下产生?
  • 网络检测工具InternetTest v8.9.1.2504 单文件版,支持一键查询IP/DNS、WIFI密码信息
  • 自营交易考试中,怎么用“黄昏之星”形态做出漂亮反转单?
  • 2025年文化传播、心理学与公共管理国际会议(CPPM 2025)
  • unordered_map和unordered的介绍和使用
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- consistency is the key
  • acwing 1488. 最短距离 超级源点 最短路 堆优化Dijkstra
  • Grafana变化趋势:Graph面板
  • SDIO EMMC中ADMA和SDMA简介
  • Linux常用命令40——alias设置命令别名
  • numpy 中数组的广播
  • 打破边界,智评未来:AI如何重塑学科交叉融合的评价体系?
  • 深度伪造对知识产权保护的新挑战与应对之策
  • 算法题(146):最大子段和
  • 山东大学软件学院软件工程计算机图形学复习笔记(2025)
  • 现代计算机图形学Games101入门笔记(四)
  • MySQL中的索引下推技术(ICP)
  • 简单生成验证码(适合初学)
  • 德施曼618首战全平台销额、销量双冠军 京东天猫官榜第一
  • 最优化方法Python计算:有约束优化应用——近似线性可分问题支持向量机
  • 常见的几种网络攻击
  • SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
  • 精益数据分析(59/126):移情阶段的深度博弈——如何避开客户访谈的认知陷阱