作者:张佐玮(佑祎)

背景介绍

K8s 为集群资源提供了良好的抽象,用户可以直接根据应用的资源需求填写容器资源规格,这种方式有效提升了集群资源的管理效率。然而,一直以来,容器资源规格填写的难题一直都让应用管理员们无法摆脱,过高的资源规格会导致资源浪费,而过低的规格又会为应用带来潜在的稳定性风险。

往期文章《资源画像,让容器资源规格的填写不再纠结》中我们介绍了阿里云容器服务 Kubernetes 版(Alibaba Cloud Container Service for Kubernetes,以下简称 ACK)提供的资源规格智能推荐功能,用户可以通过 ack-slo-manager 组件提供的 CRD 对象查询到容器的资源推荐值。

日前,ACK 控制台在此基础上正式发布了资源画像功能,为用户提供了可视化的交互页面,便于管理员快速分析应用资源规格的合理性,并进行资源规格配置的变更。该功能目前已经正式开放公测,ACK 用户可以直接申请白名单试用。

容器资源配置

K8s 使用了 request 和 limit 来描述容器对 CPU 和内存资源的需求,reqeust 影响 Pod 的节点分配结果,调度器会使用节点的“资源容量”(capacity)进行匹配,确保容量充足,而 limit 决定了容器在节点运行时可以使用的资源上限,当容器尝试超用资源时会被约束(throttled)甚至终止(kill)。

一直以来,容器资源规格 request 和 limit 的填写都让 K8s 的用户饱受困扰,一方面,应用管理员需要预留相当数量的资源冗余来应对上下游链路的负载波动,保障线上应用的稳定性;而另一方面的现实是,在大部分在线服务的生产环境中,集群的资源利用率处于相当低的水平,存在大量的资源浪费。

应用的资源画像数据可以提供有效帮助,所谓资源画像,指的是应用 CPU、内存等资源的使用特征,如果我们能够将资源使用的历史数据收集起来,并进行汇总分析,在设置容器资源规格时就可以做到有的放矢。ACK 控制台资源画像功能的发布,就旨在解决这一难题,帮助运维人员优化容器资源规格,提升管理效率,保障应用稳定运行的同时,充分提升集群资源使用率。

资源画像

ACK 资源画像会持续收集容器的资源用量进行汇总分析,为每个容器生成资源规格的推荐值,控制台会针对工作负载原始的资源请求量(request)给出调整建议,包括“升配”、“降配”、以及”保持“三种,若工作负载有多个容器,控制台会优先使用偏差幅度最大的容器作为推荐。应用管理员可以通过该页面直接筛选出需要调整的应用,并在详情页进行修改。

策略管理

资源画像支持按需开启的的管理策略,可以指定命名空间和应用类型范围。策略同时还支持为应用配置资源消耗冗余,所谓资源消耗冗余,对应的场景是管理员在评估应用业务容量时(例如 QPS),通常不会将物理资源使用到 100%。原因既包括超线程等物理资源的局限性,也包括应用自身需要考虑留有余量以应对高峰时段的负载请求。当资源画像的推荐值与原始资源请求的差距超过安全冗余时,才会提示降配建议。

资源用量分析

在资源画像控制台主页,点击工作负载名称,可以进入对应的画像详情页面,在画像详情页可以对应用的资源消耗数据做进一步的详细分析。详情页的资源曲线分别展示了各容器的资源限制值(limit)、资源请求值(request)、资源画像功能提供的推荐值(recommend),以及应用各副本资源使用量的平均值和最大值(average/max usage)。

通过应用的画像详情页,用户可以对资源使用情况进行直观的分析,评估容器当前的资源规格(request/limit)是否合理。

资源配置变更

画像详情页面底部还同时提供了资源变配的功能,变配窗口内默认展示了各容器当前的所需资源(request)和限制资源(limit),以及资源画像为容器生成的推荐值,推荐值来自于对容器资源消耗历史数据的聚合分析,确保推荐值可以尽量满足容器资源消耗的需求。这里同时还展示了策略管理中为应用配置的冗余系数,方便应用管理员在修改资源规格配置时参考。

填写完成后点击确定按钮,将执行资源规格更新操作并自动跳转到工作负载详情页。资源规格更新后,控制器会对工作负载进行滚动更新并重新创建 Pod。

使用建议

资源冗余配置

