本文发布已超过一年。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已不正确。

Kubernetes 中的资源使用监控

了解应用部署后的行为对于扩展应用和提供可靠服务至关重要。在 Kubernetes 集群中,可以在许多不同级别检查应用性能:容器、PodService 和整个集群。作为 Kubernetes 的一部分,我们希望在所有这些级别上向用户提供关于其运行应用的详细资源使用信息。这将使用户深入了解其应用的性能以及可能存在应用瓶颈的地方。由此引入了 Heapster,这是一个旨在为 Kubernetes 提供基本监控平台的项目。

概览

Heapster 是一个集群范围的监控和事件数据聚合器。它目前原生支持 Kubernetes,并在所有 Kubernetes 设置中运行。Heapster 作为 Pod 运行在集群中,类似于任何 Kubernetes 应用的运行方式。Heapster Pod 发现集群中的所有节点,并从节点的 Kubelets(节点上的 Kubernetes Agent)查询使用信息。Kubelet 本身从 cAdvisor 获取数据。Heapster 按 Pod 以及相关标签对信息进行分组。然后将这些数据推送到可配置的后端进行存储和可视化。目前支持的后端包括 InfluxDB(使用 Grafana 进行可视化)、Google Cloud Monitoring 以及此处更详细描述的许多其他后端。服务的整体架构如下图所示:

让我们更详细地了解其他一些组件。

cAdvisor

cAdvisor 是一个开源的容器资源使用和性能分析 Agent。它专为容器构建,原生支持 Docker 容器。在 Kubernetes 中,cAdvisor 被集成到 Kubelet 二进制文件中。cAdvisor 自动发现机器上的所有容器,并收集 CPU、内存、文件系统和网络使用统计信息。cAdvisor 还通过分析机器上的“root”容器来提供整体机器使用情况。

在大多数 Kubernetes 集群上,cAdvisor 在端口 4194 上为机器上的容器提供一个简单的 UI。这是 cAdvisor UI 的一部分快照,显示了整体机器使用情况:

Kubelet

Kubelet 充当 Kubernetes Master 和节点之间的桥梁。它管理机器上运行的 Pod 和容器。Kubelet 将每个 Pod 转换为其组成容器,并从 cAdvisor 获取单个容器的使用统计信息。然后,它通过 REST API 公开聚合的 Pod 资源使用统计信息。

存储后端

InfluxDB 和 Grafana

在开源世界中,InfluxDB 和 Grafana 是用于监控的非常流行的组合。InfluxDB 提供易于使用的 API 来写入和获取时间序列数据。在大多数 Kubernetes 集群上,Heapster 默认配置使用此存储后端。可以在此处找到详细的设置指南。InfluxDB 和 Grafana 运行在 Pod 中。该 Pod 将自己公开为 Kubernetes Service,Heapster 就是通过这种方式发现它的。

Grafana 容器提供 Grafana 的 UI,它提供了一个易于配置的仪表盘界面。Kubernetes 的默认仪表盘包含一个示例仪表盘,用于监控集群及其内部 Pod 和容器的资源使用情况。该仪表盘可以轻松定制和扩展。请此处查看 InfluxDB 的存储模式。

这是一个视频,展示了如何使用 heapster、InfluxDB 和 Grafana 监控 Kubernetes 集群:

这是默认 Kubernetes Grafana 仪表盘的快照,显示了整个集群、单个 Pod 和容器的 CPU 和内存使用情况:

Google Cloud Monitoring

Google Cloud Monitoring 是一个托管监控服务,允许您可视化应用中的重要指标并设置警报。可以将 Heapster 设置为自动将所有收集的指标推送到 Google Cloud Monitoring。然后,这些指标可在Cloud Monitoring 控制台中获取。此存储后端最易于设置和维护。监控控制台允许您使用导出的数据轻松创建和定制仪表盘。

这是一个视频,展示了如何设置和运行由 Google Cloud Monitoring 支持的 Heapster:"https://youtube.com/embed/xSMNR2fcoLs" 这是一个 Google Cloud Monitoring 仪表盘的快照,显示了集群范围的资源使用情况:

试试看!

既然您已经对 Heapster 有了一些了解,不妨在自己的集群上试试吧!Heapster 仓库位于 GitHub 上。它包含设置 Heapster 及其存储后端的详细说明。Heapster 在大多数 Kubernetes 集群上默认运行,所以您可能已经拥有它了!随时欢迎反馈。如果您遇到任何问题,请通过故障排除渠道告知我们。