共计 2035 个字符,预计需要花费 6 分钟才能阅读完成。
作者:Sean Porter
我们的行业长期以来一直依赖基于微服务的架构来更快、更安全地交付软件。微服务的出现和无处不在自然为容器技术铺平了道路,使我们能够重新思考如何构建和部署我们的应用程序。Docker 在 2013 年加入战场,对于专注于基础架构和云迁移现代化的公司而言,像 Docker 这样的工具对于大规模快速发布应用程序至关重要。
但是,随着速度的提升带来了挑战,容器在编排方面引入了不小的复杂性。进入 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 数据:
运行着 Kubelet 的 Kubernetes 主机。Kubernetes 主机的资源有限,因此监控它们尤其重要。有许多方法可以从这些主机中获取数据,但最常见的方法是使用 Prometheus 节点导出器(node exporter)从 Kubernetes 主机中获取数据,并在 HTTP 端点上公开系统资源遥测数据(例如 CPU 使用和内存)。
Kubernetes 进程,又叫做 Kubelet 指标,包括 apiserver、kube-scheduler 和 kube-controller-manager 的指标。这些内容为你提供有关 Kubernetes 节点及其运行工作的详细信息。
Kubelet 的内置 cAdvisor。这里有一个很好的总结,但基本上 Kubelet 附带了对 cAdvisor 的内置支持,它可以收集、聚合、处理和导出正在运行的容器的指标。cAdvisor(它还具有对 Docker 容器的原生支持)为你提供每容器使用、跟踪资源隔离参数和历史资源使用情况。因为 Kubernetes 是控制平面,它可以指定使用多少内存,并利用 cAdvisor 跟踪。
kube-state-metrics,它为你提供集群级别的信息,可以全面了解 Kubernetes 集群上发生的情况,例如你配置的所有 pod 及其当前状态。kube-state-metrics 覆盖所有 Kubernetes 服务并收集有关其当前状态的信息,例如运行的容器数量、处于特定状态的容器数量、是否有任何表明它们不健康或我们处于容量饱和状态等。从 README,kube-state-metrics“监听 Kubernetes API 服务器”。
接下来:容器状态和使用 Prometheus 收集数据
如果你有跟踪这话题,你可能会注意到你可以使用 Prometheus 监控所有这四个数据源。你可能还注意到我们只讨论监控 Kubernetes 而不是监控它上面运行的应用程序(并且,这可能与你听到的有关 Kubernetes 监控的所有内容一致)。在我的下一篇文章中,我将以 Prometheus 展示 Kubernetes 和 Docker 监控,讨论它为什么能够很好地适应 Kubernetes 生态系统,并识别差距。