Kubernetes集群中如何利用北极星因果指标设置正确的POD规格——CPU篇

news2024/12/26 23:51:59

在 Kubernetes 容量规划中,追求的是集群的稳定性和资源使用效率之间的平衡:

  • 资源分配过多会造成浪费。

  • 资源分配过少则会导致用户请求时延上升,影响集群的稳定性。

背景

公众号之前翻译了一篇 Sysdig 的文章,Kubernetes 容量规划:如何合理设置集群资源介绍了如何设置合理的资源参数。虽然按照那篇文章设置可以有一定的帮助,但仍然可能存在风险。本文将详细说明这些风险,并介绍如何通过北极星指标对 POD 的规格进行调整,以达到时延和资源的完美平衡。

Kubernetes 中的 POD CPU 规格参数

在 Kubernetes 中,POD 的 CPU 规格主要包括以下两个参数:

  • requests:POD 启动时请求的 CPU 资源量。Kubernetes 调度器会根据这个参数将 POD 调度到能够满足资源需求的节点上。

  • limits:POD 运行时能够使用的最大 CPU 资源量。如果 POD 尝试使用超过这个限制的 CPU 资源,会被限制在定义的 limit 值内。

Kubernetes 中的现存指标

要判断 POD 规格是否合适,需通过合适的指标来评估。当前 Kubernetes 中常见的 CPU 指标包括:

  • CPU 利用率(container_cpu_usage_seconds_total):通过类似 PQL 语句获得:

    irate(container_cpu_usage_seconds_total{namespace="XXXX", container="XXXX"}[5m])

    该指标反映了 CPU 利用率。

  • 系统负载:node_load1、node_load5、node_load15 表示系统在 1 分钟、5 分钟和 15 分钟内的平均负载。一般认为负载与 CPU 核数相当即可。

  • CPU 节流(throttle):container_cpu_cfs_throttled_seconds_total,通过类似 PQL 语句获得:

    irate(container_cpu_cfs_throttled_seconds_total{namespace="XXXX", container="XXXX"}[5m])

    该指标表示容器由于 CPU 配额不足而被节流的 CPU 核心时间总量。

    尽管这些指标对了解 CPU 资源使用情况有帮助,但各自存在局限性,难以单独作为唯一且关键的指标。


    北极星指标的应用

所谓北极星指标,是指唯一且最关键的指标。在 Kubernetes 中,该用哪个指标来衡量容器的 CPU 资源是否充足呢?

CPU 利用率指标的局限性

CPU 利用率指标的主要局限性在于:

  • 单一性:CPU 利用率反映了容器对 CPU 资源的需求和使用情况。如果利用率持续高企,可能表明容器需要更多的 CPU 资源。然而,仅凭这一指标无法全面反映系统的性能状态。

  • 响应时间和性能:需要考虑容器内应用的响应时间和性能。如果响应时间变长或性能下降,即使 CPU 利用率不高,也可能意味着 CPU 资源不足。

  • 并发负载:在高并发场景下,瞬时的负载高峰可能导致性能问题。CPU 利用率可能无法及时反映这些短期高峰负载的影响。

Load指标的局限性

Load 指标代表有多少执行单元等待调度器执行,但它无法单独衡量 CPU 资源是否充足。

CPU节流指标的局限性

container_cpu_cfs_throttled_seconds_total 指标用于衡量容器因 CPU 资源不足而遭受的 CPU 节流(throttling)。如果该指标的值不为零并且持续增加,通常意味着:

  1. CPU 资源不足:容器的 CPU 使用需求超出了为其分配的 CPU 配额,导致它无法获得足够的 CPU 时间来执行其任务。

  2. 性能影响:CPU 节流可能会导致容器内应用的性能下降,因为它们没有足够的 CPU 时间来及时完成任务。

虽然该指标能够直接反映容器是否遭受 CPU 节流,但仅凭它来判断资源是否充足可能会忽略其他重要的性能指标和系统状态。即使container_cpu_cfs_throttled_seconds_total 不增长,但如果 CPU 调度器队列很长,仍然可能出现 CPU 资源不足的情况。


北极星因果指标中的 CPU 调度耗时

