刘明 译 分布式实验室
我们的行业长时间都一直依赖于微服务架构去快速安全的交付软件。而微服务的出现为容器技术的出现铺平了道路,使得我们重新构思如何去构建和交付应用程序。Docker在2013年突然进入大家的视野,这对致力于基础设施现代化以及云迁移的公司来说,像Docker这样的工具对于快速、大规模交付应用程序变得尤其重要。
但是,快速发展的同时也带了挑战——容器在进入编排时也带来了不小的复杂性。直到引入Kubernetes:一个开源容器编排系统,它可以自动化部署,自动扩缩容并且可以进行容器化应用管理。Kubernetes控制面板是控制和管理你的基础设施的。Kubernetes最初由谷歌于2014年推出,现在由云原生计算基金会(CNCF)维护(顺便提一下,谷歌帮助组建了Kubernetes,以确保它保持自由和有竞争力)。如果您使用Docker来容器化您的应用的话,那么使用Kubernetes来作为容器编排是自然而然的(当然还有有其他的编排器,例如Docker Swarm和Apache Mesos,但是Kubernetes已经成为了容器编排的霸主,并且我认为在以后也不会发生任何改变)。
在这系列文章的第一部分,我主要涵盖了Kubernetes监控带来的挑战和主要的监控数据源。随后,我会深入讲解Kubernetes的监控以及Docker的部署,下面带来的实战将会概述数据源。
Kubernetes监控:挑战
在这个全新的动态特征领域,你的应用程序不断地在移动。
在Kubernetes之前,您只是通过跨云平台(公有和私有,以及不同的云服务商)来分布式部署应用程序。现在您可以更简单来进行分布式部署,当然那也会有一系列新的问题。
采用Kubernetes就像是将大型项目进行微服务化,意味着会有更多、更小的内容需要监控。
您可能听说过这样一句话,"对待您的基础设施要像对待牛而不是对待宠物一样"。Kubernetes就像是这种牲畜方法的缩影,使其易于实现高容量和短暂的基础设施。尽管如此,持续追踪您的Kubernetes Pod和像容器的标签和注释等标识是一项关键任务。
运行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可以监控上述四种数据源,你也会注意到我们仅仅只是在讨论Kubernetes监控[4]而没有讨论运行在Kubernetes上的应用(这可能和你听到的关于Kubernetes监控的一切都是一致的)。在我下篇文章中,我会讲述使用Prometheus进行Kubernetes和Docker监控,讨论为什么它能够那么好的契合Kubernetes生态圈以及它的不足之处。
相关链接:
https://github.com/prometheus/node_exporter
https://medium.com/jorgeacetozi/kubernetes-node-components-service-proxy-kubelet-and-cadvisor-dcc6928ef58c
https://github.com/kubernetes/kube-state-metrics
https://sensu.io/solutions/container-monitoring