原文作者 Tom Wilkie 简介: Tom Wikie ,现居伦敦。曾就职于 Citrix Systems ;之后联合创办 Acunu ,并出任 CTO ;再后来在 Google 出任 Site Reliability Manager ;现于 Weaveworks 任项目工程总监。本文是他在尝试将 Prometheus 与 Kubernetes 进行结合使用后发表的文章。
在伦敦那场 Meetup 上,我做过一个“ Weaveworks 使用 Prometheus 来管理 Weave 云( Weave 云运行在 Kubernetes 集群上)”的演讲( PPT 分享链接: http://www.slideshare.net/weaveworks/kubernetes-and-prometheus )。
在这篇帖子中,我会分享我们在过去 6 个月的开发过程的实践,同时也会分享一些很棒的工具,对 Weave 云进行弹性扩容。
Prometheus 并非很新的项目,最近社区内的一些成员也贡献了很多优秀的帖子:
《用 Prometheus 监控 Kubernetes 》—— Brian Brazil
(链接: http://www.slideshare.net/brianbrazil/monitoring-kubernetes-with-prometheus-kubernetes-ireland-2016 )
《运行 Prometheus 和 Kubernetes 》—— Fabian Reinartz
(链接: https://coreos.com/blog/prometheus-and-kubernetes-up-and-running.html )
《用 Kubernetes 监控基于 Kubernetes 的微服务架构》—— Fabian Reinartz
背景
五月份,继第一个项目 Kubernetes 之后, CNCF ( Cloud Native Computing Foundation )将 Prometheus 项目也收入囊中。在 Prometheus 发布第一版之后,一如 Björn Rabenstein ( SoundCloud 核心开发人员)在 JaxEnter 上描述的那样: Prometheus 和 Kubernetes 有着同样的起源。
首先,他们都流着 Google 的血液: Kubernetes 起源于 Google 项目 Borg , Prometheus 起源于 Google 项目 Borgmon 。但是它们两者之间还有一层更深的“羁绊”—— Prometheus 有几个很关键的设计,可以使 Prometheus 成为最好的监控系统(针对你的基础设施和部署在 Kubernetes 上的应用来说)。
Pulling 和 Discovery
Prometheus 是一个基于 pull 的监控系统,主要的 Prometheus 服务器会从你的 service 发现和拉取参数。这个发现和拉取系统跟动态的云本地环境(比如 Kubernetes )十分匹配,在这个云本地环境, Prometheus 跟 Kubernetes 整合在一起来发现、列举你正在运行的 service 。随着 service 的放大, Prometheus 开始自动从额外的 replicas 拉取参数。同样的道理,节点运行失败,然后 pod 在不同的节点上重新启动, Prometheus 会自动注意到,并且进行梳理。在我们的起步阶段,同样的 Prometheus 配置被用于我们的开发和产品环境,大大简化了测试。
标签
Prometheus 和 Kubernetes 中标签(键值对)的概念是一样的:用于在系统内挑选对象。 Prometheus 用这些标签来识别时序数据,用一系列的匹配标签在查询语言( PromQL )中挑选时序数据。
Kubernetes 在很多地方都使用标签。比如,要挑选 Pod 来组成 service ,或者启用更加先进的工作流,例如 canarying 。通过分享这个普遍的概念, Prometheus 和 Kubernetes 结合可以为开发人员带来较低的认知负荷。
**Exporters 和 Pod
Prometheus 的最佳实践就是本地指导你的 service ( service 是 Kuberentes 的一个组件)。但是对于不是本地指导的 service 来说(比如 Memcached , Postgres 等等),有可能的话,还是使用 exporter 比较好。 Exporter 是一个进程,跟你的 service 一起运行,将 service 的参数翻译成 Prometheus 能够理解的格式。
Kubernetes 有一个概念叫做 Pod (就是容器组),是一个便于管理和调度的单元。 Pod 是一个包含了多个容器的容器组,共享网络 namespace ,使用 loopback 定位( localhost/127.0.0.1 )就可以进行互相定位。 Pod 提供完美的抽象层,跟你想要监控的 service 结合一起部署 exporters 。
**Prometheus 和 Kubernetes :完美结合!
Prometheus 部署在 Kubernetes 的监控有了上述几个特性之后,不仅用起来简单方便,而且连贯统一。
之后,我们还会再发布一些帖子,内容主要是在 Kubernetes 上部署 Prometheus 的一些经验和教训。我们会在帖子中具体描述我们是如何用 Prometheus 管理我们的 service 和基础设施,以及我们是如何使用 Prometheus 来加快开发进程。
原文链接: https://www.weave.works/prometheus-kubernetes-perfect-match
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.