资源画像的变配建议是比较推荐值与当前应用资源申请量(request)得到的,当推荐值高于 request 时,说明容器实际的资源用量已经超过了申请量,应提高请求规格;而当推荐值低于 request 时,说明容器实际的资源用量低于请求量,但这并不代表着一定要降低请求规格。

原因是应用管理员在填写资源申请时,通常都会在原始的资源需求基础上额外增加一定程度的资源冗余,用于应对流量高峰,或是做例如“同城多活”这类高可用场景的切换。此外,部分应用还对资源较为敏感,无法在宿主机负载较高时平稳运行,这也需要在基础值上调高规格。

因此资源画像的变配建议会参考用户在策略管理中配置的冗余系数,只有当推荐值显著低于请求量时才会提示“降配”操作。冗余系数只影响资源变配的提示,不影响推荐值算法的计算过程,原因是资源画像提供的推荐值是对应用当前资源需求情况的总结,管理员在使用时应结合应用自身特性,在推荐值的基础之上进行加工。

应用适用类型

目前资源画像的推荐值会优先考虑满足容器的资源使用,确保可以覆盖绝大部分历史数据样本,因而更适用于在线类型的应用,因为它们通常以服务的形式部署,对响应时间(RT)会有严格的约束,要求资源必须及时得到满足。

与“在线”相对应的是“离线”应用,通常为批处理类型的任务,其更关注数据处理的整体吞吐量,可以接受一定程度的资源竞争,以提高集群资源的整体利用率,因此当前资源画像的推荐值对于离线应用来说会显得有些保守。此外,集群内还会有一些关键的系统组件,通常以“主备”的形式部署多个副本,处于“备份”角色的副本长期处于资源闲置状态。这些“备份”角色的资源用量样本数据会对画像算法产生一定程度的干扰,影响推荐值的准确性。

针对这些场景,管理员应基于应用特点对资源画像的推荐值二次加工后再使用,后续我们也将开放更多能力,提供更加精细的资源画像策略管理。

数据累积时长

资源画像推荐值的算法涉及一套多维度的数据模型,核心关注以下几个方面:

  1. 算法会持续不断的收集容器的资源用量数据,取 CPU 和内存的聚合统计值作为推荐。

  2. 针对样本数据的时间因素进行了优化,在聚合统计时,较新的数据采样点会拥有更高的权重。

  3. 算法参考了容器出现 OOM 等运行状态信息,可以进一步提高推荐值的准确性。

通过以上原理可以看出,资源画像结果的准确性会随着数据样本的累积逐渐提升,因此在初次使用时建议至少保持一天以上的数据累积。原因是当前互联网类型的在线应用会受到人们生产生活习惯的影响,流量负载的峰谷会在不同时间段出现,例如出行类应用会有早晚高峰,文娱类应用会在工作日和节假日的呈现不同特征。因此最好的使用方式,是确保工作负载稳定运行一段时间,收集的数据完整覆盖了流量的波峰波谷之后再使用。

未来计划

ACK 资源画像控制台后续的产品功能已经在规划中,未来我们将提供更为精细化的管理策略以及更为便捷的使用方式,敬请期待!

往期文章《Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架》中我们介绍了云原生混部开源系统 Koordinator 的一系列功能,近期 Koordinator 刚刚发布了最新的 0.7 版本,欢迎大家访问官网"koordinaotr.sh"查阅。

接下来我们将逐步把资源画像相关的技术能力也贡献到开源社区,帮助更广大的行业人士改善云原生工作负载运行的效率、稳定性和计算成本。

Koordinator 是一个开放的社区,非常欢迎广大云原生爱好者们通过各种方式一起参与共建,无论您在 K8s 领域是初学乍练还是驾轻就熟,我们都非常期待听到您的声音!

Github 地址:https://github.com/koordinator-sh/koordinator

欢迎扫描下方微信二维码加入 Koordinator 微信群:

您也可以使用钉钉扫描下方二维码或搜索群号 33383887 加入 Koordinator 社区钉钉群:

点击此处,即可查看阿里云 ACK 资源画像控制台的详细介绍和使用方法!

