《许龙-B站k8s平台混部与弹性伸缩技术实践.pdf》由会员分享,可在线阅读,更多相关《许龙-B站k8s平台混部与弹性伸缩技术实践.pdf(39页珍藏版)》请在三个皮匠报告上搜索。
1、B站K8S平台混部与弹性伸缩技术实践主讲人:许龙领域驱动设计启发下的AI视觉分析引擎构建主讲人:戴 昊演讲嘉宾介绍许龙 Bilibili-基础架构部/资深开发 8年互联网从业经验,2020年加入B站基础平台团队 深度参与b站k8s平台混部、弹性伸缩等方向技术演进 目前负责B站k8s方向的整体研发工作(混部、弹性伸缩、调度、稳定性)目录CONTENTS背景1234混部架构及实现基于弹性伸缩的容量管理总结与展望背景 1B站容器平台发展历程微服务容器化 平台0到1,经历Mesos到Kubernetes重构 推进框架、中间件、运时标准化 研发流程关键路径效率提升 整体险控制及稳定性保障通用计算容器化
2、平台化建设 撑离线多种计算场景 混部调度框架演进 精细化容量管控 规模集群性能优化2017-2018Paas平台上线在线业务全托管训练平台上线批处理平台上线20192020混部1.0上线边缘计算平台上线2021混部2.0演进容量管理平台上线2022大数据 on k8s函数计算平台上线统一计算平台 全托管的计算服务 统一调度 极致弹性B站容器平台架构服务器网络存储自建IDC云主机云专线云存储公有云容器运行时k8s组件容器网络镜像仓库资源调度弹性伸缩混部框架故障恢复发布平台机器学习平台边缘计算平台批处理平台主站在线业务直播广告电商转码离线业务训练大数据容器引擎层业务层平台层基础设施层CPU核数:百
3、万级容器数:30万+容器平台如何降本?在保证稳定性的前提下,持续提升机器资源利用率合池资源统一调度分配,避免碎片化合并buffer,增加弹性资源混部错峰混部,解决业务波谷资源浪费区分任务优先级,保障业务SLO弹性伸缩VPA动态调整容器配额(request),提升资源超卖率HPA自动扩容,应对流量突发,保障稳定性混部架构及实现 2混部的概念混部目标在保证业务的SLO的前提下,提高资源利用率,降低成本混部定义节点粒度:通过调度、资源隔离等手段,将不同类型、不同优先级的业务容器部署在一个物理节点集群粒度:多种业务应用的错峰填谷业务特点在线业务延时敏感,SLO要求高波峰波谷明显多活带来的资源冗余粗放的
4、容量管理带来的资源浪费离线业务延时不敏感,允许出错重跑计算密集磁盘io密集(shuffle)网络io密集(跨机房拉数据)混部模式在离线混部 在线+视频转码大数据混部 yarn on k8sGPU混部 推理+编解码在离线混部的难点调度1资源隔离2混部任务不能占用在线任务的可用配额(cpu/memory request)调度器需要动态感知节点的可混部资源量满足离线任务的调度性能避免离线任务对在线任务的性能造成干扰各个资源维度的精细化隔离措施(cpu/内存/磁盘/网络)2在离线混部的架构kube-apiserverwebhookkube-schedulerjob-schedulercolocatio
5、n-agentk8s nodecrmcolocation config managerk8s nodek8s nodeprometheusoffline podonline podK8s nodeclustermasteroffline colocation podcasteronline podextended resource任务下发模块在线任务通过容器发布平台(caster)下发离线任务通过批处理任务平台(crm)下发调度模块在线任务采用原生调度器离线任务采用自研离线任务调度器离线任务基于k8s扩展资源进行调度混部agent模块混部算力的动态计算和上报资源隔离监控数据上报配置管理模块不同
6、节点组的混部策略管控在离线混部的调度方案Device ManagerDevice PluginkubeletColocation agentJob-schedulerNodeAllocatable:caster.io/colocation-cpu:10 caster.io/colocation-cpu:10register resourcepodsk8s node离线任务下发模块API-Servercluster1API-Servercluster2API-Servercluster3动态混部资源视图基于k8s device plugin机制,动态上报混部扩展资源二级调度基于各集群混部资源余量
7、进行多集群调度单集群内,自研job-scheduler基于扩展资源调度混部任务优先级调度任务分级、资源分级在离线混部的调度方案Priority QueueSort by hashPredicatesPrioritiesBindNode调度缓存Scheduler cacheJob-scheduler性能优化1.去除部分预选优选策略,提升单个 节点的判断时间2.指定percentageOfNodesToScore,减少筛选节点数量3.同质化pod调度:大量离线转码任务从调度角度看是等价的,即调度约束和资源规格一致一个pod预选和打分的结果也满足其他同质化pod的要求O(n)-O(1)Pop缓存打分
8、结果在离线混部的资源隔离kubepods/sys/fs/cgroupburstablePodxxx(guaranteed)podxxxbesteffortpodxxx混部大框混部大框16C/48GNodeNodeNode混部大框32C/100G混部大框8C/16G在线负载降低,混部动态调大在线负载升高,混部动态调小混部大框根据在线负载动态计算可混部资源量根据可混部资源量调整大框cgroup基于本地指标采集,去除外部监控链路依赖在离线混部的资源隔离混部大框:最小cpu share、动态扩缩绑核(考虑HT)内核层cpu调度优先级CPU21在离线混部的资源隔离混部大框:动态扩缩调节oom_score
9、_adj内核层oom优先级memcg page cache异步回收离线转码任务采用bridge网络,使用host-local ip基于TC进行混部pod的网络带宽限速4针对内存、磁盘等不可压缩资源,达到阈值后触发混部任务驱逐驱逐冷却内存22网络3驱逐机制4page cacherssmemory.wmark_lowmemory.wmark_highmemory.limit内核隔离参数设置方式基于runtime proxy容器创建时设置内核参数,时效性更高混部场景延伸kubelet非k8s机器能否跑混部?存在部分业务未容器化,机器未接入k8s,但是资源利用率低,例如db、中间件等这类机器也可以安装
10、kubelet,从而纳管到k8s集群提供闲置算力沿用在离线混部框架,物理机进程视作“在线任务”,转码任务视作“离线任务”k8s masterDB机器kubeletDB机器kubeletDB机器colocation agent pod DB进程DB机器 colocation pod动态调整混部大框检测物理机进程负载混部模式在离线混部 在线+视频转码大数据混部 yarn on k8sGPU混部 推理+编解码大数据混部yarn(resource manager)colocation agent podNM podK8S node资源上报/超配1.动态汇报资源2.调整混部大框启动MR/spark ta
11、skonline pod检测在线负载AM申请资源Yarn NM on k8sYarn NM作为daemonset部署到k8s node混部agent动态上报资源给NM中的agentYarn技术优化:支持remote shuffle基于应用画像调度中小规格任务跨机房网络带宽限速Amiya sidecar混部模式在离线混部 在线+视频转码大数据混部 yarn on k8sGPU混部 推理+编解码GPU混部Nvidia-dockerGPU0GPU1GPUn推理pod1(独占卡)推理pod1推理pod2推理pod1转码pod2k8s+GPU scheduler plugincuda api hookk
12、ubeletGPU device pluginGPU managerCUDA Library/Driver架构基于TKE开源vGPU方案二次开发,包括scheduler和gpu manager,新增特性包括:新老GPU调度框架无损切换隔离特性的Pod级灰度能力支持编解码设备上报支持显存预留隔离能力LD_PRELOAD方式hook cuda api,实现算力和显存隔离混部单卡跑多个推理任务Binpack调度单卡跑推理+转码推理使用cuda模块,转码使用编解码模块显存预留+隔离混部可观测性1资源类型粒度cpu、内存、磁盘用量粒度上报量、配额使用量、实际使用量混部业务粒度集群粒度、资源池粒度驱逐事件
13、节点层面资源用量统计内核层cpu调度延迟Memory direct reclaim、direct compact的耗时信息监控大盘211故障定位22混部管理平台1策略类型:分时、静态、动态水位控制驱逐策略计算周期开关混部混部任务驱逐混部状态查看1策略管理211节点管理23节点组管理22基于node label圈节点混部管理webconfig managerk8s masterdbcolocation-agentK8s nodelist-watchsend configmeta data混部效果除推搜外,整体机器的平均cpu使用率可以达到40%+,峰值使用率可以达到60%在线业务SLO无明显影响
14、日均百万级任务量,支撑内部多个重要业务的算力需求视频转码AI机审大数据hadoop/spark/flink节省数百张GPU卡在线离线整体基于弹性伸缩的容量管理 3弹性伸缩-服务画像应用属性基础属性,服务等级,分布式,多活行为属性,SLO,峰值CPU使用量等定制属性,基于数据分析,基于某些标签组合判定,适合HPA/服务稳定应用群满足某些特定组合条件的应用集合,适合HPA/一周新增应用/高风险核心应用圈应用可配置化的圈定应用群的能力,离线/在线计算应用群信息弹性伸缩-VPA(Vertical Pod Autoscaler)CPU Used整机总CPUCPU RequestNodeNode方案平台侧
15、对外屏蔽request,用户只需配置limitrequest通过VPA自动调整至合理值VPA背景容器CPU request设置不合理,导致:节点CPU分配率高,实际利用率却很低弹性伸缩-VPA(Vertical Pod Autoscaler)推荐策略基于服务等级:L0L3七日峰值分位数据+冗余度更新策略新建pod,通过webhook修改为推荐的request存量pod,基于自研inplace vpa,动态修改request弹性伸缩-VPA(Vertical Pod Autoscaler)指标管理策略模板VPA策略调优策略预估/对照策略管理VPA管理平台策略管理和优化策略避让执行和效果数据分析稳
16、定性覆盖率执行记录效果数据数据运营业务/应用时间窗口压测/活动黑名单失败率覆盖率冗余度预警VPA策略避让VPA效果分析VPA稳定性弹性伸缩-HPA(Horizontal Pod Autoscaler)HPA CRDPromethuesHPA/CronHPA ControllerDeploymentHPA资源指标HPA策略模板HPA策略评估HPA风险规避HPA效果分析HPA稳定性连接池容量风控预跑策略管理弹性预检HPA应用群异常记录覆盖率可观测弹性质量扩缩失败预警失效预警预警触发通知PODPODK8S服务等级服务画像度量指标容量风控服务等级,不同服务等级,推荐不同资源扩缩容阈值服务画像,结合服务
17、画像,圈定适合HPA应用群容量风控,基于历史资源使用,针对不合理配置进行拦截,二次审核度量指标,支持通用cpu/memory相关指标,业务自定义度量指标,grpc_qps,http_qps等弹性伸缩-HPA扩容风险连接池瓶颈 随着业务扩容,Mysql、KV等各类db 是否存在连接池相关瓶颈服务/中间件容量瓶颈 下游链路服务压力 底层中间件压力解决方案 HPA预检 全链路弹性 超载保护 限流、熔断、降级弹性伸缩-CronHPACronHPADeploymentReplicaSet业务场景直播/电商/游戏/漫画等业务,活动前扩容,活动后缩容周末/寒暑假容量保障业界调研阿里云(AliyunConta
18、inerService),兼容HPA,支持多种定时模式腾讯云(TKEStack),直接作用在Deployment上,不兼容HPA落地方案基于阿里CronHPA二次开发CronHPA和HPA可以共存,HPA弹性兜底,CronHPA自动关联已存在HPACronHPA目标实例数只能在HPA下限和上限之间调整,控制调整半径CronHPA自动回收机制支持暂停PodPodPodHPA总结与展望 4总结与展望混部 Spark/Flink native on k8s 内核层资源隔离和可观测性增强 k8s和yarn统一调度 GPU混部 算力和显存隔离能力增强 besteffort策略任务调度资源隔离观测排障管理平台弹性伸缩 VPA精细化运营 HPA指标智能预测 跨集群联邦HPA cluster autoscaling(混合云)算力标准化VPAHPA策略预跑风险规避效果分析稳定性服务画像弹性伸缩平台THANKSK+峰会北京站官网AiDD峰会北京站官网