北极星因果指标中的 CPU 调度耗时能够反映出 CPU 节流和高负载下的 CPU 调度延时,包括以下几种情况:

  • CPU 调度队列长:当程序执行完数据库等网络操作后,如果CPU充分,应该被立马执行,但是当调度队列长时,就会产生等待被调度到 CPU 上的时间。

  • CPU 节流:代码执行时间片被执行完后,等待下一个调度周期才能被调度到 CPU 上执行的时间。

北极星因果指标中的 CPU 调度耗时能够反映出 CPU 节流和高负载下的 CPU 调度延时。只要该指标不高,即可说明容器的 CPU 资源是充分的;如果该指标高,则说明容器的 CPU 资源是不充分的。

通过准确监控和调整这些指标,可以实现 Kubernetes 集群的稳定可靠性和资源使用效率之间的最佳平衡。


北极星因果指标的CPU调度耗时实际用法举例

Demo环境的route-service的CPU调度耗时异常修复过程

在云观秋毫的Demo环境中,通过北极星因果指标巡检,发现route-service的CPU调度耗时较长,其90分位线经常超过10ms,甚至达到20ms左右。此时指标已经说明了route-service的CPU资源不充分。

怎么解决呢?是不是直接去增加POD limit的设置呢?

POD规格调整原则一:如果发现CPU节流(throttling)时间高,才需要增加POD limit的配置 

通过查询route-service的CPU节流(throttling)指标,发现其CPU节流时间很少,几乎没有波动。这与route-service北极星因果指标中每次请求都有10ms左右情况不符合,说明北极星因果指标中的CPU调度耗时并不是由于CPU节流导致的,也就意味着提高POD limit无法解决问题。

那这种情况只能说明当时的CPU队列很长,当一次任务如数据库调用完成之后,程序需要重新调度到CPU上而产生了调度耗时。为了验证这点,我们继续查看下其CPU利用率指标和节点的Load指标。

CPU利用率显示其CPU资源是非常充足的,因为route-service所在机器的节点CPU核数为8核,load指标最高位7.13,也是符合预期的。此时如果没有北极星因果指标,也不知道每次请求有这么高的CPU调度耗时,但是要优化性能,提高容量也就无从谈起了。

为了证明北极星因果指标的正确性,我们将route-service调度到另外一台机器上,在调度之前其load如下:

当调度完成之后,我们再次查看北极星因果指标,发现每次请求CPU调度耗时已经降低了很多,此时调度耗时在90分位线最高也只有8ms,绝大多数请求CPU调度耗时在4ms以下。

此时我们再去查看rout-service的相应延时,发现延时也有了显著的优化:可以看到平均延时在重新调度之前延时是普遍大于20ms的,而调整之后rout-service的延时已经没有高于20ms的了。

Demo环境的order-service的CPU调度耗时异常修复过程

在云观秋毫的Demo环境中,通过北极星因果指标巡检,发现order-service的CPU调度耗时较长,其90分位线经常超过80ms,甚至达到90ms左右。此时指标已经说明了order-service的CPU资源不充分。

根据POD规格调整原则一,先去查看容器的CPU节流指标,发现其节流时间确实很大,说明POD的规格Limit设置过小了。

如果只看CPU 利用率,其实还好,并不是一直很高,而是周期性飙高。 

POD规格调整原则二:调整POD Limit设置之时,不需要翻倍的增加CPU核数,而是一个核增加完之后,观察数据,确保最省资源的方式满足业务需求 

当对order-service的limit增加之后,再看节流指标,此时节流已经很少发生了。

然后我们再看北极星因果指标中的每次请求CPU调度耗时指标,数据从原来的80~90ms 降到了1~2ms左右,甚至90分线最高值才5ms,说明其CPU现在是充分供应了。

最后我们再看看调整前后的时延对比,从调整之前的90分位线100ms降到了调整之后不到10ms左右。


利用北极星因果指标轻松识别POD运行的应用是CPU密集型还是IO密集型,并完成调度,保证应用的健康状态是最佳的 

在计算机知识中,大家都知道不同应用有着不同特征,典型的分类就是CPU密集型和IO密集型,但是我们怎么判断应用是IO密集型还是CPU密集型呢?绝大多数情况下大家是通过主观经验判断,缺少证据证明。

POD调度原则:根据POD应用类型来实现调度 

如果根据北极星因果指标中每次请求CPU执行时间超过了响应时间的一半,一般认为其应用为CPU密集型。根据这个原则发现绝大多数在线业务都不属于CPU密集型,只有那些执行时间非常短的应用不到20ms的应用,其cpu时间才有可能超过一半。

