乐趣区

关于云原生:vivo-云原生容器探索和落地实践

作者:vivo 互联网容器团队 - Pan Liangbiao

本文依据潘良彪老师在“2022 vivo 开发者大会 ” 现场演讲内容整顿而成。公众号回复【2022 VDC】获取互联网技术分会场议题相干材料。

2018 年起,vivo 以容器作为根底底座,打造了一站式云原生机器学习平台。向上撑持了算法中台,为算法工程师提供数据治理、模型训练、模型治理、模型部署等能力,为广告、举荐和搜寻等业务赋能,胜利为算法实现了降本、提效,让云原生和容器价值初露锋芒。基于机器学习平台的试点成绩,通过算法场景的试点实际和价值剖析,对外部策略做了降级。确定基于云原生理念去构建行业一流的容器生态,实现规模化的降本提效指标。

本文会具体介绍 vivo 在容器集群高可用建设中的具体实际,包含在容器集群高可用建设、容器集群自动化运维、容器平台架构降级、容器平台能力加强、容器生态买通等层面的打磨和建设。目前,vivo 容器产品能力矩阵逐步趋于欠缺,并将围绕全面容器化、拥抱云原生和在离线混部三个方向持续发力。

云原生和容器,是当下比拟炽热的话题,其中 Kubernetes 更是成为容器编排畛域的事实标准。

国内外各企业在外部落地云原生和容器的过程中,基于本人的业务场景和倒退阶段,会遇到各种问题和挑战,本文是 vivo 在云原生容器畛域的摸索和落地实际,心愿能对读者有一些借鉴和帮忙。

一、容器技术和云原生理念

首先是容器技术和云原生理念的介绍。

1.1 容器技术简介

容器技术不是一个新技术,从 1979 年 unix 零碎的 chroot 诞生到当初,历经 40 多年的倒退,共通过了四个阶段,别离是:技术萌芽期、技术爆发期、商用探索期和商用拓展期

每个阶段,解决了不同的技术问题,别离是:环境隔离、软件散发和编排、商用服务状态、规模化和场景拓展。

相比于虚拟机,容器技术少了一层虚构操作系统的损耗,因而它比虚拟机具备更好的性能体现。另外容器在 系统资源、启动工夫、集群规模、高可用策略 等方面,也有非常明显的劣势。

2020 年 CNCF 中国云原生调查报告显示,承受考察的中国企业,有 68% 曾经在生产环境应用容器技术。

从行业倒退看,不论是云厂商还是各大科技公司,都在基于容器技术构建本人的新一代基础架构,推动企业数字翻新。容器技术曾经失去宽泛的认可和遍及。

1.2 云原生理念介绍

容器技术催生了云原生思潮,云原生生态推动了容器技术的倒退。那么云原生的精确定义和含意是什么呢?

云原生其实没有规范定义,如果非要给他一个定义,行业有两种观点:

  • 一个定义来自 Pivotal 这家公司,它是云原生利用的提出者,是云原生的先驱者、探路者。Pivotal 最新的官网对云原生的介绍有四个要点,别离是:DevOps、继续交付、微服务和容器
  • 另外一个定义来自 CNCF,CNCF 建设于 2015 年,它是一个开源组织,其存在的目标,是反对开源社区开发要害的云原生组件,包含 Kubernetes、Prometheus 监控等。

它把云原生分为 3 种核心技术 2 个核心理念

  • 3 种 核心技术 :别离是 容器、微服务、服务网格
  • 2 个 核心理念 :别离指 不可变基础设施和申明式 API

然而,不论是那一种定义,容器都是其根底,是云原生落地的外围技术手段。

1.3 云原生价值剖析

任何技术和理念,都必须有理论的业务价值。从效率、老本、品质三个维度,来剖析云原生和容器的技术价值,可总结如下:

  • 效率:可实现继续交付部署快、镜像封装可移植、弹性计算秒扩容。
  • 老本:可实现按需分配不节约、对立调度高填充、混合部署少碎片。
  • 品质:可实现运行状态可观测、故障产生可自愈、集群治理可运维。

二、vivo 容器技术摸索与实际

新技术的引入带来新的价值,也必然会引入新的问题,接下来介绍 vivo 在容器技术上的摸索和实际。

2.1 试点摸索

在 vivo 的算法场景中,机器学习平台负责算法模型迭代,是互联网算法业务中外围的一环,晚期的平台基于传统的架构,在效率、老本、性能和体验上均有肯定的有余,无奈满足算法业务快速增长的诉求。基于此,咱们首先在算法场景进行容器的试点摸索。从 2018 年开始,咱们以容器作为根底底座,打造了 vivo 的一站式云原生机器学习平台,向上撑持了公司的算法中台,为算法工程师提供数据治理、模型训练、模型治理、模型部署等能力,为广告、举荐和搜寻等业务赋能。

