如果你位于DevOps前线,Kubernetes正在迅速成为你的生产云环境的重要组成部分。由于容器编排对于部署、伸缩和管理容器化应用程序至关重要,监控Kubernetes需要成为监控策略的重要组成部分。
容器环境的运行与传统环境不同。因此,如果你正在监控应用程序和基础设施,你需要考虑如何监控运行它们的容器环境。这里有可供参考的5个***实践:
1.集中日志和指标。通过Kubernetes编排你的容器化服务和工作负载会带来秩序,但请记住,你的环境仍然是分散的。如果你集中你的日志和指标,处理起来会容易得多。
2.考虑ephemeral容器。容器编排的美妙之处在于它可以很容易地在短时间内启动、停止、杀死和清理容器。但是,监控它们可能并不容易。即使服务正在进行,你仍然需要调试问题并监控集群活动。诀窍是在日志和指标消失之前获取。如果你不这样做,你的指标看起来更像左边的图,而不是右边的图。
3.简化,简化,简化。对于容器环境中的所有移动部分(服务、API、容器、编排工具),你需要进行监控而不会引入不必要的复杂性。不是使用各种监控代理来扩展容器,而是要从你监控和管理的内容中抽象出监控和管理工具。这也将帮助你的工程师专注于构建和交付软件,而不是运维交付平台。
4.明确监视每一层。你需要收集日志并监控环境中各层的错误、故障和性能问题(pod\容器和控制器管理器)。例如,你需要能够进行pod故障排除,确保容器正常运行,并在控制器管理器中收集运行时指标。
5.确保跨层的数据一致性。为了快速准确地调试,你需要确保容器环境中跨所有层的数据一致性。诸如准确的时间戳、一致的测量单位(如毫秒数与秒数)以及在应用程序和组件中收集常用的一组指标和日志,将帮助你快速准确地对所有层进行故障排除和调试。
以简单直接的方式完成这些待办事项的***做法是,监控Kubernetes环境中的容器,而不触碰应用程序容器。通过将DaemonSet或sidecar引入与容器化服务并列并包含日志记录和指标收集代理的Kubernetes环境中,可以实现这一目的。使用此方法进行部署将确保数据收集的一致性,***限度地减少应用程序容器所需的更改,最重要的是,消除生产环境中盲目选择的可能性。
几种实现方法包括:
1.使用带有Fluentd日志记录代理的DaemonSet(这会为你提供日志记录而不是指标)。如果你已经有了配置好的ELK集群,这是一个选择。
2.使用带有Prometheus指标代理的DaemonSet或sidecar(CoreOS在集成Prometheus和Kubernetes方面做得非常出色)。在你的Kubernetes集群上运行Prometheus将为你提供指标检测、查询和警报。
3.许多指标和性能监控工具,包括Heapster、DataDog、cAdvisor、New Relic、Weave / VMware,也提供了用于Kubernetes监控的DaemonSet或sidecar选项。