Kubernetes集群监控详解

介 绍nginx

Kubernetes在Github上拥有超过4万颗星,7万以上的commits,以及像Google这样的主要贡献者。Kubernetes能够说已经快速地接管了容器生态系统,成为了容器编排平台中的真正领头羊。shell

理解Kubernetes和它的Abstractions数据库

在基础设施层,Kubernetes集群比如是一组扮演特定角色的物理或虚拟机器。其中扮演Master角色的机器做为所有操做的大脑,并由运行在节点上的编排容器控制。后端

  • Master组件管理pod的生命周期,pod是Kubernetes集群中部署的基本单元。pod完成周期,Controller会建立一个新的。若是咱们向上或向下(增长减小)Pod副本的数量,Controller会相应的建立和销毁pod来知足请求。Master角色包含了下面组件:

°kube-apiserver – 为其余master组件提供APIsapi

°etcd – 具备一致性且高可用的key/value存储,用于存储全部内部集群数据缓存

°kube-scheduler – 使用pod规范中的信息来肯定运行pod的节点安全

°kube-controller-manager – 负责节点管理(检测节点是否失败)、pod复制和端点建立服务器

°cloud-controller-manager – 运行与底层云提供商交互的controller网络

  • Node组件是Kubernetes中的worker机器,由Master来管理。一个节点可能表示未一个虚拟机(VM)或者物理机,而Kubernetes均可以在它们上面运行。每一个节点都包含了运行pods所须要的组件:

°kubelet:处理Master和运行它的节点之间的全部通讯。它在使用container runtime时提供接口来部署和监视容器。框架

° kube-proxy:维护主机上的网络规则,处理在pods、host和外部世界之间包的传输。

°container runtime:负责在host上运行容器。虽然Kubernetes支持来自rkt、runc以及其余各式的container runtime,当下最流行的引擎仍是Docker。

从逻辑层面来看,Kubernetes部署由各类组件组成,每一个组件在集群中提供的服务都有特定的目的。

  • Pods是Kubernetes部署时的基本单元。一个pod由一个或者多个共享相同网络命名空间和IP地址的容器组成。最佳实践推荐咱们为每一个应用程序建立一个pod,这样你就能够分别扩展和控制它们。

  • Services设置在pods集合以前,给它们提供一致的IP地址以及一套策略用来控制对它们的访问。Service所针对的pod集合一般由label selector(标签选择器)决定。这样在升级或者蓝/绿部署期间很容易就让Service指向不一样的pod集合。

  • ReplicaSets由部署控制,并确保运行该部署所须要的pods数量。

  • Namespaces为诸如pods和services资源定义了一个逻辑命名空间。它们容许资源使用相同的名称,而单个命名空间中的资源名称必须惟一。Rancher使用命名空间和机遇角色的访问控制,为命名空间和其中运行的资源之间提供安全隔离。

  • Metadata根据容器的部署特性来标记容器。

监控Kubernetes

多个服务和命名空间能够跨基础设施分布。就像上面所说,每一个服务都是由pods组成,而pod能够包含一个或多个容器。有了如此多的移动部件,即使是监控一个小型的Kubernetes集群也会带来挑战。为了高效地监控它,这就须要深刻了解应用程序体系结构和功能。

Kubernetes提供了用于监控集群的工具:

  • Probes能积极地监控容器的健康状态。若是Probe检测到容器不健康,那么它就会重启容器。

  • cAdvisor是一个开源代理,它监控资源的使用状况并分析容器的性能。cAdvisor最初由Google建立,如今已经和Kubelet集成。它可以收集、聚合、处理和导出在给定节点上运行的全部勇气的度量指标,好比CPU、内存、文件和网络的使用状况。

  • kubernetes dashboard(仪表板)是一个附加组件,它能提供集群上运行的资源的概述信息。此外还提供了很是基本的方法来部署这些资源并和它们交互。

Kubernetes由从故障中自动回复的强大能力。若是进程发生崩溃,它能够从新启动pods,若是节点出现错误,它能从新分配pods。然而,尽管有如此能力,仍是会有不能解决问题的状况。为了检测到这些状况,咱们还须要额外的监控。

监控的层次

基础设施

服务器级别的问题会在工做负载中出现,所以全部集群都应该监控底层服务器组件

监控什么

CPU利用率。监控CPU既能显示系统和用户的开销,也能显示iowait。挡在云中或者任何网络存储中运行集群时,iowait会提示存储读写(i/o过程)的瓶颈等待时间。超额订阅的存储框架会影响性能。

内存使用状况。监控内存能够显示出有多少内存在使用,以及有多少可用内存,可用内存能够是空闲内存,也能够是缓存。出现内存限制的系统会开始进行交换(swap),交换会迅速下降性能。

磁盘压力。若是系统正在运行诸如etcd或者任何数据存储这样的写入密集型服务时,若是磁盘空间耗尽,那将是灾难性的问题。不能写入数据会出现崩溃,而这种崩溃会转化为真实世界的损失。有了像LVM这样的技术,就能很容易地根据须要增长磁盘空间,可是尽管如此仍是要监控它。

网络带宽。在当今千兆接口的时代,彷佛带宽永远都不会耗尽。然而,仅仅是出现一些异常的服务、数据泄漏、系统损坏或者DOS攻击,就可能耗尽全部的带宽致使停机。若是了解本身的正常数据使用状况和应用程序的模式,就能有效下降成本,有助于规划容量。