vivo 的云原生机器学习平台具备如下 5 大劣势:

  • 场景全:业务端到端,笼罩举荐、广告、搜寻多场景。
  • 体验好:排队工夫短,用户体验优,工作 P99 排队时长小于 45 分钟。
  • 成本低:调度能力好,资源利用率高,CPU 利用率均值大于 45%。
  • 效率高:网络规模大,训练跑得快,训练速度 8.3 亿样本每小时。
  • 后果优:算法迭代稳固,训练成功率高,训练成功率大于 95%。

vivo 云原生机器学习平台,胜利为算法实现了降本、提效,让云原生和容器价值初露锋芒。

2.2 价值开掘

基于后面机器学习平台的试点成绩,咱们深入分析和开掘容器和云原生的价值,联合 vivo 的状况,咱们发现容器和云原生是企业大规模降本和提效的最佳计划。

1)在降本方面

以后咱们外部服务器资源的利用率较低,以 CPU 利用率为例,以后 vivo 服务器整体利用率均值在 25% 左右,相比行业一流程度的 40%~50%,还有不少的晋升空间。

容器在资源隔离、对立调度和在离线混部等方面的劣势,均是晋升资源 ROI 的无效技术手段。

2)在提效方面

以后咱们在 中间件版本升级、机器迁徙、测试环境治理、突发流量应答和全球化部署的环境一致性 等方面均有业务痛点。

容器的 疾速交付、弹性自运维、微服务、服务网格 等云原生技术和架构,则是提效的无力措施。

2.3 策略降级

通过算法场景的试点实际和价值剖析,咱们对外部策略做了降级,确定基于云原生理念去构建行业一流的容器生态,实现规模化的降本提效指标。

为了更好匹配策略落地,拥抱云原生,咱们还对外部技术架构从新布局和降级,新增引入对立流量接入平台、容器运维治理平台、对立名字服务、容器监控等平台和能力,撑持容器生态在公司外部的全面建设和推广。

2.4 面临挑战

2.4.1 集群挑战

要提供大规模的生产可用的容器服务,容器集群的可用性首先会面临诸多挑战。上面介绍 vivo 容器化,在生产集群建设过程中遇到的 4 个比拟大的挑战。

  • 集群规模快速增长:vivo 集群服务器规模上万个宿主机节点,治理的集群数十个,单集群规模 2 千 +,实例数 10 万 +,对集群性能和机器治理挑战极大。
  • 集群运维、经营和标准化:因为晚期集群治理不标准,黑屏化操作和人为误操作等问题层出不穷,集群运维人员每天因为各种救火忙得焦头烂额。
  • 集群容器监控架构和可观测性:随着集群规模快速增长,容器的监控组件面临极大压力,对容器监控的采集、存储和展现,提出更高的要求。
  • 线上 K8s 版本升级迭代:面对 Kubernetes 版本的疾速迭代,须要实现给航行的飞机换引擎。

针对挑战,咱们的应答计划别离是:高可用、可观测、标准化和自动化。其中容器监控和 k8s 版本无损降级的挑战,vivo 公众号有具体技术计划的介绍,本文偏重介绍集群高可用和运维自动化两局部。

2.4.2 平台挑战

除了集群稳定性的挑战,平台也将面临各种挑战,因为容器平台和周边生态能力不欠缺,对业务存在较高的适配和迁徙老本。总结起来咱们遇到的挑战次要有 4 点:

  • 容器 IP 的变动:k8s 晚期把业务都设计成无状态的,其原生实现是每次公布容器的 IP 都会变动,这对局部依赖固定 IP 的传统业务不太敌对,业务革新老本较高。
  • 周边生态的适配和兼容:包含公布零碎、中间件微服务平台、外部开发框架和流量接入层等
  • 用户应用习惯:vivo 有比拟成熟的公布平台,用户习惯按机房公布,习惯资源分配和公布离开操作。
  • 价值输入:运维研发效率的晋升不好量化,容器老本劣势短期不好掂量。

下面这些挑战,推动咱们要进行容器周边生态买通,同时通过加强容器平台产品能力,来适配各种业务场景,升高用户的迁徙老本。

2.5 最佳实际

2.5.1 容器集群高可用建设

接下来,介绍 vivo 在容器集群高可用建设中的最佳实际,咱们是从 故障预防、故障发现和故障复原,3 个维度来构建容器集群可用性保障体系的。

1、在故障预防上,咱们别离从 流程工具、容灾能力和基础架构 3 个方面来进行建设:

  • 流程工具:次要蕴含故障预案和故障演练,以及通过建设运维治理平台,来实现运维标准化、白屏化和自动化。
  • 容灾能力:次要是构建业务跨故障域容灾能力,保障集群故障时,服务和业务流量能跨集群调度和疾速一键迁徙等。
  • 基础架构:次要是通过屏蔽用户对底层集群的感知,一个机房多套集群,一个业务同时部署在多个集群上,防止单集群故障对业务造成影响。