资源画像,看得见的容器资源优化助手相关推荐

  1. kubernetes资源监控(一)——k8s容器资源限制

    一 限制范围 默认情况下, Kubernetes 集群上的容器运行使用的计算资源没有限制. 使用资源配额,集群管理员可以以名字空间为单位,限制其资源的使用与创建. 在命名空间中,一个 Pod 或 Co ...

  2. 超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?

    作者 | 张晓宇(衷源) 阿里云容器平台技术专家 关注『阿里巴巴云原生』公众号,回复关键词"1010",可获取本文 PPT. **导读:**资源利用率一直是很多平台管理和研发人员关 ...

  3. Docker安全性支持(使用Cgroups机制实现容器资源控制)

    前言 Docker作为最重视安全的容器技术之一,在很多方面都提供了强安全性的默认配置,其中包括:容器root用户的Capability能力限制.Seccomp系统调用过滤.Apparmor的 MAC ...

  4. zabbix企业应用之监控docker容器资源情况

    关于docker的监控,无论开源的CAdvisor.Data Dog还是我自己写的监控(http://dl528888.blog.51cto.com/2382721/1635951),不是通过dock ...

  5. 使用 docker 对容器资源进行限制

    在使用 docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU.内存和磁盘资源.如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说 ...

  6. docker安全之容器资源控制 安全加固

    目录 一.cgroup简介 二. 容器资源控制 1.内存限制 ​2.cpu限额 ​3.Block IO限制 ​三.docker 安全加固 在使用 docker 运行容器时,默认的情况下,docker没 ...

  7. 线程基础知识_线程生命周期_从JVM内存结构看多线程下的共享资源

    线程生命周期 线程状态 New: 线程创建(new Thread()) Runnable: 线程可运行(thread.start()), 注: 调用start并不一定是运行状态, 可能在等待CPU调度 ...

  8. 将ubuntu配置为路由器_“名酒为王”时代来临但资源将尽,看泸州老窖如何进行“名酒资源再配置”丨深度观察...

    文丨酒业家主笔 彭伟 冲刺300亿,重回前三甲. 泸州老窖作为四大名酒之一,连续蝉联五届国家名酒,在全国范围的消费者中构建了极其深远的品牌影响力.因此,才会有泸州老窖股份有限公司党委书记.董事长刘淼在 ...

  9. 使用LXCFS实现容器资源的视图隔离

    01 问题背景 大家都知道,当我们使用 top 等命令的时候,背后的逻辑是读取 /proc 目录下相应的资源文件.本篇文章就通过查看使用 top所执行的系统调用,来窥探一二. strace top - ...

最新文章

  1. addressof表达式不能转换为long_基本数据类型转换
  2. 剪切粘贴时总是上次的内容_macOS系统上面如何实现Windows上的“剪切”功能
  3. oracle =1,oracle中的 where 1=1 和where 1 !=1
  4. 腾讯TI-ONE平台从cos导入数据到jupyterLab失败
  5. stm32 网络 服务器通信协议,利用stm32的lwip TCP/IP协议栈的通信的思路
  6. 来博客园居然有一年了
  7. 互联网大厂的薪资和职级一览
  8. Java多线程:同步集合与同步锁
  9. HTTP报错状态码详解
  10. Win 7 远程桌面报错“出现身份验证错误,要求的函数不受支持”解决办法
  11. 论文笔记 | code representation(代码表示学习)系列
  12. 01背包, 完全背包,多重背包
  13. SEGGER公司JlinkV9仿真器实现串口通讯VCOM和SWD调试双功能
  14. Laragon 在Windows中快速搭建Laravel本地开发环境
  15. 图像评价常用指标(PSNR、SSIM、LPIPS 、FID、Recall)
  16. 常见职位英文缩写词解释
  17. 页面加密代码,附效果演示
  18. 数据结构-链表 JavaScript | 有图 | 有过程 | 有真相
  19. 首次跌至发行价的Snap,要如何抵抗社交巨头Facebook的抄袭?
  20. 三星文档html删除吗,HTML5新增标签和删除的标签

热门文章

  1. MortIIs Story
  2. 华为云桌面,助力企业数字化转型
  3. 计算机基于Springboot框架的美食发现系统的设计与实现.rar(毕业论文+源码+数据库文件)
  4. mysql复合索引(联合索引)用法以及最左原则
  5. 手淘千牛IM即时通信 - 星巴克消息开放实践
  6. 将公众号临时链接转永久链接的五种方法
  7. C++的string类型中关于append函数、push_back函数和+=运算符的区别
  8. 蓝牙技术已经成为物联网混战的另一焦点
  9. 总结JS中常用的数组的方法大全
  10. Planar Isotropic平面各向同性