所以调度原则简化成可以把响应时间短的应用和响应时间长的应用混合调度在一台机器上能够保证应用健康状态是最佳的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1831542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玩转nRF52840-DK开发套件(2)

介绍如何在Windows操作系统上使用Arm Keil MDK。Arm Keil MDK附带Arm C/C编译器和Vision集成开发环境(IDE),以及所有nRF5SDK的版本提供了现成的Keil项目。 1. 安装最新的 nRF5 SDK. 链接:nRF5 SDK - nordicsemi.com 点击Download&…

泰迪智能科技董事长张良均荣获“2024年广东软件风云榜新锐企业家”

6月13日,在广州举办2024年粤港澳软件产业高质量发展大会、第十二届粤港云计算大会暨第七届粤港澳ICT大会。大会以“培育信息技术新质生产力,打造粤港澳发展创新引擎”为主题,研讨基础软件、云计算、人工智能等新一代技术的新态势、新应用&…

14.编写自动化测试(上)

标题 一、如何编写测试1.1 一些概念1.2 测试函数剖析1.3 使用assert!宏检查结果1.4 使用assert_eq!和assert_ne!宏来测试相等1&#xff09; assert_eq!2&#xff09; assert_ne! 1.5 使用 should_panic 检查 panic 二、将 Result<T, E> 用于测试 一、如何编写测试 1.1 一…

解决外网404:清除DNS缓存并配置host主机使用知名公共DNS服务

在 Windows 上清除/刷新 DNS 缓存 对于所有Windows版本&#xff0c;清除DNS缓存的过程都是相同的。你需要使用管理员权限打开命令提示符并运行ipconfig /flushdns。 浏览器清除DNS缓存 大多数现代的Web浏览器都有一个内置的DNS客户端&#xff0c;以防止每次访问该网站时…

vscode字符多行自动增长插件。

多行字符自动增长插件CharAutoIncre 当你使用shiftalt选中了多行,并输入了’1’,这时这几行都变成了’1’. 这时你可以选中&#xff08;shift左键&#xff09;为’1’的这几行, 接下来按下shiftaltq此时’1’变为了’12345’自增长的样式。 同时本插件支持字符’a-z,A-Z’。 目…

高考没考好焦虑怎么选计算机专业!一篇告诉你,推荐三个风口专业!想学计算机怎么选大学专业

高考成绩揭晓&#xff0c;几家欢喜几家愁。对于那些未能如愿考取理想分数的同学来说&#xff0c;未来似乎蒙上了一层阴影。尤其是在计算机专业如此热门的今天&#xff0c;低分考生是否还有机会在这个领域找到一席之地&#xff1f;本文将为你揭秘&#xff0c;即使高考成绩不理想…

Nature Microbiology丨VITA单细菌转录组测序技术助力深入解析奶牛瘤胃微生物组功能异质性

瘤胃微生物组一直以来都是研究相对不足但又极其复杂的微生物生态系统之一。瘤胃微生物能够有效降解植物纤维&#xff0c;将其转化为高质量的蛋白质产品&#xff0c;在这一过程中&#xff0c;由于微生物强烈的发酵&#xff0c;还会产生大量气体&#xff0c;其成分主要包括二氧化…

自动化产线设备联网,协同打造5G智慧工厂

1、需求背景 随着信息技术、物联网、人工智能等领域的飞速发展&#xff0c;智慧工厂成为制造业升级和转型的关键方向。在智慧工厂中&#xff0c;产线设备之间的实时通信和协同操作可以提高整个生产流程的自动化水平。 提升生产效率 通过稳定的网络连接&#xff0c;保证设备之…

编码在网络安全中的应用和原理

前言:现在的网站架构复杂&#xff0c;大多都有多个应用互相配合&#xff0c;不同应用之间往往需要数据交互&#xff0c;应用之间的编码不统一&#xff0c;编码自身的特性等都很有可能会被利用来绕过或配合一些策略&#xff0c;造成一些重大的漏洞。 什么是编码&#xff0c;为什…

软件功能测试和性能测试包括哪些测试内容?又有什么联系和区别?

