Kubernetes作为一个容器编排和管理平台,为用户提供了一系列资源监控工具,可以深入了解应用程序在部署时的行为。这些工具可以检测容器、Pod、Service和整个集群的特征,以评估应用程序的性能,并找出消除瓶颈的方法。
Kubernetes提供了多种资源监控工具,如kubectl top命令、Prometheus、Grafana等,它们可以提供有关CPU、内存、网络和磁盘使用情况等详细信息。本文将介绍这些工具的使用方法,帮助您更好地监控和优化Kubernetes集群中的应用程序性能。
在 Kubernetes 中,应用程序监控不依赖单个监控解决方案。在新集群上, 可以使用资源度量或完整度量管道来收集监视统计信息。
一、资源度量管道
资源指标管道提供了一组与集群组件,例如 Horizontal Pod Autoscaler 控制器以及 kubectl top 实用程序相关的有限度量,这些指标是由轻量级的、短期、内存存储的 metrics-server 收集, 并通过 metrics.k8s.io 公开。
metrics-server 发现集群中的所有节点,并且查询每个节点的 kubelet 以获取 CPU 和内存使用情况。 kubelet 充当 Kubernetes 主节点与节点之间的桥梁,管理机器上运行的 Pod 和容器。
kubelet 将每个 Pod 转换为其组成的容器,并通过容器运行时接口从容器运行时获取各个容器使用情况统计信息。 如果某个容器运行时使用 Linux cgroups 和名字空间来实现容器。 并且这一容器运行时不发布资源用量统计信息, 那么 kubelet 可以直接查找这些统计信息(使用来自 cAdvisor 的代码)。 无论这些统计信息如何到达,kubelet 都会通过 metrics-server Resource Metrics API 公开聚合的 Pod 资源用量统计信息。 该 API 在 kubelet 的经过身份验证和只读的端口上的 /metrics/resource/v1beta1 中提供。
二、完整度量管道
一个完整的度量管道可以让我们获得更丰富的度量数据。当我们监控Kubernetes集群中的应用程序性能时,可以使用自动扩缩器等机制,根据集群当前状态自动调整集群规模来响应这些度量数据。为了实现这一目标,Kubernetes从kubelet获取度量值,并通过适配器将其公开给custom.metrics.k8s.io或external.metrics.k8s.io API。
Kubernetes还与OpenMetrics密切合作,OpenMetrics是CNCF可观测性和分析-监控项目之一,构建在Prometheus暴露格式之上,并对其进行了扩展,几乎100%向后兼容。在CNCF Landscape中,可以找到许多监控项目,它们可以用于抓取指标数据并利用这些数据来观测Kubernetes集群。选择哪种工具或哪些工具完全取决于个人需求。CNCF的可观测性和分析景观包括各种开源软件、付费的软件即服务(SaaS)以及其他混合商业产品。
尽管将完整的指标管道集成到Kubernetes实现中超出了Kubernetes文档的范围,但我们可以将监控数据反馈给Kubernetes。例如,HorizontalPodAutoscaler可以使用处理过的指标数据来计算工作负载组件运行的Pod数。
在选择监控平台时,需求、预算和技术资源是主要考虑因素。Kubernetes不推荐任何特定的指标管道;可以使用许多选项。监控系统应该能够处理OpenMetrics指标传输标准,并选择最适合基础设施平台的整体设计和部署。