B站云原生混部技术实践

2023-06-02 0 233

作者:刘梅生 bilibilibilibili现职开发技师

2020 年加入 B 站,负责 k8s 云网络平台相关研发工作,包括罐子和 k8s 发动机、黄绍雄、灵活性伸缩式等。

01 大背景

中大型网络公司的服务项目器数量可达万等级,在更上一层增效的大大背景下,电脑天然资源利用效率的必要性日益突显。怎样在确保服务项目 SLO 影响最轻的情况下提升电脑天然资源利用效率,从而降低服务项目器的采购成本,是一项非常值得研究的研究课题。

对于 k8s 云网络平台来说,造成电脑平均天然资源利用率低的原因可以归纳为几点:

销售业务提出申请的天然资源进口产品超过前述采用率。即用户在提出申请天然资源时可能会对服务项目的真实天然资源采用情况沃夫奇,通常倾向于提出申请安非他命的天然资源。这就导致电脑进口产品被清空,无法继续运维罐子,而前述天然资源利用效率却较低。

服务项目的天然资源采用率存有温度梯度温度梯度。大部分服务项目的阻抗单厢存有多寡峰,当服务项目处在温度梯度的这时候就会存有很大的天然资源节约。

特别针对前述难题 1),他们可以透过服务项目肖像给销售业务所推荐一个科学合理的天然资源分配值,并结合弹性伸缩式的方式来化解。

特别针对前述难题 2),突破点在于怎样将销售业务温度梯度时空余出来的那部分天然资源利用起来,比如下午新浪网销售业务处在温度梯度的这时候,往新浪网软件产业运维冰镇的app各项任务。

目前 B 站私有云网络平台已经达至较大的电脑规模,他们从前述两个思路出发来给整体云网络平台更上一层:一方面提供了 hpa 和 vpa 的灵活性伸缩式能力,使得销售业务天然资源进口产品采用更为科学合理;另一方面,他们实施了较大规模的销售业务黄绍雄来化解INS13ZD的空置难题。责任编辑将主要撷取 B 站云网络平台的黄绍雄课堂教学,而灵活性伸缩式方面的课堂教学他们会再行在先期文章中介绍。

02 黄绍雄的概念

他们把销售业务划分为新浪网销售业务和app销售业务。新浪网销售业务通常是各类微服务项目,特征是延迟时间脆弱、有极高的易用性要求,如所推荐、电视广告、搜寻等服务项目;app销售业务通常是格式化各项任务,特征是延迟时间不脆弱、允许手忙脚乱重跑,如大数据情景中的 MapReduce 各项任务、音频处理中的音频文件各项任务等。所谓黄绍雄控制技术,就是透过运维、天然资源隔绝等方式,将相同类型、相同错误率的在app销售业务部署在相同的物理电脑上,并且保证销售业务的 SLO,最终达至提升天然资源利用效率、提高效率的目的。需要注意的是,黄绍雄不是简单地将罐子部署到同一台宿主机上,而是需要透过运维算法将黄绍雄各项任务运维到具有空余天然资源的电脑,同时需要有隔绝机制来保证高优各项任务不会受到黄绍雄各项任务的干扰。

03 B 站黄绍雄的情景

1. 在app黄绍雄。B 站是一个音频类网站,存有大量的点播音频音频文件各项任务,这类各项任务属于计算密集型,具有运行时间短、允许失败重试等特征。另外,在下午时段会触发大量的音频文件定时各项任务,刚好和新浪网销售业务形成错峰。他们透过在app黄绍雄控制技术将音频文件各项任务运维到新浪网软件产业,既提升了新浪网软件产业的天然资源采用率,又补充了音频文件各项任务高峰期时的INS13ZD缺口,极大地降低了服务项目器成本。这类黄绍雄情景的难点在于:

运维层。( 1 ) 黄绍雄各项任务不能影响新浪网各项任务的整体进口产品容量,例如电脑一共 64 核,如果黄绍雄各项任务直接提出申请 32 核的 cpu request 天然资源,那就会造成该电脑只能运维 32c 的新浪网销售业务罐子。 ( 2 ) 运维器需要动态感知到各个节点可黄绍雄天然资源量的变化,天然资源空余越多的节点运维越多的黄绍雄各项任务。

节点层。黄绍雄各项任务一旦运维到某个 k8s 节点后,在 cpu、内存、磁盘、网络等各个天然资源层面都有可能对新浪网各项任务产生 ” 竞争 “,因此需要随时感知新浪网各项任务的阻抗情况并做相应的隔绝管控,尽量做到对新浪网各项任务零干扰。

