历经 7 年双 11 实战,阿里巴巴是如何定义云原生混部调度优先级及服务质量的?
作者:南异
引言
阿里巴巴在离线混部技术从 2014 年开始,经历了七年的双十一检验,内部已经大规模落地推广,每年为阿里集团节省数十亿的资源成本,整体资源利用率达到 70% 左右,达到业界领先。这两年,我们开始把集团内的混部技术通过产品化的方式输出给业界,通过插件化的方式无缝安装在标准原生的 K8s 集群上,配合混部管控和运维能力,提升集群的资源利用率和产品的综合用户体验。
由于混部是一个复杂的技术及运维体系,包括 K8s 调度、OS 隔离、可观测性等等各种技术,本文将聚焦在 K8s 层的容器优先级和服务质量模型上,希望给业界提供一些可借鉴的思路。
K8s 原生模型
在实际的生产实践中,即使是很多对云原生和 K8s 比较熟悉的技术人员,往往也会混淆调度优先级(Priority)和服务质量(QoS)。
所以,在谈混部的模型前,首先我们对 K8s 原生的概念做详细的介绍,详见下表:
从 API 层面详细描述的话,可以看下面这张表
混部需要解决的问题
混部主要解决的问题是,在保证部署应用的服务等级目标 SLO 的前提下,充分利用集群中的空闲资源,来提升集群整体的利用率。
当一个集群被在线服务部署分配部署完以后,由于在线应用的高保障的特性,会给容器一个 peak 的资源规格,这样有可能导致实际真实利用率很低。
我们希望将这部分空闲但是未使用的资源超卖出来提供给低 SLO 的离线作业使用,以此提高整体机器水位。这样就需要提供基于 SLO 的调度能力,以及考虑到机器真实资源水位进行调度,避免热点的产生。
另外,由于在线通常 SLO 比较高,离线 SLO 比较低,那么当机器水位整体提升过高的时候,可以通过抢占离线的作业方式,来保障在线应用的 SLO。以及需要利用率内核层面 cgroup 的隔离特性来保障高 SLO 和低 SLO 作业。
那么,在这些在线和离线的 Pod 之间,我们就需要用不同的调度优先级和服务质量等级,以满足在线和离线的实际运行需求。
云原生混部定义的应用等级模型
首先请看一下在混部中一个 Pod 的 yaml 是怎么定义的
apiVersion: v1 kind: Pod metadata: annotations: alibabacloud.com/qosClass: BE # {LSR,LS,BE} labels: alibabacloud.com/qos: BE # {LSR,LS,BE} spec: containers: - resources: limits: alibabacloud.com/reclaimed-cpu: 1000 # 单位 milli core,1000表示1Core alibabacloud.com/reclaimed-memory: 2048 # 单位 字节,和普通内存一样。单位可以为 Gi Mi Ki GB MB KB requests: alibabacloud.com/reclaimed-cpu: 1000 alibabacloud.com/reclaimed-memory: 2048
这是在混部里面我们引入的 Pod 的等级,和社区原生不同的地方在于,我们显式的在 anotation 和 label 里面申明了 3 种等级:LSR、LS、BE。这 3 种等级会同时和调度优先级(Priority)、服务质量(Qos)产生关联。
具体的每个容器的资源用量,LSR 和 LS 还是沿用原有的 cpu/memory 的配置方式,BE 类任务比较特殊,通过社区标准的 extended-resource 模式来申明资源。
那么,这 3 类等级具体代表的运行时含义又是什么呢?可以参考这个图,看下这三类应用在 CPU 上的运行时的情况
以及详细的对其他资源使用的影响:
可以看到,这个等级,不但和 Pod 在单机上运行的 CPU、内存有关,还和网络 Qos 的全链路优先级有关,避免低优的离线类任务抢占了所有的网络带宽。阿里在内核方面做的工作有效的保证了运行时的应用稳定性,2021 年双 11 期间,阿里成为全球首家将所有业务都放在自家公共云上的大型科技公司,这意味着阿里云有能力应对高难度复杂环境下的技术挑战,也带来了非常大的技术收益:阿里巴巴业务的研发效率提升了 20%、CPU 资源利用率提升 30%、应用 100% 云原生化、在线业务容器可达百万规模,同时计算效率大幅提升,双 11 整体计算成本三年下降 30%。在这个过程中,混合部署技术发挥了重要作用。内核团队及云原生团队工程师踩了无数的坑,沉淀了包括弹性 CPU 带宽、Group Identity、SMT expeller、memcg 异步回收、内存水线分级、memcg OOM 等多项高级特性,处于业界领先水平。这些工作都会在系列的文章里面后续一一介绍。
当这三种类型优先级任务实际在调度和运行时发生的行为,如下面这个表所示
也就是说,混部的优先级会同时作用于调度和运行时,最大程度的保证高 SLO 的高优、中优任务使用集群内的资源。
配额、水位线、多租隔离
本文仅聚焦讨论了 K8s 单 Pod 的调度优先级,在实际使用时,为了保证应用的 SLO,需要配合单机的水位线、租户的配额、以及 OS 隔离能力等等使用,我们会在后续文章里面详细探讨。
相关解决方案介绍
进入了 2021 年,混部在阿里内部已经成为了一个非常成熟的技术,为阿里每年节省数十亿的成本,是阿里数据中心的基本能力。而阿里云也把这些成熟的技术经过两年的时间,沉淀成为混部产品,开始服务于各行各业。
在阿里云的产品族里面,我们会把混部的能力通过 ACK 敏捷版,以及 CNStack(CloudNative Stack)产品家族,对外进行透出,并结合龙蜥操作系统(OpenAnolis),形成完整的云原生数据中心混部的一体化解决方案,输出给我们的客户。
参考文档
1) https://kubernetes.io/docs/concepts/scheduling-eviction/
2) https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
3) https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/
4) https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/
5) https://kubernetes.io/docs/tasks/configure-pod-container/extended-resource/
6) https://my.oschina.net/HardySimpson/blog/1359276
文内详情链接
1)节点压力驱逐(Node-pressure Eviction): https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/
2)PriorityClass: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass
3)PodDisruptionBudget: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
4)Eviction: https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/
5)QosClass: https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/
6)PriorityClass: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass
7)PodDisruptionBudget:
https://kubernetes.io/docs/tasks/run-application/configure-pdb/
8)Eviction: https://kubernetes.io/docs/concepts/scheduling-eviction/api-eviction/
点击此处,即可查看阿里云专有云敏捷版云原生 Stack 相关介绍!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
deepin 20.3 新版本特性(1):全局搜索
全局搜索是一个 Deepin 桌面系统级搜索服务。 设计初衷:希望用户输入尽可能少的内容,就可以找到想要查找的目标文件、应用或设置。 为什么要做全局搜索? 在操作系统使用过程中,我们接收到众多用户的反馈,在日常使用中,用户想要直达某个场景,都希望可以变得更加简单。 基于对直达查找目标的效率问题,我们希望可以有一个系统级服务,能够很好的承载这个责任,全局搜索恰好具备这样的属性。 功能入口 全局搜索的功能入口,位于任务栏的右侧,和虚拟键盘位于同一区域。通过鼠标点击放大镜的入口,即可在屏幕中央打开全局搜索框。 搜索框 当搜索框被唤起后,就可以在搜索框内输入想要查找的文件、应用或设置的关键字了。输入过程中随时调整输入的文字内容,搜索结果列表都会及时刷新出搜索结果,方便大家快速找到搜索的目标。 搜索结果列表 搜索结果列表支持展示更细粒度的搜索结果分类。比如当你输入一个歌手的名字时,如果恰好有一首mp3格式的歌曲文件包含了歌手的名字,那么就可以在“音乐”这个分类下,查看到对应的搜索结果。 同样,如果包含搜索关键字的文档文件、图片文件、视频文件,也都可以聚类被搜索召回,可以针对性地在指定的类目下查看...
- 下一篇
解读HetuEngine On Yarn原理
摘要:在整合开源能力的同时,MRS HetuEngine相较于开源社区也做了大量的优化,其中一个重要的特性就是On Yarn。 本文分享自华为云社区《MRS HetuEngine 特性之 On Yarn原理介绍》,作者:一颗柠檬 。 HetuEngine是华为自研高性能分布式SQL查询&数据虚拟化引擎。与大数据生态无缝融合,实现海量数据秒级查询;支持多源异构协同,使能数据湖内一站式SQL融合分析。在整合开源能力的同时,MRS HetuEngine相较于开源社区也做了大量的优化,其中一个重要的特性就是On Yarn。本文介绍HetuEngine实现On Yarn的原理,通过阅读本文,读者可以了解HetuEngine如何在资源使用方面融入Hadoop生态体系。 什么是On Yarn? 顾名思义,就是将进程运行在Yarn上,由Yarn进行资源的管理和调度。 不论是TrinoDB/PrestoDB还是openLooKeng,部署方式都是将coordinator和worker进程直接运行在主机上,与主机上的其他应用程序共享资源,无法做到资源隔离,并且难以扩展。 MRS HetuEngin...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS关闭SELinux安全模块