2、在故障发现上,咱们次要是通过,自建的监控大盘、日常集群巡检、外围组件监控、集群外拨测等措施,对故障及时发现和解决,升高对业务影响。

3、在故障复原上,次要是基于后面的故障预案,疾速复原,及时止损,并做好故障的复盘,不断改进咱们的故障预防和发现机制,积淀贵重教训。

另外,集群的可观测性是可用性保障的一个重要依据,咱们通过建设本人的 SLO 面板,对集群状态实时地进行监控,只有对经营情况一目了然,能力做到稳如泰山,从容应答所有变动。

2.5.2 容器集群自动化运维

除了容器集群本身稳定性建设,在运维自动化方面,咱们建设了容器多集群治理平台,实现 集群配置标准化 ,外围 运维场景白屏化,来晋升运维效率。

咱们的容器集群治理平台,是以云原生的形式来治理云原生,简略来说,就是基于 k8s 的 operator 机制,实现 k8s on k8s。

以后,咱们的平台曾经可能实现多集群的对立纳管,集群部署也是自动化、标准化的,还实现了底层 IAAS 层买通,集群节点能全流程化、可视化的一键扩缩容,而集群巡检性能,能够帮忙咱们及时发现集群的问题和隐患。

通过平台进行日常运维和操作,不仅能晋升效率,也具备审计能力,有操作和变更日志可追溯,便于问题定位。

2.5.3 容器平台架构降级

为适应业务容器化在外部的疾速遍及和推广,咱们降级了 vivo 的容器平台架构。

新的架构分为 4 层,容器 +k8s 则作为根底的对立底座,向下对接公司 IAAS 层的基础设施,向上提供容器产品和平台能力,并通过凋谢 API 供下层调用和定制本人的下层逻辑。

API 之上是容器反对的各种服务类型,包含 在线服务、中间件服务、大数据计算、算法训练、实时计算等,最下面是为 vivo 互联网各个业务进行赋能。

基于这套容器平台架构,业务能实现 资源隔离部署、疾速交付和按需应用,同时也具备更好的弹性伸缩能力。对平台,咱们能够对立资源的调度,实现资源的分时复用、在离线混部等,来晋升资源的利用率。

2.5.4 容器平台能力加强

vivo 外部容器化场景比拟多样化,为了让业务可能安心、低成本的接入和应用容器的能力,在推广过程中,咱们基于开源 + 自研做了容器的适配和原生能力的加强。

上面对 6 个产品能力加强进行简略的分享:

  • 云原生工作负载加强:基于开源的 openkruise,对原生 deployment、statefulset 等 workload 进行了加强,实现诸如原地降级、公布暂停、流式和配置优先级等扩大能力。
  • 服务无损公布加强:基于外部框架和平台自主研发,实现 HTTP、RPC 等协定框架的流量无损公布。
  • 容器镜像平安:基于开源的 Harbor 定制开发,实现容器镜像平安扫描和卡控能力。
  • 容器镜像减速:基于开源 dragonfly2 定制扩大,让大规模集群镜像的散发性能晋升 80% 以上。
  • IP 固定能力加强:基于有状态服务和 CNI 进行自研,撑持黑白名单、有状态服务场景诉求,升高业务接入革新老本。
  • 多集群治理能力加强:基于开源 Karmada 进行性能优化和扩大,晋升业务容灾能力,撑持单集群横向扩大能力。

当然,在充沛享受开源红利的同时,咱们也继续地参加开源协同,回馈社区。在应用和自研的过程中,咱们也把本人生产实践过程中发现的问题和积攒的教训提交到社区,例如 Dragonfly2、Karmada 等。

2.5.5 容器 CICD 一体化

除了平台能力的加强,容器平台作为一个 PaaS 平台,须要和周边的生态买通,能力让业务更好的迁徙和应用,其中最重要的就是公布零碎的买通,也就是 CICD 平台。

简直每个科技公司都会有本人的 CICD,它是一个 DevOps 自动化的工具,可进行业务构建和编排部署的流水线。

vivo 的 CICD 平台底层架构是基于 JenKins+Spinnaker 实现的,整个容器构建和部署流程如下:

  • 首先,用户在 CICD 平台上创立好公布过程的流水线配置并保留。
  • 其次,CI 环节可实现和外部 GitLab 对接,拉取代码,基于 jenkins 进行代码编译和镜像构建,构建好的镜像通过平安扫描后,推送到开发环境的镜像仓库。
  • 最初,在 CD 环节,CICD 平台会调用容器平台提供的 API,进行开发、测试、预发和生产环境的部署操作。

2.5.6 对立流量接入