2. app间黄绍雄。app软件产业整体的 cpu 采用率较高,但部分时段也存有一定的天然资源空置,例如训练网络平台在训练各项任务较少时整体利用效率会偏低。由于都是app各项任务,延迟时间脆弱性没有新浪网那么高,因此这类情景除了黄绍雄音频文件各项任务外,还可以黄绍雄一些更 ” 重 ” 的大数据各项任务。但是大数据各项任务通常用 yarn 运维,怎样将 k8s 运维和 yarn 运维进行协调是他们需要化解的关键难题。实现了大数据黄绍雄后,他们就可以做到各个app销售业务互相出让天然资源。例如将 hdfs datanode 电脑接入 k8s 用于黄绍雄音频文件各项任务;反过来,音频文件的电脑上也可以运行 hadoop/spark 等大数据各项任务。

3. 空置电脑黄绍雄。IDC 通常会存有一定量的备机,用于各销售业务应急情景采用,但是日常是空置的。这部分电脑他们也会自动化接入 k8s 跑黄绍雄各项任务,当销售业务需要借调备机时再自动下线黄绍雄。

下面,他们结合在app黄绍雄和app间黄绍雄这两个情景,具体介绍一下黄绍雄的关键控制技术点。

04 在app黄绍雄

4.1 总体架构

各项任务提交模块。caster 是他们的新浪网销售业务发布网络平台,crm 则是app格式化各项任务提交网络平台。crm 可以支持多软件产业运维、黄绍雄天然资源余量统计、黄绍雄天然资源 quota 管控等。

k8s 运维模块。kube-scheduler 为原生植物的新浪网各项任务运维器,而 job-scheduler 是他们自研的app各项任务运维器,能支持音频文件各项任务的高并发运维。另外 webhook 负责对app各项任务的天然资源进口产品进行动态转换,转换为自定义的 k8s 扩展天然资源。

colocation-agent。每个 k8s 节点上单厢部署黄绍雄 agent,负责黄绍雄INS13ZD动态计算和上报、天然资源隔绝、监控数据上报等。

colocation config manager。在大规模 k8s 软件产业中,各类节点的黄绍雄配置存有一定的差异性,同时也存有动态更新的需求。该模块负责对黄绍雄配置进行集中管控,支持策略下发、开关黄绍雄等功能。

黄绍雄的可观测性。每个节点的 agent 负责采集节点中的一些黄绍雄指标,例如:可黄绍雄天然资源量、前述的黄绍雄天然资源用量等,最终上报给 prometheus 进行看板展示。可观测性对于排查单机的黄绍雄难题非常有用,他们可以很方便地透过监控曲线来查看某个时刻的黄绍雄天然资源采用情况。同时,他们也可以随时查看整体软件产业的黄绍雄INS13ZD采用趋势。

下面,他们从黄绍雄各项任务运维、新浪网 QoS 保障两方面来介绍在app黄绍雄的关键控制技术点。

4.2 黄绍雄各项任务运维

k8s 原生植物运维器的基本原理和难题

k8s 的每个节点单厢上报节点天然资源总量(例如 allocatable cpu)。对于一个待运维的 pod,k8s 运维器会查看 pod 的天然资源请求进口产品(例如 cpu reqeust)以及相关运维约束,然后经过预选和优选阶段,最终挑选出一个最佳的 node 用于部署该 pod。如果黄绍雄各项任务直接采用这套原生植物的运维机制会存有几个难题:

黄绍雄 pod 会占用原生植物的天然资源进口产品(例如 cpurequest),这会导致新浪网各项任务发布的这时候没有可用天然资源;

原生植物运维本质是静态运维,没有考虑电脑前述阻抗,因此没法有效地将黄绍雄各项任务运维到前述阻抗有空余的电脑上。

基于扩展天然资源的黄绍雄运维

为了化解前述难题,我们基于 k8s 的扩展天然资源进行黄绍雄各项任务运维,整体分为 3 个步骤:

1. colocation agent 模块中,策略组件会实时加载当前接收到的黄绍雄配置,并调用 autopilot 组件进行黄绍雄INS13ZD的计算,然后透过 device-plugin 组件上报黄绍雄扩展天然资源,例如 caster.io/colocation-cpu

2. 黄绍雄各项任务在提出申请天然资源进口产品时,仍然提出申请原生植物 cpu 天然资源,但是会增加 pod 标签 “caster.io/resource-type: colocation”。k8s webhook 模块根据标签识别到黄绍雄 pod,然后将 pod 提出申请的天然资源修改为黄绍雄扩展天然资源。这种方式对销售业务层屏蔽了底层扩展天然资源,透过标注 pod 标签即可指定是否采用黄绍雄天然资源。