Pod资源。若是能知道pod须要什么资源的话,Kubernetes调度器就能最大化发挥做用。它能够确保在可用的节点上放置pod。在设计网络时,为了不剩余节点没法运行全部所需的资源的状况,须要预先考虑有多少节点可能会失败。使用云自动伸缩组之类的服务能够快速恢复,但要确保其他节点在失败节点恢复回来以前,可以处理增长的负载。

Kubernetes服务

组成Kubernetes Master或者Worker的全部组件(包括etcd)都对应用程序的健康运行相当重要。若是其中任何一个出现失败,监控系统就须要检测失败,修复它而且发送警告。

内部服务

最后一层是Kubernetes资源自己。Kubernetes公开了关于资源的度量,咱们还能够直接监控应用程序。虽然Kubernetes会尽力维持理想的状态,但若是它无能为力的话,咱们就须要一种由人类干预和解决问题的方法了。

用Rancher来监控

除了管理运行在任何提供者上、任何位置的Kubernetes集群外,Rancher还会监控这些集群中运行的资源,并在资源超过定义的阈值时发送警报。

如今已经有许多关于如何部署Rancher的教程。若是你尚未正在运行的集群,请先在这里暂停,进入咱们的快速上手指南:https://rancher.com/quick-start/。等到集群正在运行了再返回到这里开始监控。

集群概述可让你了解正在使用的资源和Kubernetes组件的状态。在咱们的例子中,咱们使用了78%的CPU、26%的RAM和11%的最大pod数量。

点击Nodes选项卡,你能够看到关于运行在集群上每一个节点的附加信息,点击具体节点时,能够看到关于该成员的健康情况。

Workloads选项卡显示了运行在集群上的pods。若是你尚未任何运行的pod,先发布一个运行nginx镜像的工做负载,把它扩展成多个副本。

当须要选择工做负载名称时,Rancher会弹出一个显示有关该工做负载的信息页面。在页面顶部,它展现了每一个pod所运行的节点,pod的IP地址以及它们的状态。点击任何一个pod会看到更多内容,如今咱们看到了关于该pod的详细信息。右上角的汉堡菜单图标能让咱们和pod交互,经过该图标,咱们能够执行shell、查看日志或者删除pod。

Other选项卡展现了不一样Kubernetes资源的信息,包括ingress或LoadBalancer类型的服务的Load Balancing,其余服务类型的Service Discovery以及在集群中配置卷的Volumes。

使用Prometheus监控

Rancher UI中能够看到的信息对故障排除很是有帮助,不过这并非在集群生命周期的每一时刻积极追踪集群状态的最佳方法。咱们将使用Prometheus,它是Kubernetes公司的一个兄弟项目,由Cloud Native Computing Foundation负责维护和运营。咱们还将使用到Grafana工具,它能把时间序列数据转换成漂亮的图形和仪表板显示。

Prometheus是一个用来监控系统和生成警报的开源应用程序。从服务器到应用程序、数据库、甚至单个进程,它几乎能够监控任何东西。在Prometheus的词表中,它监控targets,目标的每一个单位称为metric。检索关于目标信息的行为称为scraping(抓取)。Prometheus将在指定的时间间隔内采集目标,并把信息存储在时间序列数据库中。Prometheus拥有本身的脚本语言PromQL。

Grafana也是开源的,能够做为Web应用程序运行。虽然它常常和Prometheus一块儿使用,但也支持后端数据存储,如fluxDB、Graphite、Elasticsearch等等。Grafana能够很容易地建立图形,而且把它们合并称仪表板,而这些仪表板由一个强大的身份验证和受权层保护,它们还能够和其余仪表板进行共享而不须要访问服务器自己。Grafana在其对象定义中大量使用JSON,这样它的图形和仪表板都很是容易移植,而且版本控制很是方便。

在Rancher的应用程序目录中已经同时包含了Prometheus和Grafana,咱们只需点击几下鼠标就能部署它们了。

安装Prometheus和Grafana

访问集群的Catalog Apps页面,搜索Prometheus。安装它的同时还会安装Grafana和AlertManager。对本文来讲,全部内容都使用默认值就能够了,但若是考虑到生产部署,请阅读Detailed Descriptions下的信息,看看图表中有多少配置可供使用。

单击Launch,Rancher将把应用程序部署到集群中,几分钟以后,你就能看到prometheus命名空间下全部工做负载处于Active状态。

默认状况下使用了xip.io设置Layer7 ingress,咱们能够在Load Balancing选项卡上看到它,单击连接打开Grafana仪表板。

Prometheus的安装还在Grafana中部署了几个仪表板,所以咱们能够立刻看到关于集群的信息,查看它的性能。

总 结

Kubernetes能尽量保持应用程序的运行,但这并不说明咱们就不须要了解应用程序运行的状况。当你开始使用Kubernetes工做时,还须要去部署监控系统,帮助你了解状况并做出决策。

Prometheus和Grafana将帮助你完成这一项工做,若是你使用了Rancher,那部署这两个应用程序只须要短短几分钟。而在即将发布的Rancher 2.2中,配备了彻底集成的Prometheus和Grafana,加强全部Kubernetes集群的可见性,同时确保不一样项目与用户之间的隔离。Rancher也所以成为惟一一个在多集群、多租户环境中支持Prometheus的解决方案。

使用Prometheus监控Rancher管理的Kubernetes环境,只须要两个步骤:

  1. 选择集群

  2. 一键启动监控

你能够在此了解如何更加简单快速地在多Kubernetes集群和多租户环境中使用Prometheus监控!

相关文章
相关标签/搜索