我们分享了Kubernetes的核心架构,编排概念,以及具体的设计和实现,我们再说下Kubernetes中监控相关的一些核心技术

Kubernetes整体架构中,也是由千奇百怪的方案到整体统一的一个方案的发展

而现在已经成为Prometheus为中心的一套整体统一的方案

而这个Prometheus项目,也是来源于谷歌的Borg体系,其原型系统,叫做BorgMon,是一个和Borg同时诞生的内部监控系统,希望能够通过对用户用好的方式,将Googole内部的设计理念,更加好的传递给用户的开发者

而整体的架构概念,Prometheus项目基本如下

图片

整体的过程可以简化为,利用Job或者exporters去搜集被监控对象的Metrics(监控指标数据),然后将其保存在一个TSDB 时序性数据库,比如OpenTSDB,InfluxDB等,方便后续进行搜索

有了这个核心监控机制,Prometheus剩下的组件就是配合这套机制的运行,比如Pushgateway,允许被监控的对象以Push的方式向Prometheus推送Metrics数据,而Alertmanager,可以根据Metric信息灵活的设置报警,而且自带的灵活配置的监控数据可视化的界面

具体的Metrics可以分为

1.具体的宿主机的监控数据,这部分的数据的提供,需要借助一个由Prometheus维护的Node Exporterg工具,以DamonSet的方式部署在了节点上,方便去抓取Metrics信息,其中包含的Node Exporter给暴露出的信息有 CPU 内存 磁盘等

2.来源于Kubernetes的API Server,Kubelet等上报的metrics API,这部分暴露了一些K8S的核心组件的监控指标,包括Api Server中的多个Controller的工作队列,请求的QPS,延迟信息,这些也是K8S的主要工作依据

3.Kubernetes的业务监控数据,关于Pod Node 容器, Service等主要Kubernetes核心概念的Metrics,关心细化到每一个容器的CPU 文件,网络的情况

这样的Kubernetes的重要扩展能力,称为Metrics Server,其中在Kubernetes社区中,Meitriv Service 是一种标准的API 规范,方便实现者进行解耦和上层调用.

而在Metrics Server规范出台之后,用户就可以直接通过API访问到监控数据了,如下所示

http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/namespaces/<namespace-name>/pods/<pod-name>

当访问这个Metrics的API时候,会返回一个Pod的监控数据,这些数据就是从Kubelet中采集而来的,包含了cAdVisor的监控数据

这个Metrics,是在Kube Aggregator模式之中体现的,就是类似Nginx,根据不同的后缀选择不同的实现项目

在这个机制下,可以拥有过重kube-aggregator,根据不同的URL选择后端的代理服务器,Aggregator模式是默认开启的,如果是手动DIY搭建的话,则需要在kube-apiserver的启动参数中加上了如下所示的配置

–requestheader-client-ca-file=<path to aggregator CA cert>

–requestheader-allowed-names=front-proxy-client

–requestheader-extra-headers-prefix=X-Remote-Extra-

–requestheader-group-headers=X-Remote-Group

–requestheader-username-headers=X-Remote-User

–proxy-client-cert-file=<path to aggregator proxy cert>

–proxy-client-key-file=<path to aggregator proxy key>

那样,我们就可以开启了Aggregator功能了

这样,我们就可以看到这个API可用了

这样我们就可以让Prometheus去采集就可以了

在本片中,我们介绍了Kubernetes当前监控体系的设计

介绍了Prometheus项目在这套体系中的地位,讲解了以Prometheus为核心的监控系统的架构设计.

然后详细的讲解了Kubernetes核心监控数据的来源,Metrics Server的具体工作原理,Aggregator APIServer的设计思想

我们就可以对Kubernetes的监控有了一个整体的认知,体会到在监控的发展趋向

在具体的监控指标的规划中,遵循了几种通用的USE原则和RED原则

USE原则值得是按照如下的几个维度划分

1.利用率,资源被有效了利用起来的平均时间占比

2.饱和率,资源拥挤的程度,比如工作队列的长度

3.错误率,错误的数量

而RED原则,按照的是如下的三个维度规划服务监控指标

1.每秒请求数量 Rate

2.每秒错误数量 Errors

3.服务响应时间 Duration

USE关心的是资源,RED关心的是服务,比如kube-apiserver或者某个应用的工作情况,这两个指标,就是我们讲解的kubernetes+prometheus中覆盖掉的

在监控体系中,对于数据的采集,有着Pull模式,还有着Push的模式,这两个模式的异同和优缺点呢?

Pull和Push的区别在于

Pull是交由被监控者提供一个Server并进行维护的

监控方控制采集的频率,但是这样的话,可能导致有些时候监控着拿不到数据的情况

Push则是交给被监控着主动上报一个数据,并监听者被动采集这个数据,推动作有利于被监听者自己控制上报数据和频率,对监听者有额外的压力,有信息丢失的风险

我更加倾向于使用Push的模式,因为使用Pull的话,可能会导致频率时间短的情况下,对Server的造成巨大的压力

发表评论

邮箱地址不会被公开。 必填项已用*标注