3. 黄绍雄运维器 job-scheduler 根据 pod 提出申请的扩展天然资源量以及各个节点上报的黄绍雄扩展天然资源量进行运维。他们利用音频文件 pod 存有同质化(天然资源规格和运维约束相同)的特征对运维器进行了优化,基本思路是:

将 pod 与运维相关的字段进行 hash 值计算,并在运维队列中按 hash 值排序 pod

pod 预选的结果同样也满足其他同质化 pod 的要求,因此将预选 node 进行缓存

当前处理的 pod 若是同质化 pod,则从缓存中直接选取一个节点进行运维

黄绍雄天然资源量计算

k8s node 是怎么确定当前节点应该上报多少混部扩展天然资源量的呢?他们特别针对相同的应用情景设计了相同的黄绍雄策略算法:

1. 动态计算。特别针对各类物理天然资源,例如 cpu、memory 等,他们会分别设置电脑的安全水位值 n%。agent 会实时探测新浪网进程的天然资源采用率 online_usage,然后根据安全水位和新浪网阻抗动态计算出可黄绍雄天然资源量。新浪网采用率和可黄绍雄天然资源量是此消彼长的,随着新浪网采用率上升,他们上报的可黄绍雄量就会下降,反之,当新浪网采用率下降,可黄绍雄量就会上升。

2. 静态计算。例如备机池空置电脑没有新浪网销售业务,不需要动态天然资源计算,因此他们可以配置静态上报策略,上报固定的可黄绍雄天然资源量即可。

3. 分时计算。如果部分新浪网销售业务在某些时间段不希望部署混部各项任务,他们就需要用到分时策略,即在某些时间段关闭黄绍雄或者减少上报黄绍雄天然资源量。另外,他们还支持设置 grace period,在分时黄绍雄结束前,会提前停止运维黄绍雄各项任务到该 k8s node,并等待存量各项任务结束,做到优雅退出。

4.3 新浪网 QoS 保障

天然资源隔绝是黄绍雄架构的关键难点。他们希望在提升单机黄绍雄天然资源量的同时,尽可能地降低黄绍雄各项任务对新浪网销售业务的性能影响。主要从三个层次来保障新浪网销售业务的 QoS:

任务运维。根据前文所述的黄绍雄各项任务运维机制,黄绍雄运维器可以实时感知各节点的可黄绍雄天然资源量,因此可以从全局视角将黄绍雄各项任务运维到天然资源充足的节点上。

天然资源隔绝。节点黄绍雄 agent 可以秒级检测新浪网阻抗变化,根据安全水位值计算当前可黄绍雄天然资源量,然后透过 cgroup 及时进行天然资源限制。

各项任务驱逐。app的黄绍雄各项任务通常都是可重试的,因此驱逐可以作为一种兜底方式。

下面他们详细介绍一下天然资源隔绝层的几种策略。

黄绍雄大框

在前面的介绍中他们提到 webhook 会对黄绍雄各项任务提出申请的天然资源类型进行修改,去除原生植物的天然资源类型 request.cpu 和 request.memory,改成 caster.io/colocation-cpu 和 caster.io/colocation-memory。由于没有提出申请原生植物天然资源类型,那么 k8s 会自动将这类 pod 归类为 best effort 类型,并且最终透过 runc 将该类 pod 的 cgroup 设置到 /sys/fs/cgroup/cpu/kubepods/besteffort 目录,他们称为 ” 黄绍雄大框 “。

cpu 动态隔绝

在 cgroup 层面,他们给大框设置了最小的 cpu share 值,保证在天然资源争抢时,黄绍雄各项任务获得 cpu 时间片的权重最轻。

colocation agent 中的 cgroup manager 组件负责动态地调整 ” 黄绍雄大框 ” 的 cpu quota,从而对黄绍雄各项任务进行整体的天然资源限制。当 colocation agent 检测到新浪网阻抗降低时,就会调大 ” 黄绍雄大框 ” 的 cpu quota,让黄绍雄各项任务充分利用空余的INS13ZD。当在线阻抗升高时,则是缩小 ” 黄绍雄大框 ” 的 cpu quota,快速让出天然资源给新浪网销售业务采用。