接下来,介绍容器生态里,最重要的业务流量接入层的买通。

晚期,vivo 外部是基于 Nginx,来实现的 南北流量和货色流量 的转发。在虚拟机和物理机场景能比拟好的撑持,随着容器在外部全面的推广,传统的 Nginx 架构已不能适配。

次要体现在,容器场景业务实例数量,相比原来虚拟机和物理机成倍数增长,容器公布过程 IP 的频发变动和状态同步,都会对 Nginx 集群造成十分大的压力,在业务申请量十分大的状况下,接入层的配置文件刷新和加载,会造成业务的抖动,这是咱们不能承受的。

基于这个背景,咱们基于 APISIX 构建了云原生流量接入层,来适应全面容器化的需要。通过一年多的建设,以后咱们的对立流量接入平台曾经可能很好的撑持容器化的接入,同时具备更好的扩大能力。

2.6 实际成绩

2.6.1 产品能力矩阵欠缺

通过多年的打磨和建设,vivo 容器产品能力矩阵趋于欠缺,整个产品能力矩阵,分为 4 层:

  • 根底服务层:蕴含 3 类服务,镜像治理、集群运维和集群监控。
  • 能力层:蕴含 6 个外围能力,别离是集群调度、CAAS-API、容器配置、容器业务监控告警、容器日志和平台扩大能力。
  • 平台层:蕴含 2 大平台能力,别离是 CI 和 CD。
  • 业务层:以后笼罩了 vivo 互联网所有业务场景。

2.6.2 业务接入成绩凸显

接下来,会具体介绍下 vivo 容器推广状况。

目前容器在 vivo 外部次要笼罩 4 大场景,别离是:互联网在线业务 算法在线 大数据计算 AI 算法训练 等。接下来,会从接入规模和价值来简略介绍。

  • 互联网在线服务:外部各个业务线均有大量服务运行在容器上,例如 vivo 商城、账号、浏览器、快利用、天气等,曾经接入服务 600+。
  • 算法在线服务:以后接入 500+ 服务,3000+ 服务器,波及推广搜的各个业务线。
  • 大数据计算服务:蕴含离线计算如 Spark,实时计算如 Flink、Olap 等场景,以后接入集群 20+。
  • AI 算法训练:次要是提供 GPU、CPU 异构计算,业务场景如 Tensorflow、mpi 等场景,算力十几万核,以及若干 GPU 卡。

业务容器化后,给业务在降本提效上带来的成果非常明显,包含但不限于扩缩容效率、弹性伸缩能力、业务自愈能力、资源老本等方面。

2.7 实际总结

基于咱们的摸索和实际,可总结为技术价值、推广策略、平台建设和云原生冲破 4 个维度的思考。

  • 找价值:关注新技术,但不执着于技术自身,必须联合业务痛点和价值。
  • 定策略:自下而上小范畴试点摸索,产生理论的业务价值,影响自上而下的策略调整。
  • 建平台:当曾经有比较完善的平台和能力时,要找到容器的切入点,进行交融共建,切忌推到重来;对于须要从 0 到 1 建设的新能力,须要果决的孵化翻新。
  • 求冲破:在业务容器化过程中,为了疾速容器化,咱们做了许多的兼容和适配。为了更好的降本提效,将来,咱们心愿疏导用户,实现从应用云原生,到用好云原生的冲破。

总的来说,技术服务于业务,企业应基于本身现状,寻找适合的解决方案,并为业务发明价值。

三、vivo 对云原生的将来瞻望

3.1 vivo 基础架构倒退

从过来看将来倒退,回顾过去 10 年历程,vivo 基础架构的倒退经验了 3 个阶段:

  • 阶段一:传统研发运维阶段,从 2011 到 2018 年,从晚期的 do 拆散研发模式,到基于 openstack+kvm 的虚拟化计划落地。
  • 阶段二:利用架构互联网化阶段,从 2018 到 2020 年,容器化开始在 vivo 外部衰亡。
  • 阶段三:云原生基础架构演进阶段,从 2021 年到当初,云原生和容器将会在 vivo 外部有更多场景的利用和推广,如在离线混部等。

3.2 vivo 云原生将来瞻望

回归事物根源思考,做正确的事,并把事件做正确。不盲从,有定力,基于价值,主观对待新技术倒退,大胆假如、小心验证、实际出真知。

vivo 云原生的将来,将会朝着 3 个方向倒退,别离是全面容器化、拥抱云原生和在离线混部。

咱们的愿景是:一次开发到处运行,通过主动运维实现极致效率和老本最优!

  • 对开发人员:咱们心愿大家成为那只漫游海上的蓝色鲸鱼,驮着咱们的业务利用,一次构建到处散发,灵便调度和运维。
  • 对管理者:咱们心愿谋求效率的同时,可能实现老本最优。
退出移动版