监控Kubernetes——挑战和数据源

 刘明 译 分布式实验室 

图片

我们的行业长时间都一直依赖于微服务架构去快速安全的交付软件。而微服务的出现为容器技术的出现铺平了道路,使得我们重新构思如何去构建和交付应用程序。Docker在2013年突然进入大家的视野,这对致力于基础设施现代化以及云迁移的公司来说,像Docker这样的工具对于快速、大规模交付应用程序变得尤其重要。 
但是,快速发展的同时也带了挑战——容器在进入编排时也带来了不小的复杂性。直到引入Kubernetes:一个开源容器编排系统,它可以自动化部署,自动扩缩容并且可以进行容器化应用管理。Kubernetes控制面板是控制和管理你的基础设施的。Kubernetes最初由谷歌于2014年推出,现在由云原生计算基金会(CNCF)维护(顺便提一下,谷歌帮助组建了Kubernetes,以确保它保持自由和有竞争力)。如果您使用Docker来容器化您的应用的话,那么使用Kubernetes来作为容器编排是自然而然的(当然还有有其他的编排器,例如Docker Swarm和Apache Mesos,但是Kubernetes已经成为了容器编排的霸主,并且我认为在以后也不会发生任何改变)。
在这系列文章的第一部分,我主要涵盖了Kubernetes监控带来的挑战和主要的监控数据源。随后,我会深入讲解Kubernetes的监控以及Docker的部署,下面带来的实战将会概述数据源。


Kubernetes监控:挑战

图片


Kubernetes使得团队更容易去管理他们的容器——在自动维护所需要的状态的同时调度和供应它们。Kubernetes核心的价值是作为一个公共平台来服务,它可以将你的应用部署在任何他们可以运行的地方,无论是AWS,GCP,Azure或者是裸机上。当然也必须强调一点,它提供强大的功能自动化也带来了很多挑战,特别是在性能监控上。无论部署的规模如何,你都需要知道在部署中有多少可用资源,也需要了解你部署的应用和容器的健康状态。就像是微服务让我们思考了如何去构建我们的应用,Kubernetes要求我们改变传统的监控方式——容器编排的动态特征要求随后采用动态方法进行监控。
下列是我所见到的挑战:
  • 在这个全新的动态特征领域,你的应用程序不断地在移动。

  • 在Kubernetes之前,您只是通过跨云平台(公有和私有,以及不同的云服务商)来分布式部署应用程序。现在您可以更简单来进行分布式部署,当然那也会有一系列新的问题。

  • 采用Kubernetes就像是将大型项目进行微服务化,意味着会有更多、更小的内容需要监控。

  • 您可能听说过这样一句话,"对待您的基础设施要像对待牛而不是对待宠物一样"。Kubernetes就像是这种牲畜方法的缩影,使其易于实现高容量和短暂的基础设施。尽管如此,持续追踪您的Kubernetes Pod和像容器的标签和注释等标识是一项关键任务。


Kubernetes 监控:数据源

image.png



本质上,监控工具从下列四种来源采集Kubernetes的元数据:
  • 运行Kubelet的宿主机。Kubernetes的宿主机资源是有限的,所以监控这些资源是尤其重要的。有许许多多种方法获取宿主机的信息,但是最常用的使用Prometheus出口节点[1]来从Kubernetes宿主机中提取数据,并在HTTP端点上公开系统资源遥测数据(例如cpu使用量以及内存)。

  • Kubernetes进程,AKA Kubelet指标。包括apiserver,kube-scheduler和kube-controller-manager(kube控制管理器)。这些可以提供给您Kubernetes节点的详细数据以及节点运行的任务。

  • Kubelet内置的cAdvisor。这里[2]做了一个很好的总结,但实际上Kubelet附带了对cAdvisor的支持,它可以收集、集合、处理以及输出您容器的运行指标。cAdvisor(它本身也支持Docker容器)提供给您每个容器的使用情况,持续追踪资源隔离参数和历史资源使用情况。因为Kubernetes控制面板可以分配使用内存,并利用cAdvisor进行跟踪。

  • kube-state-metrics可以给您提供集群级别的信息——从全局的视角来告诉您Kubernetes集群发生了什么,例如您配置过的所有Pod当前的状态。kube-state-metrics会权衡所有的Kubernetes服务并且收集他们当前的状态信息,例如当前有多少容器在运行、其中有多少正处于某种特殊状态,也会提供他们当前是否处于不健康的状态或是处于可用状态等。从这个README文件[3]可知,kube-state-metrics“监听Kubernetes API server的状况”。


接下来:容器状态和使用Prometheus进行数据采集

image.png


如果你在家进行监控的话,你可能已经注意使用Prometheus可以监控上述四种数据源,你也会注意到我们仅仅只是在讨论Kubernetes监控[4]而没有讨论运行在Kubernetes上的应用(这可能和你听到的关于Kubernetes监控的一切都是一致的)。在我下篇文章中,我会讲述使用Prometheus进行Kubernetes和Docker监控,讨论为什么它能够那么好的契合Kubernetes生态圈以及它的不足之处。
相关链接

  1. https://github.com/prometheus/node_exporter

  2. https://medium.com/jorgeacetozi/kubernetes-node-components-service-proxy-kubelet-and-cadvisor-dcc6928ef58c

  3. https://github.com/kubernetes/kube-state-metrics

  4. https://sensu.io/solutions/container-monitoring


原文链接:https://www.cncf.io/blog/2019/01/09/monitoring-kubernetes-part-1-the-challenges-data-sources/

相关文章

Docker是什么Docker是 Docker.Inc 公司开源的一个基于 LXC技...
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng...
镜像操作列出镜像:$ sudo docker imagesREPOSITORY TAG IMA...
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p...
在 Docker 中,如果你修改了一个容器的内容并希望将这些更改...
在Docker中,--privileged 参数给予容器内的进程几乎相同的权...