此外,他们透过 cpuset cgroup 对整体黄绍雄大框做了绑核处理,避免黄绍雄各项任务进程频繁切换干扰新浪网业务进程。当黄绍雄INS13ZD改变时,agent 会给大框动态选取相应的 cpu 核心进行绑定。另外,选取 cpu 核心的这时候也考虑了 cpu HT,即尽量将同一个物理核上的逻辑核同时绑定给黄绍雄各项任务采用。否则,如果新浪网各项任务和黄绍雄各项任务分别跑在一个物理核的两个逻辑核上,新浪网各项任务还是有可能受到 “noisy neighbor” 干扰。

内存动态隔绝

与 cpu 隔绝方式类似,colocation agent 会根据当前新浪网销售业务内存采用情况,动态扩缩黄绍雄大框的 memory quota。另外,透过调节 oom_score_adj,黄绍雄各项任务的 oom_sore 被设为最大值,保证 oom 时黄绍雄各项任务尽量优先被驱逐。

网络带宽限制

他们采用了 cni-adaptor 组件,使得 k8s node 可以支持多种网络模式,对于音频文件黄绍雄各项任务,通常不需要被外部访问,因此透过 annotation 可以指定 bridge 网络模式,分配 host-local 的 ip,避免占用全局网段中的 ip 天然资源。同时也利用了 linux tc 进行黄绍雄 pod 的网络带宽限制。

驱逐机制

黄绍雄 agent 层支持内存、磁盘、cpu load 等维度的驱逐机制。当任意天然资源阻抗达至设置的驱逐水位时,agent 会立即驱逐电脑上的黄绍雄各项任务。为了防止各项任务在同一台电脑上被频繁驱逐,需要在驱逐后设置一定的冷却时间,冷却期内禁止运维黄绍雄各项任务。

05 离线间黄绍雄

特别针对训练、音频文件等app软件产业跑大数据黄绍雄各项任务的情景,他们基于在app黄绍雄框架做了功能增强,其突破点在于 yarn nodemanager on k8s。具体的运维步骤为:

yarn node manager 以 daemonset 的形式部署在相应的黄绍雄节点上

节点上的黄绍雄 agent 会动态检测新浪网罐子阻抗变化,并根据设置的黄绍雄策略计算可黄绍雄值。这个值一方面会透过接口上报给 yarn rm,另外一方面会设置到黄绍雄大框的 cgroup 中进行动态的天然资源限制

用户把大数据各项任务提交到黄绍雄软件产业时,rm 会找到软件产业中有充足天然资源的黄绍雄节点,并最终在 nm 中拉起 task

为了降低大数据各项任务对非黄绍雄销售业务的影响,大数据团队也做了相关控制技术改造,例如支持 remote shuffle、基于应用肖像识别小规格各项任务进行运维等。

06 黄绍雄管理网络平台

他们开发了界面化的黄绍雄管理网络平台来支撑日常的运维需求。主要功能包括:

策略管理。支持批量查看和设置节点的黄绍雄策略,例如安全水位、硬限值等。同时也支持设置节点组,只要节点打上对应的组标签,管控层可以秒级感知并立即下发相应黄绍雄策略。

开关黄绍雄。如果临时需要对特定电脑关闭黄绍雄,可以在网络平台进行一键关闭,此时会立即驱逐电脑上的黄绍雄各项任务并且停止上报黄绍雄天然资源。

监控查看。单机粒度监控主要满足日常排障需求,可以精确查看某一时刻电脑上的黄绍雄上报量、黄绍雄各项任务数、黄绍雄前述天然资源消耗等。节点组粒度的监控则可以评估这批电脑整体贡献的黄绍雄量以及对应的采用情况。

07 黄绍雄效果

目前 B 站云网络平台大部分电脑都参与了黄绍雄,黄绍雄电脑的平均 cpu 采用率可以达至 35%,峰值采用率则可以达至 55% 左右。这些黄绍雄INS13ZD支撑了 B 站大规模的音频音频文件各项任务,以及 ai 机审、大数据 MR 等各项任务,节省了数千台电脑的采购成本。

08 总结

责任编辑介绍了 B 站基于 k8s 云网络平台进行的黄绍雄课堂教学,主要分为在app黄绍雄、app间黄绍雄等销售业务情景。他们采用了一套对 k8s 无侵入的黄绍雄框架,并且透过运维、天然资源隔绝等方式来确保非黄绍雄销售业务的 SLO,另外也开发了相关的监控、策略管理网络平台等来提升整体黄绍雄系统的可运维性。先期他们会在内核层隔绝与可观测、统一运维等方面优化黄绍雄控制技术框架,持续助力云网络平台更上一层。

查看原文

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务