作者:陈峻
来源:http://51cto.com
如今,Kubernetes在GitHub上已经拥有了超过58000万颗点赞之星,而且它在全球范围内有着2200多名在册的贡献者。可以说,它已然成为了容器编排方面的实际标准。不过,在解决并运行分布式微服务应用的过程中,它时常也会面临一些严峻的挑战。其中,广为开发与运维人员所提及的挑战之一便是:对于Kubernetes的监控问题。面对复杂的分布式环境,大家往往需要通过开发各种开源的监控方案,以满足实际应用的需求。
当前,在Kubernetes生态系统及其社区中,有着林林总总的Kubernetes工具。它们中有的能够通过日志来辅助检测状态;有的则是一种数据收集器;而另一些则提供了操作Kubernetes的界面。有些是Kubernetes原生的,有些则是开发人员自行研发的。在本文中,我们将通过优缺点的比较,向您介绍十大流行的Kubernetes开源监控工具。
Prometheus
优点:Kubernetes原生,易于使用,拥有庞大的社区。
缺点:可扩展性与存储能力不强。
由于具有与大量数据源的集成能力,因此Grafana在业界备受欢迎。同时,强大的Grafana具有警报、注释、过滤、特定数据源查询、可视化仪表板、身份验证与授权、以及跨组织协作等多种功能。
优点:拥有大型生态系统,以及丰富的可视化与警报功能。
缺点:未能针对Kubernetes的日志管理进行优化。
ELK(ala Elastic Stack)
就Kubernetes的日志而言,最受欢迎的开源解决方案当属ELK Stack。ELK是Elasticsearch、Logstash和Kibana的首字母缩写,其实它包含了第四个组件:Beats。它们都属于轻量级的数据传送器。虽然堆栈中的每一个组件都仅负责日志管道中的不同阶段,但是它们组合在一起,却能为Kubernetes提供了一个全面而强大的日志解决方案。
其中,Logstash管道能够在发送日志并对其进行存储之前,完成数据的汇总和处理。具有可扩展性的Elasticsearch,即使在存储和搜索数百万个文档时,也能具有不俗的表现。其对应的Kibana平台,则能够出色地为用户提供分析数据所需的可视化界面。
堆栈中所有不同的组件都可以被轻松部署到Kubernetes环境之中。您可以使用各种部署配置、以及helm图表,将不同的组件作为pod予以运行。通过部署,我们可以将Metricbeat和Filebeat作为守护进程的采集器,将Kubernetes的元数据附加到对应的文档中。
优点:拥有庞大的社区,易于在Kubernetes中部署与使用,具有丰富的分析功能。
缺点:扩展起来较为麻烦。
Fluentd/Fluent Bit
Fluentd在Logstash的基础上进行了相关性能的改进,因此也广受Kubernetes用户的欢迎。在工具设计方面,Fluentd拥有出色的性能、可扩展性和可靠性。各种简单方便的输入与输出,并不会对其性能产生任何影响。针对处理传输中的故障、以及数据过载问题,Fluentd使用磁盘或内存来进行缓冲和队列。同时,Fluentd通过支持多种配置选项,以确保提供更为灵活的数据管道。
Kubernetes原生的Fluentd和Fluent Bit都隶属于CNCF项目。它们不但可以与Kubernetes无缝集成,而且能够在仅占用少量资源的情况下,使用相关的pod和容器元数据来丰富各类数据。
优点:具有庞大的插件生态系统,提供优异的性能与可靠性。
缺点:配置较为麻烦。
cAdvisor(https://github.com/google/cadvisor)
作为一款开源的代理工具,cAdvisor能够通过收集、处理和导出数据,来展示那些正在运行的容器性能,及其资源使用情况。它能够以Kubelet二进制文件的形式,被内置集成到Kubernetes之中。
与其他代理工具不同,cAdvisor并不是被部署在每个pod中,而是在节点级别上。它能够自动发现计算机上所有正在运行的容器,并收集到诸如内存、CPU等系统网络指标。
作为一款基础性的本地开源监视工具,cAdvisor具有易用性,用户可以开箱即用(out-of-the-box)的方式发现Prometheus的参数指标。不过,要想成为一款全方位的监视解决方案,cAdvisor尚有持续改进的空间。
优点:内置于Kubernetes,易于部署和使用,能够支持多个端点。
缺点:过于基础,缺乏分析的深度,且功能有限。
kubewatch(https://github.com/bitnami-labs/kubewatch)
顾名思义, kubewatch能够监控那些特定的Kubernetes事件,并将此类事件以通知的形式推送到诸如Slack和PagerDuty的端点上。具体而言,kubewatch能够通过监控,来获悉Kubernetes指定资源的变化,其中包括:守护进程集、部署、pod、副本集、复制控制器、服务、密码、以及各种配置映射。Kubewatch不但易于配置,而且能够使用helm来进行自定义部署。
优点:支持多个端点,且易于部署。
缺点:只是一个监控器。
kube-ops-view(https://github.com/hjacobs/kube-ops-view)
虽然kube-ops-view项目的官方文档已明确指出:它不是一款监控工具,不能对生产环境进行监控与报警。但是它可以为您提供Kubernetes集群、不同部署节点、以及节点上不同Pod的运行状态信息。
资料来源:GitHub
优点:易于部署与使用。
缺点:作为只读工具,不太适用于管理Kubernetes资源。
kube-state-metrics
作为一款Kubernetes的原生监控指标服务,kube-state-metrics能够侦听各种Kubernetes API,并能够生成诸如Pod、服务、部署、以及节点等,有关对象的状态指标。您可以通过链接:https://github.com/kubernetes/kube-state-metrics/tree/master/docs,来获悉kube-state-metrics能够生成的完整指标列表。
kube-state-metrics虽然极其简单易用,但是由于它只能提供单一的指标服务,因此需要更多的改进,才能集成到完整的Kubernetes监控解决方案之中。kube-state-metrics能够以纯文本格式,导出HTTP端点上的指标。那些使用Prometheus的用户会经常使用到它。
优点:属于Kubernetes原生,易于使用,能与Prometheus无缝集成。
缺点:仅提供单一的指标生成服务。
Jaeger(https://github.com/jaegertracing/jaeger)
目前,分布式跟踪正在逐渐成为针对Kubernetes环境监视和故障排除的优秀实践方式。Jaeger正是此类开源跟踪工具中的佼佼者。
2016年,Uber在其他现有跟踪工具:Zipkin和Dapper的启发下,开发出了开源式的Jaeger。它能够帮助用户执行根本原因分析,性能优化和分布式的事务监控。
Jaeger具有适用于Go、Java、Node、Python和C++应用程序的OpenTracing-based特征。它能够根据每一个服务或端点,来使用一致性的前端信息采样频率。同时,它也支持Cassandra、Elasticsearch、Kafka、以及内存等多种存储后端模式。
Jaeger具有多种上手模式:用户既可以使用全新的Jaeger Operator(https://www.jaegertracing.io/docs/1.13/operator/),也可以使用守护进程来进行配置,另外它还有一个适用于测试和演示目的的all-in-one部署方式。
优点:易于部署,且能够通过用户界面来检测各种监控选项。
缺点:提供有限的后端集成。
Weave Scope
由Weaveworks开发的监视工具--Weave Scope,能够让您获悉对于Kubernetes集群的操作洞见。
虽然和kube-ops-view有几分类似,但Weave Scope主要是通过更好的用户界面,来提升服务等级;并允许用户在其界面上运行各种诊断命令,来管理不同的容器。
图片来源:GitHub
您可以通过该应用工具,来有效地掌控部署环境,并在其上部署自己的基础架构,以及不同的组件连接。
优点:提供了“零配置”式的用户界面。
缺点:其分析深度欠佳。
总结
上述所列举的十大Kubernetes开源工具,只是业界所有工具中的“冰山一角”。它们在不同程度上为用户提供了设计Kubernetes堆栈的可观察性。您可以通过设置小型的沙箱环境,从小规模的测试开始,进行尝试性的测试和部署,进而判断出哪一款才是您真正所需要的工具。
ps:看更多干货,加入技术交流微信群可以关注我的公众号360linker