版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 k8s 集群优化之监控平台的建立 运维进阶 优化首先需要建立起一个目标,到底优化要达到一个什么样的目标,期望满足什么样的需求,解决业务增加过程中发生的什么问题。监控平台的建立是为Kubernetes集群及运行的业务系统得出系统的真实性能,有了现有系统当前的真实性能就可以设定合理的优化指标,基本基线指标才能合理评估当前Kubernetes容器及业务系统的性能。本文介绍了如何建立有效的监控平台。如果您想了解更多提升整体集群性能和资源利用率的相关知识,可以关注文章后所附介绍。1. 监控平台建设所有的优化指标都是建立在对系统的充分了解上的,常规基于Kubernetes的监控方案有以下大概有种,我们就
2、采用比较主流的方案,也降低部署成本和后期集成复杂度。主流也是我们选取的方案是Prometheus +Grafana +cAdvisor +(要部署:Prometheus-operator, met-ric-server),通过Prometheus提供相关数据,Prometheus定期获取数据并用Grafana展示,异常告警使用AlertManager进行告警。实际部署过程中实施也可以考虑使用Kube-prometheus项目(参见注释1)整体部署节省大量工作,以下是官方架构图,涉及到组件如下:Prometheus OperatorPrometheusAlertmanagerPrometheus
3、 node-exporterPrometheus Adapter for KubernetesMetrics APIskube-state-metricsGrafana上图中的Service和ServiceMonitor都是Kubernetes的资源,一个ServiceMonitor可以通过labelSelector的方式去匹配一类Service,Prometheus也可以通过labelSelector去匹配多个ServiceMonitor。主要监控范围分为:资源监控,性能监控,任务监控,事件告警监控等,因为本篇主要讲的是性能优化,所以侧重点放在性能监控上,但是优化是全方位的工作所以也会涉及到
4、资源,健康度,事件,日志等,另外就针对每种监控类型的告警管理。*注释1:项目地址如下,就部署方式可参见项目介绍在此就不赘述:/coreos/kube-prometheus2.数据采集各维度的数据采集主要通过以下方式:部署cAdvisor(参见注释2)采集容器相关的性能指标数据,并通过metrics接口用Prometheus抓取;也可根据需求可将各种监控,日志采集的Agent部署在独立的容器中,跟随Pod 中的容器一起启动监督采集各种数据,具体可根据实际需求;通过Prometheus-node-exporter采集主机的性能指标数据,并通过暴露的metrics接口用Prometheus抓取通过e
5、xporter采集应用的网络性能(Http、Tcp等)数据,并通过暴露的metrics接口用Prometheus抓取通过kube-state-metrics采集k8S资源对象的状态指标数据,并通过暴露的metrics接口用Prometheus抓取通过etcd、kubelet、kube-apiserver、kube-controller-manager、kube-scheduler自身暴露的metrics获取节点上与k8S集群相关的一些特征指标数据。*注释2:node-exporter:负责采集主机的信息和操作系统的信息,以容器的方式运行在监控主机上。cAdvisor:负责采集容器的信息,以容器
6、的方式运行在监控主机上。3.资源监控說明资源监控主要分为这几大类:如:CPU,内存,网络,磁盘等信息的监控(其它还有对GPU等监控),另外就是对各种组件服务的资源使用情况,自定义告警阈值等(简单的告警获可以沿用内部已有的,复杂的告警指标需自己根据集群和业务特征通过获取参数进行计算或撰写PromQL获取),建立全方位的监控指标(主要监控指标项可参见Kube-prometheus部署后的相关信息,在此就不赘述),主要监控项如下;容器 CPU,Mem,Disk, Network等资源占用等情况;Node、Pod相关的性能指标数据;容器内进程自己主动暴露的各项指标数据;各个组件的性能指标涉及组件如:E
7、CTD,API Server, Controller Manager, Scheduler, Kubelet等;4. 主要指标监控主要的监控指标,是依据Google提出的四个指标:延迟(Latency)、流量(Traffic)、错误数(Errors)、饱和度(Saturation)。实际操作中可以使用USE或RED(详见注释3和4)方法作为衡量方法,USE用于资源,RED用于服务,它们在不同的监控场景有不同维度描述,相结合能够描述大部分监控场景指标,合理的使用以下监控指标,有助用户判断当前K8S集群的实际运行情况,可根据指标变化反复优化各个参数和服务,使其达到更加的状态,更详细的监控指标信息,
8、可参见Kube-prometheus相关监控信息。4.1 Cadvisor指标采集cAdvisor(详见参考1)提供的Container指标最终是底层Linux cgroup提供的。就像Node指标一样,但是我们最关心的是CPU/内存/网络/磁盘。1CPU(利用率)对于Container CPU利用率,K8S提供了每个容器的多个指标:#过去10秒容器CPU的平均负载container_cpu_load_average_10s#累计用户消耗CPU时间(即不在内核中花费的时间)container_cpu_user_seconds_total#累计系统CPU消耗的时间(即在内核中花费的时间)cont
9、ainer_cpu_system_seconds_total#累计CPU消耗时间container_cpu_usage_seconds_total#容器的CPU份额container_spec_cpu_quota#容器的CPU配额container_spec_cpu_shares#查询展示每个容器正在使用的CPUsum( rate(container_cpu_usage_seconds_total 5m)by(container_name)# 过去10秒内容器CPU的平均负载值container_cpu_load_average_10scontainer=,id=/,image=,name=,
10、namespace=,pod=#累计系统CPU消耗时间sum(rate(container_cpu_usage_seconds_totalname=.+1m) by (name) * 100#全部容器的CPU使用率总和,将各个CPU使用率进行累加后相除sum(rate(container_cpu_usage_seconds_totalcontainer_name=webapp,pod_name=webapp-rc-rxli11m) / (sum(container_spec_cpu_quotacontainer_name=webapp,pod_name=webapp-rc-rxli1/1000
11、00)2CPU(饱和度)sum(rate(container_cpu_cfs_throttled_seconds_total5m)by (container_name)3内存cAdvisor中提供的内存指标是从可参见官方网站,以下是内存指标(如无特殊说明均以字节位单位):#高速缓存(Cache)的使用量container_memory_cache# RSS内存,即常驻内存集,是分配给进程使用实际物理内存,而不是磁盘上缓存的虚拟内存。RSS内存包括所有分配的栈内存和堆内存,以及加载到物理内存中的共享库占用的内存空间,但不包括进入交换分区的内存container_memory_rss#容器虚拟内存
12、使用量。虚拟内存(swap)指的是用磁盘来模拟内存使用。当物理内存快要使用完或者达到一定比例,就可以把部分不用的内存数据交换到硬盘保存,需要使用时再调入物理内存container_memory_swap#当前内存使用情况,包括所有使用的内存,不管是否被访问 (包括 cache, rss, swap等)container_memory_usage_bytes#最大内存使用量container_memory_max_usage_bytes#当前内存工作集(working set)使用量container_memory_working_set_bytes#内存使用次数达到限制container_me
13、mory_failcnt#内存分配失败的累积数量container_memory_failures_total#内存分配失败次数container_memory_failcnt4内存(利用率)通过PromQL特定条件查询容器内job内存使用情况:container_memory_usage_bytesinstance=00:3002,job=panamax, name=PMX_UI18kubelet 通过container_memory_working_set_bytes 来判断是否OOM, 所以用 working set来评价容器内存使用量更合理,以下查询中我们需要通过过滤“POD”容器,它
14、是此容器的父级cgroup,将跟踪pod中所有容器的统计信息。sum(container_memory_working_set_bytes name!“ POD”)by name5内存(饱和度)OOM的异常获取没有直接的指标项,因为OOM后Container会被杀掉,可以使用如下查询来变通获取,这里使用label_join组合了 kube-state-metrics 的指标:sum(container_memory_working_set_bytes) by (container_name) / sum(label_join(kube_pod_con-tainer_resource_limit
15、s_memory_bytes,container_name, , container) by (container_name)6磁盘(利用率)在处理磁盘I/O时,我们通过查找和读写来跟踪所有磁盘利用率,Cadvisor有以下指标可以做位基本指标:#容器磁盘执行I/O的累计秒数container_fs_io_time_seconds_total#容器磁盘累计加权I/O时间container_fs_io_time_weighted_seconds_total#查询容器文件系统读取速率(字节/秒)sum(rate(container_fs_writes_bytes_totalimage!=1m)wi
16、thout (device)#查询容器文件系统写入速率(字节/秒)sum(rate(container_fs_writes_bytes_totalimage!=1m)without (device)最基本的磁盘I/O利用率是读/写的字节数, 对这些结果求和,以获得每个容器的总体磁盘I/O利用率:sum(rate(container_fs_reads_bytes_total5m) by (container_name,device)7网络(利用率)容器的网络利用率,可以选择以字节为单位还是以数据包为单位。网络的指标有些不同,因为所有网络请求都在Pod级别上进行,而不是在容器上进行以下的查询将按p
17、od名称显示每个pod的网络利用率:#接收时丢包累计计数container_network_receive_bytes_total#发送时丢包的累计计数container_network_transmit_packets_dropped_total#接收字节(1m)sum(rate(container_network_receive_bytes_totalid=/1m) by (id)#上传字节(1m)sum(rate(container_network_transmit_bytes_totalid=/1m) by (id)8网络(饱和度)在无法得知准确的网络带宽是多少的情况下,网络的饱和度无
18、法明确定义,可以考虑使用丢弃的数据包代替,表示当前已经饱和,参见以下参数:#接收时丢包累计计数container_network_receive_packets_dropped_total#发送时丢包的累计计数container_network_transmit_packets_dropped_total*注释3:在对于cAdvisor 容器资源,USE方法指标相对简单如下:Utilization:利用率Saturation:饱和度Error:错误*注释4:USE 方法的定义:Resource:所有服务器功能组件(CPU,Disk,Services等)Utilization:资源忙于服务工作的
19、平均时间Saturation:需要排队无法提供服务的时间Errors:错误事件的计数RED 方法的解释:Rate:每秒的请求数。Errors:失败的那些请求的数量。参考 1:更详细关于cAdvisor的参数信息大家可以一下地址获取,也可以自己组合更加适用于自己集群的监控指标:/google/cadvisor/blob/master/docs/storage/prometheus.md参考2:关于Node_exporter,大家有兴趣可以参考Prometheus项目中关于Node_exporter里面说明如下:/prometheus/node_exporter5.事件告警监控监控Event 转换
20、过程种的变化信息,以下只是部份告警信息,Kube-Prometheus项目中有大部分告警指标,也可以从第三方导入相关告警事件:#存在执行失败的Job:kube_job_status_failedjob=”kubernetes-service-endpoints”,k8s_app=”kube-state-metrics”=1#集群节点状态错误:kube_node_status_conditioncondition=”Ready”,status!=”true”=1#集群节点内存或磁盘资源短缺:kube_node_status_conditioncondition=”OutOfDisk|Memory
21、Pressure|DiskPressure”,status!=”false”=1#集群中存在失败的PVC:kube_persistentvolumeclaim_status_phasephase=”Failed”=1#集群中存在启动失败的Pod:kube_pod_status_phasephase=”Failed|Unknown”=1#最近30分钟内有Pod容器重启:changes(kube_pod_container_status_restarts30m)06.日志监控日志也是K8S集群和容器/应用服务的很重要的数据来源,日志中也能获取各种指标和信息,主流的方式采用常驻的Agent采集日志信
22、息,将相关发送到Kafka集群最后写入ES,也通过Grafana进行统一展示各项指标。6.1 日志采集一种方式将各个容器的日志都写入宿主机的磁盘,容器挂载宿主机本地Volume,采用Agent(Filebeat或Fluentd )采集这个部署在宿主机上所有容器转存的日志,发送到远端ES集群进行加工处理;另一种是对于业务组(或者说Pod)采集容器内部日志,系统/业务日志可以存储在独立的Volume中,可以采用Sidecar模式独立部署日志采集容器,来对进行日志采集,对于DaemonSet和Sidecar这两种日志采集模式,大家可以根据实际需要选择部署;通过部署在每个Node上的Agent进行日志
23、采集,Agent会把数据汇集到Logstash Server集群,再由Logstash加工清洗完成后发送到Kafka集群,再将数据存储到Elasticsearch,后期可通过Grafana或者Kibana做展现,这也是比较主流的一个做法。6.2 日志场景主要需要采集的各种日志分为以下场景:1主机系统内核日志采集:一方面是主机系统内核日志,主机内核日志可以协助开发/运维进行一些常见的问题分析诊断,如:Linux Kernel Panic涉及的(Attempted to kill the idle task,Attempted to kill init,killing interrupt hand
24、ler)其它致命异常,这些情况要求导致其发生的程序或任务关闭,通常异常可能是任何意想不到的情况;另一方面是各种Driver 驱动异常,比如:Driver内核对象出现异常或者说使用GPU的一些场景,各种硬件的驱动异常可能是比较常见的错误;再就是文件系统异常,一些特定场景(如:虚机化,特定文件格式),实际上是会经常出现问题的。在这些出现问题后,开发者是没有太好的办法来去进行监控和诊断的。这一部分,其实是可以主机内核日志里面来查看到一些异常。2组件日志采集:K8S集群中各种组件是集群非常重要的部份,既有内部组件也有外部的如:API Server, Controller-man-ger,Kubelet
25、 , ECTD等, 它们会产生大量日志可用于各种错误分析和性能优化,也能帮助用户很好分析K8S集群各个组件资源使用情况分析,异常情况分析;还有各种第三方插件的日志(尤其是一些厂商贡献的网络插件或算法),也是优化分析的重点;3业务日志采集:业务日志分析也是优化的很重要的环节,业务系统自身的特性(如:web类,微服务类,API 接口类,基础组件类)都需要日志来分析,结合后面的资源预测和业务部署章节能否更好把握业务特性,创建合理的发布配置和Pod配置,根据日志分析业务访问量,活动周期,业务峰值,调用关系等优化整个过程。觉得本文有用,请转发或点击“在看”,让更多同行看到本文同时也是以下课程中的第2章节,如果您想系统学习相关知识技能,可以点击下载学习此课程。学习中有相关问题,可以持续到此辅导活动中提问,有专家解答:云计算工程师容器云平台的性能优化与性能瓶颈定位 | 在线辅导答
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海上海数字城市规划研究中心2025年招聘2人(第二批)笔试历年典型考点题库附带答案详解
- 上海2025年上海海事大学港湾学校招聘3名中等职业教育专任教师笔试历年典型考点题库附带答案详解
- 《农村普惠金融发展中的金融消费者教育策略优化策略研究》教学研究课题报告
- 2025年智慧城市交通创新与智能管理报告
- 2026北京城市排水集团有限责任公司校园招聘50人笔试参考题库附带答案详解
- 2025福建省广播影视集团招聘27人笔试参考题库附带答案详解
- 2025浙江杭州市人才集团有限公司招聘16人笔试参考题库附带答案详解
- 定制景观园林合同范本
- 2025年第2批次浙江宁波前湾产业集团有限公司招聘9人笔试参考题库附带答案详解
- 建造项目合作合同范本
- 铸造行业技术研发管理制度
- 中频治疗仪的操作流程
- 《弱电知识培训》课件
- 托儿所幼儿园卫生保健工作规范
- 137案例黑色三分钟生死一瞬间事故案例文字版
- 《同步备课:太阳能小台灯》参考课件
- 直肠阴道瘘诊疗指南的更新
- 五年级数学上册人教版第六单元《多边形的面积》(单元解读)
- 日立HGP电梯调试
- 病案管理考核标准表格2022版
- 微型消防站应急器材点检维护记录
评论
0/150
提交评论