监控Kubernetes,第一部分:挑战+数据来源

作者:Sean Porter

我们的行业长期以来一直依赖基于微服务的架构来更快、更安全地交付软件。微服务的出现和无处不在自然为容器技术铺平了道路,使我们能够重新思考如何构建和部署我们的应用程序。Docker在2013年加入战场,对于专注于基础架构和云迁移现代化的公司而言,像Docker这样的工具对于大规模快速发布应用程序至关重要。

监控Kubernetes,第一部分:挑战+数据来源

但是,随着速度的提升带来了挑战,容器在编排方面引入了不小的复杂性。进入Kubernetes:一个开源容器编排系统,用于自动化容器化应用程序的部署、扩展和管理,Kubernetes控制平面命令和控制你的基础架构。Kubernetes最初由谷歌于2014年推出,现在由云原生计算基金会维护(顺便提一下,谷歌帮助组建了Kubernetes,以确保它保持自由免费和竞争力)。如果你使用Docker来容器化你的应用程序,那么你肯定会使用Kubernetes进行编排。(当然还有其他的编排器,比如Docker Swarm和Apache Mesos,但Kubernetes已成为容器编排领域的领导者。)

在本系列的第一部分中,我将介绍监控Kubernetes的挑战和主要数据来源。稍后,我将深入探讨Kubernetes和Docker部署,并使用下面列出的数据源的实际示例。

Kubernetes监控:挑战

Kubernetes使团队更容易管理容器,在自动维护所需状态的同时调度和配置容器。核心价值观是它作为一个通用平台,Kubernetes可以在任何地方部署你的应用程序,无论是AWS、GCP、Azure还是裸机。同样,所有这些功能和自动化都带来了挑战,特别是在关注性能方面。无论部署的规模如何,你仍需要知道该部署中有多少可用资源,以及了解已部署应用程序和容器的运行状况。正如微服务使我们重新思考如何构建应用程序一样,Kubernetes要求我们改变传统的监控方法,容器编排的动态特性需要采用动态的监控方法。

以下是我看到的挑战:

  • 在这个新的动态时代,你的应用程序在不断地移动
  • 在Kubernetes之前,将应用程序分布在多个云(公共和私有云,以及不同的云提供商)中并非易事。现在分发应用程序很容易,我们遇到了一系列新问题。
  • 就像从单体到微服务架构的转变一样,采用Kubernetes意味着需要监控许多小块
  • 你已经听说过像牛(cattle)一样处理你的基础设施而不是宠物(pet)的优点。Kubernetes是这种畜牧方法的缩影,可以轻松实现大量和短暂的基础设施。就这样,通过标签(label)和注释(annotation)等标识符跟踪您的Kubernetes pod及其容器变得至关重要。

Kubernetes监控:数据来源

基本上,监控工具从四个来源收集Kubernetes数据:

  1. 运行着Kubelet的Kubernetes主机。Kubernetes主机的资源有限,因此监控它们尤其重要。有许多方法可以从这些主机中获取数据,但最常见的方法是使用Prometheus节点导出器(node exporter)从Kubernetes主机中获取数据,并在HTTP端点上公开系统资源遥测数据(例如CPU使用和内存)。
  2. Kubernetes进程,又叫做Kubelet指标,包括apiserver、kube-scheduler和kube-controller-manager的指标。 这些内容为你提供有关Kubernetes节点及其运行工作的详细信息。
  3. Kubelet的内置cAdvisor这里有一个很好的总结,但基本上Kubelet附带了对cAdvisor的内置支持,它可以收集、聚合、处理和导出正在运行的容器的指标。cAdvisor(它还具有对Docker容器的原生支持)为你提供每容器使用、跟踪资源隔离参数和历史资源使用情况。因为Kubernetes是控制平面,它可以指定使用多少内存,并利用cAdvisor跟踪。
  4. kube-state-metrics,它为你提供集群级别的信息,可以全面了解Kubernetes集群上发生的情况,例如你配置的所有pod及其当前状态。kube-state-metrics覆盖所有Kubernetes服务并收集有关其当前状态的信息,例如运行的容器数量、处于特定状态的容器数量、是否有任何表明它们不健康或我们处于容量饱和状态等。从README,kube-state-metrics“监听Kubernetes API服务器”。

接下来:容器状态和使用Prometheus收集数据

如果你有跟踪这话题,你可能会注意到你可以使用Prometheus监控所有这四个数据源。你可能还注意到我们只讨论监控Kubernetes而不是监控它上面运行的应用程序(并且,这可能与你听到的有关Kubernetes监控的所有内容一致)。在我的下一篇文章中,我将以Prometheus展示Kubernetes和Docker监控,讨论它为什么能够很好地适应Kubernetes生态系统,并识别差距。

相关推荐