软件功能测试和性能测试是保证软件质量和稳定性的重要手&#xff0c;无论是验证软件的功能正确性&#xff0c;还是评估软件在负载下的性能表现&#xff0c;这些测试都是必不可少的。 一、软件功能测试   软件功能测试是指对软件的各项功能进行验证和确认&#xff0c;确保软件…

51交通灯

一、基本原理 利用51单片机控制各个路口红绿灯及时间显示。 设计的重点&#xff1a; 1、各个路口红绿灯亮灭的规则&#xff0c;暂不考虑左转方向&#xff1b; 2、倒计时的实现&#xff0c;利用单片机的定时器进行计数得到秒信号&#xff1b; 3、时间显示&#xff1a;东西南…

【每日刷题】Day67

【每日刷题】Day67 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 23. 合并 K 个升序链表 - 力扣&#xff08;LeetCode&#xff09; 2. 1189. “气球” 的最大数量 - …

一篇搞定Spring,IOC容器,Bean管理,3.AOP底层原理和实现(收下吧,真的很详细)

1.Spring容器的概念 Spring是一个轻量级的框架&#xff0c;可以解决企业开发的复杂性&#xff0c;让开发效率提升&#xff0c;他核心的两个点是&#xff1a; 1.IOC IOC&#xff1a;在java中&#xff0c;我们程序员一般是去创建一个对象&#xff0c;那么有个问题就是耦合性太…

Apache DolphinScheduler查看版本信息

我找了半天&#xff0c;没有看到版本在哪里。然后我看配置&#xff0c;他要连接数据库&#xff0c;我去他存储数据库的表里面&#xff0c;看到了相关的版本信息。 cd /home/dolphinscheduler/dolphinscheduler/bin/env dolphinscheduler找到了里面的密码 版本是3.1.3

VMware挂载NAS存储异常处理

问题概述 由于非法关机或恢复&#xff0c;NFS存储可能会出现以下问题&#xff1a; 数据存储处于挂起状态或无法正常识别。虚拟机的配置文件或虚拟磁盘仍然注册在异常数据存储上。系统误认为有虚拟机在使用该数据存储。 问题对策 下面是详细的排查步骤和解决对策&#xff1a…

JS 实现Date日期格式的本地化

为了更好的更新多语言日期的显示&#xff0c;所以希望实现日期的本地化格式显示要求&#xff0c;常规的特殊字符型格式化无法满足显示要求&#xff0c;这里整理了几种我思考实现的本地化实现功能。 通过多方查找&#xff0c;总结了实现的思路主要有如下三个方向&#xff1a; 官…

ThinkPHP 的老漏洞仍然被攻击者钟情

研究人员发现安全领域出现了令人不安的趋势&#xff1a;攻击者不仅对新披露的漏洞十分感兴趣&#xff0c;对已知的漏洞也丝毫不放过&#xff0c;尽管有些漏洞已经存在了好些年头&#xff0c;攻击者仍然能够通过老漏洞成功完成攻击。 典型的例子就是 ThinkPHP 远程代码执行漏洞…

同三维T80004EHL-W-4K30 4K HDMI编码器,支持WEBRTC协议

输入&#xff1a;1路HDMI1路3.5音频&#xff0c;1路HDMI环出1路3.5音频解嵌输出 4K30超高清,支持U盘/移动硬盘/TF卡录制&#xff0c;支持WEBRTC协议&#xff0c;超低延时&#xff0c;支持3个点外网访问 1个主流1个副流输出&#xff0c;可定制选配POE供电模块&#xff0c;WEBR…

白酒:茅台镇白酒的文化内涵与传承意义

茅台镇白酒&#xff0c;作为中国的酒文化的代表之一&#xff0c;具有丰富的文化内涵和传承意义。而云仓酒庄豪迈白酒作为茅台镇的品牌之一&#xff0c;更是承载了深厚的文化底蕴和历史积淀。 首先&#xff0c;茅台镇白酒是中国的酒文化的重要组成部分。白酒在中国有着悠久的历史…

SRAM和DRAM

1.SRAM&#xff08;静态RAM&#xff09; 把存放一个二进制位的物理器件称为存储元&#xff0c;它是存储器最基本的构件。 地址码相同的多个存储元构成一个存储单元。 存储单元的集合构成存储体。 静态RAM的存储元是用双稳态触发器&#xff08;六晶体管MOS&#xff09;来记忆…