Docker是一种开源应用程序容器引擎,可让开发人员打包其应用程序并将数据包依靠到移植容器中,然后在任何流行的Linux/Windows/Mac机器上发布它们。容器镜子正在成为一种新的标准化软件交付方法。为了获得Docker容器的运行状态,用户可以通过Docker的统计命令命令获得当前操作容器的统计信息。
显然,如果我们要存储和可视化监视数据,则无法满足Docker的统计数据。
为了解决Docker Stats(存储和显示)的问题,Google的开源Cadvisor诞生了。循环不仅可以收集机器上的所有容器信息,还可以提供基本的查询接口和HTTP接口,以促进其他组件,例如Prometheus for Data Grasptake,或使用Cadvisor + Influxdb + Grafana.CADVISOR。节点计算机上资源和容器的数据收集,包括CPU使用,内存使用情况,网络吞吐量和文件系统使用情况。
监视原则
Cadvisor使用GO语言开发并使用Linux的CGroup来获取容器的资源使用信息。它在K8S中集成为Kubelet中的默认启动项目,这是正式标准的。
Docker是基于
cGroups不仅可以用于容器资源,还可以提供容器的资源使用。不管使用哪种监视,基础数据是从CGroups派生的
Cgroups的Working目录/SYS/FS/CGROUP包含CGROUP的所有内容。Croups包含许多子系统,这些子系统可以限制和监视CPU,内存,PID,PID,DISK IO和其他资源等资源。
循环范围的操作原理,如下所示
Prometheus是一个开源监视警报系统。介绍功能包括多维数据模型,灵活的查询语句Promql和Data Visual Display等。
建筑学
基本的
Prometheus的基本原理是通过HTTP协议定期抓取监视组件的监视。只要提供相应的HTTP接口,任何组件都可以连接到监视。不需要SDK或其他集成过程。此组件非常适合虚拟化的环境监视系统,例如VM,Docker,Kubernetes等。输出的接口称为enporter。在存在的情况下,互联网公司常用的大多数组件都具有可以直接使用的出口商,例如varnish,haproxy,nginx,mysql,mysql,linux系统信息(包括磁盘,内存,CPU,CPU,网络等)。)。
服务过程
操作员是由CoreOS设计的框架,可简化复杂和状态应用程序管理。它是一个感知应用状态状态的控制器。通过扩展Kubernetes API从创建,管理和配置应用程序示例。
操作根据CustomResourcedefinition(CRD)扩展了新的应用程序资源,并通过控制控制器来确保应用程序处于预期状态。例如,ETCD操作员模拟了通过三个步骤管理ETCD群集的行为:
为了轻松管理和部署Kubernetes中的Prometheus,我们使用ConfigMap来管理Prometheus配置文件。每个时间Prometheus配置文件已升级,我们需要手动删除运行的POD实例,以便Kubernetes可以将最新的配置文件使用到最新的配置文件到创建Prometheus。如果应用程序实例的数量更多,则部署和升级Prometheus过程的过程很麻烦且效率低下。
本质上,普罗米修斯属于典型的状态,它包含一些独特的操作和维护管理和配置管理方法。这些方法不能通过本地提供的应用程序管理概念来自动化,以简化此类管理的复杂性,以简化此类管理的复杂性。CoreOS的应用程序首先引入了操作员的概念,并首先启动了用于kubernetes的运行和管理ETCD的ETCD操作员,然后启动了Prometheus操作员。
从概念的角度来看,操作针对Kubernetes的形式的基本资源和控制器的概念。HELP用户创建,配置和管理复杂的状态应用程序。结果,常见操作以及特定的操作以及维护自动化特定的自动化实现应用程序。
在kubernetes中,我们使用部署,damenset,statefulset来管理工作负载的应用,使用服务,入口来管理应用程序,并使用configmap和秘密来管理应用程序配置。在集群中,创建,更新和已删除的操作集群将转换为事件。Kubernetes的控制器管理器负责监视这些事件并触发相应的任务以满足用户期望。这样,我们已成为一个陈述。用户只需要关心应用程序的最终状态即可。其他人可以通过Kubernetes帮助我们完成。这样,我们可以大大简化应用程序配置管理的复杂性。
除了这些天然资源资源外,Kubernetes还允许用户添加自己的自定义资源,并实现自定义控制器以实现Kubernetes的扩展。
如下所示,它是普罗米修斯操作员的建筑图:
Prometheus的帖子是一组用户定义的CRD资源和控制器的实现。Prometheus操作员负责监视这些自定义资源的变化,以及对这些资源(例如Prometheus Server和配置)的定义的自动化管理。
简而言之,普罗米修斯操作员可以帮助用户自动化创建并管理Prometheus Server及其相应的配置。
水平POD Autoscaler是K8S中的概念,可以自动调整POD的数量以实现指定的目标值。
POD级别(水平POD Autoscaler)可以自动扩展基于CPU利用率的复制机,部署,replicaset和stateFultset。适用于无法扩展的对象,例如Daemonset。
Heapster是一种容器群集监视和性能分析工具,并且自然支持Kubernetes和CoreOS。
HEAPSTER首先从K8S Master获得群集的所有节点信息,然后通过这些节点上的Kubelet获得有用的数据,然后从Cadvisor获得Kubelet的数据。所有获得的数据都将其推向堆配置的后端存储,即HAEPSTER配置的后端存储(还支持数据的可视化。后端存储 +视觉方法,例如InfluxDB + Grafana。
堆可以在节点节点上收集童数据。您还可以根据Kubernetes的资源类型(例如POD,名称空间域)收集资源,并可以获得其CPU,内存,网络和磁盘的指标。默认的度量数据聚合时间间隔为1分钟。
注意:不建议使用Kubernetes 1.11使用堆。就SIG仪器而言,这是新的Kubernetes监视模型不断努力的一部分。仍将堆用于自动扩展的群集应迁移到指标 - 服务器和自定义索引API。
可以通过在开始时获得数据并逐渐放弃来获得Kubernetes群集资源监视。它是群集的核心监视数据的聚合物。在Kube-Aggregator中,我们需要在Apiserver中启动相关参数。
它不是Kube-abiserver的一部分,而是通过聚合器的插入机制,可以将外部服务与Kube-aperver在独立部署下统一。
聚合器
“”
Kubernetes API扩展到使用聚合层。用户可以通过其他API而不是Kubernetes核心API提供的功能来扩展Kubernetes。此处的其他API可以准备就绪 - 诸如Metrics Server或您自己开发的API之类的API。聚集层与自定义资源不同。后者的目的是允许Kube-aperver了解新对象类别(类)。
“
“”
聚合层在kube-aperver进程中运行。在扩展资源注册之前,聚合层无需执行任何操作。要注册API,用户必须添加Apiservice对象才能使用它来“应用”在“应用”中的URL路径然后,Kubernetes API。然后,聚合层将转发API路径的所有内容(例如/piS/myextension.mycompany.io/v1/)将其转发到注册的Apiservice。
“
“”
APIService的最常见实现是在集群中的POD中运行扩展API服务器。如果您使用扩展API服务器来管理群集中的资源,那么扩展API服务器(也写为“ Extension-Apiserver”)通常是需要与一个或多个控制器一起使用。Apiserver-BuiLELDER库还同时提供构建的API服务器和控制器框架代码。
“
在这里,聚合器Apiserver的工作原理可以使用下面显示的示意图来表达清晰:
由于API服务器的API-Server在所有数据中都持续到ETCD中,因此很明显,K8S本身无法处理此频率的集合,并且此监视数据快速变化和所有临时数据。因此,公制服务器的概念诞生了。
在出现指标服务器之后,新的Kubernetes监视体系结构将成为下面的样子
注意:
已经有循环,堆,度量标准服务器,几乎所有由容器运行的指标都可以获得,但是以下情况是无能为力的:
这些是Kube-State-Metrics提供的内容。它是基于客户端开发的。Kubernetes API已打开,Kubernetes的结构化信息转换为指标。
Kube-State-Metrics和Metrics-Server
在运行过程中,我们想知道服务操作状态,是否重新启动POD,扩展和收缩是否成功以及POD的状态是什么样的。目前,需要kube-state-metrics。
Kubernetes的监视指标分为两种类型
以下是对官方指标项目的介绍:
资源指标API(核心API)
自定义指标API:
核心指标仅包括节点和POD CPU,内存等。一般而言,核心指标足以像HPA一样,但是如果您想根据自定义指标实现HPA:如果您请求QPS/5XX错误编号,则需要要使用自定义指标。在存在时,普罗米修斯通常提供Kubernetes中的自定义指标,然后用于汇总Apiserver以达到与核心指标(Metric-Server)相同的效果。
度量值(例如重命名的指标等)之后,通过自定义指标API返回HPA,HPA通过指标的值扩展了部署/replicaset。
适配器,作为扩展 - 契约器(即由其本身实施的POD)充当要求Prometheus的代理Kube-apiserver的功能。
实际上,K8S-Prometheus-Adapter既包含自定义指示器和核心指标,也就是说,如果安装了Prometheus并且收集了指标,则K8S-Prometheus-Adapter可以替换指标服务器。
普罗米修斯操作员
kube-prohoometheus
在集群外部署
Kube-proheettheus既包含了与Prometheus相关组件的操作员和部署,又包含常用Prometheus自定义监视,其中包括以下以下组件
我们的方法实际上类似于Kube-Proometheus的想法,但我们不使用操作员。它是以下组件的Yaml文件::
当然,Kube-Prometheus还提供了Prometheus社区提供的掌舵图表:https://github.com/prometheus-community/charts/main/kube-prometheus-comp-promethe-prometheus-chart-
这样做的原因是最灵活的,尽管第一次创建这些脚本更加麻烦。但是,有另一个原因是,当我们当时部署整个Prometheus监视系统时,Kube-Prometheus项目仍然很早就很早并且没有吸引我们的注意力。
