在K8S中,什么是容器资源监视?
在 Kubernetes(K8S)中,容器资源监视(Container Resource Monitoring)指的是持续收集、聚合和分析集群中运行的容器(以及 Pod、节点等)的资源使用指标(如 CPU、内存、网络 I/O、磁盘 I/O 等)的过程。其核心目标是:
- 了解应用性能与健康状况: 判断容器是否拥有足够的资源运行,是否存在瓶颈(如 CPU 饱和、内存不足 OOMKilled)。
- 保障集群稳定性: 防止单个容器或 Pod 消耗过多资源导致节点不稳定或影响其他应用。
- 实现自动扩缩容 (HPA/VPA): 为 Horizontal Pod Autoscaler (HPA) 和 Vertical Pod Autoscaler (VPA) 提供数据依据,实现基于负载的动态资源调整。
- 容量规划与优化: 帮助管理员了解集群整体资源利用率,进行节点扩容/缩容决策,优化成本。
- 故障诊断与排障: 当应用出现性能下降或故障时,资源使用数据是关键的诊断线索。
Kubernetes 容器资源监视的关键组件与流程:
-
数据采集 (cAdvisor):
- 核心组件: 每个 Kubelet 进程内部都内置了一个名为 cAdvisor (Container Advisor) 的守护进程。
- 职责: cAdvisor 自动发现其所在节点(Node)上运行的所有容器(包括通过 Docker、containerd 等运行时启动的容器以及 Kubelet 本身的容器)。
- 采集内容: 实时收集每个容器的资源隔离指标:
- CPU: 使用量(核数/毫核)、使用率、时间片限制。
- 内存: 使用量(字节)、工作集大小、换页、内存限制、OOM 事件。
- 网络: 各网络接口的字节/包数(入/出)。
- 文件系统 (RootFS & Volume): 使用量(字节)。
- 数据暴露: cAdvisor 将其收集的指标数据通过 Kubelet 的 API 端点(通常是
http://<node-ip>:10255/metrics或http://<node-ip>:10250/metrics,后者需认证)暴露出来,格式遵循 Prometheus 的指标格式。
-
指标聚合与短期存储 (Metrics Server):
- 核心组件: Metrics Server 是 Kubernetes 生态系统中的一个标准集群组件(通常需要单独部署,但已成为现代 K8S 发行版的标配)。
- 职责:
- 定期(默认间隔约 15-60 秒)从集群中所有 Kubelet 的 API 端点抓取 cAdvisor 暴露的原始容器/Pod/节点资源指标。
- 在内存中聚合这些数据(例如,计算每个 Pod 内所有容器资源的总和)。
- 提供短期存储(通常只保留几分钟到几十分钟的数据)。
- API 暴露: Metrics Server 实现 Kubernetes Metrics API (
metrics.k8s.io/v1beta1)。 - 核心用户:
kubectl top pods/nodes命令:直接查询 Metrics API 来显示 Pod 和节点的实时资源使用情况。- Horizontal Pod Autoscaler (HPA): HPA 控制器定期查询 Metrics API,根据目标指标(如 CPU 利用率、内存使用量或自定义指标)的值来决定是否需要增加或减少 Pod 副本数。这是容器资源监视最重要的自动化应用场景之一。
-
监控与告警 (External Monitoring Systems):
- 需求: Metrics Server 主要用于自动扩缩容和提供
kubectl top的短期数据。对于长期存储、历史数据分析、可视化仪表盘、复杂告警规则,需要集成外部监控系统。 - 核心组件: Prometheus 是 Kubernetes 生态中最流行和事实上的标准监控解决方案。其他选项包括 Datadog、Dynatrace、New Relic、Sysdig、Grafana Cloud、Azure Monitor 等商业方案。
- 工作流程:
- 抓取 (Scraping): Prometheus Server 配置为定期从以下来源抓取指标:
- Kubelet 的
/metrics端点(包含 cAdvisor 指标)。 - Kubernetes API Server 的
/metrics端点(包含 API 对象状态、请求计数/延迟等)。 - 应用自身暴露的 Prometheus 格式指标端点(需要应用支持)。
- Node Exporter(部署在每个节点上,采集节点级硬件和 OS 指标)。
- Kube-State-Metrics(监听 K8S API Server,生成关于对象状态如 Deployment、Pod 状态、资源请求/限制等的指标)。
- Kubelet 的
- 存储: Prometheus 自带高效的时间序列数据库(TSDB)用于长期存储(可配置保留策略)。
- 查询与可视化: 使用强大的 PromQL 查询语言分析数据。通过 Grafana 等工具创建丰富的仪表盘。
- 告警: 在 Prometheus 或 Grafana 中定义告警规则(Alerting Rules),当指标超过阈值时触发告警,并通过 Alertmanager 发送通知(邮件、Slack、PagerDuty 等)。
- 抓取 (Scraping): Prometheus Server 配置为定期从以下来源抓取指标:
- 需求: Metrics Server 主要用于自动扩缩容和提供
总结关键点:
- cAdvisor 是基石: 内置于 Kubelet,负责在节点层面采集每个容器的原始资源指标。
- Metrics Server 是桥梁: 聚合集群范围的指标,实现 Metrics API,为
kubectl top和 HPA 自动扩缩容提供核心数据支持。 - 外部监控系统是大脑: (尤其是 Prometheus + Grafana)提供长期存储、强大的查询、可视化仪表盘和灵活的告警能力,是运维团队洞察集群和应用健康状况的必备工具。
- HPA 是核心应用: 容器资源监视(特别是 CPU/Memory 指标)是驱动 HPA 实现应用弹性伸缩的关键输入。
简单来说,容器资源监视就是通过 cAdvisor 抓容器指标 -> Metrics Server 汇总给 K8S 内部用(看状态、自动扩缩容)-> Prometheus 等外部系统存起来、画图、报警,让你时刻知道你的应用在 K8S 里“吃”了多少资源,健不健康,需不需要调整。
浙公网安备 33010602011771号