乐趣区

关于阿里云:历经-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/co…

2) https://kubernetes.io/docs/co…

3) https://kubernetes.io/docs/co…

4) https://kubernetes.io/docs/co…

5) https://kubernetes.io/docs/ta…

6) https://my.oschina.net/HardyS…

文内详情链接

1)节点压力驱赶(Node-pressure Eviction):
https://kubernetes.io/docs/co…

2)PriorityClass:
https://kubernetes.io/docs/co…

3)PodDisruptionBudget:
https://kubernetes.io/docs/ta…

4)Eviction:
https://kubernetes.io/docs/co…

5)QosClass:
https://kubernetes.io/docs/ta…

6)PriorityClass:
https://kubernetes.io/docs/co…

7)PodDisruptionBudget:

https://kubernetes.io/docs/ta…

8)Eviction:
https://kubernetes.io/docs/co…

点击 此处,即可查看阿里云专有云麻利版云原生 Stack 相干介绍!

退出移动版