【技术补给站】第11期:左手自研,右手开源,技术揭秘华为云如何领跑容器市场-4008云顶国际网站

华为云社区精选 发表于 2021/07/08 15:46:36 2021/07/08
【摘要】 云原生浪潮下,容器技术是串联起整个云原生世界的关键一环。


近日,idc 发布的《prc sdc market overview and analysis, 2020h2/2020》报告显示,华为云以24.3%的市场份额,斩获中国容器软件市场第一

下面,我们从技术角度分析,华为云为什么能领跑容器软件市场。

容器是什么?

从字面上看,这是一个用于盛放某种东西的器具,实际也是如此,容器技术可以将软件的程序代码和依赖项打包起来,让其与实际运行的环境隔离,哪里需要搬哪里,比如在数据中心、个人电脑上部署运行。

这个概念有点像老大哥虚拟机,但是两者的相似点仅仅在于:提供独立的环境运行软件。在基因、容器和上帝 中,作者从哲学化的视角谈了程序员创造的虚拟世界,也点出了两者的异曲同工之妙:docker容器技术和vm虚拟机从技术原理上看,是完全不同的路线,连实现思路都不一样。但是,它们所达成的效果或者说是目标确是惊人的一致:即模拟一台看着像物理机一样的东西。

虽然如此,但两者内在逻辑差别很大。容器可以在操作系统级别进行虚拟化,一个操作系统内核上可以运行多个容器,而虚拟机只是硬件层面的虚拟化。相比较vm,容器更轻巧、启动速度更快、占用的内存微乎其微,容器与docker详细对比了虚拟机和容器的优缺点。

随着用户对云端应用开发、部署和运维的效率愈加重视,间接促成了容器的盛行。 不过,容器在云服务领域“发光发热“离不开一个关键技术:docker。

docker是目前应用最多的容器引擎技术,它的logo是一只蓝色的鲸鱼驮着一堆小方块。开发者通过docker可以为任何应用创建容器:应用的流程、库和依赖,甚至整个操作系统的文件系统能被打包成一个简单的可移植的包,这个包就像是鲸鱼背上蓝色的小方块,它可以在任何运行docker的机器上使用,从根本上解决了开发运行环境不一致的问题,让容器真正实现了一次构建,随处运行。

当应用程序被分解为多个小组件或服务,每个组件或服务都放置在一个容器中,每个容器可能还运行在不同的计算机中,此时就需要对容器进行有序的编排和管理。就像电脑上的操作系统,它可以管理所有应用程序,并规划哪个应用程序何时使用电脑的cpu和其他硬件资源。

脱胎于google内部集群管理系统borg的kubernetes逐渐成为业界标准,它可以通过api的方式将多个不同的计算机作为一个资源池进行管理,类似某种集群操作系统,管理整个集群中的容器化应用程序。 docker与kubernetes的兴起这篇文章就具体谈到了kubernetes(k8s)如何从三足鼎立的局面中pk掉其他两个对手,在混战中取得胜利。

至此,属于容器的黄金时代大幕正式拉开。

gartner预测,到2023年,70%的组织将在生产中运行三个或更多容器化应用程序。容器、kubernetes和微服务应用模式是企业it创新和数字化转型的三大驱动力。

华为很早就投入了容器的怀抱中,由于一直使用虚拟机封装应用程序,每次启动虚拟机花费了大量的时间,这给管理及部署基于虚机应用程序的高成本和低效率带来了挑战。所以在2015年的时候,华为决定利用kubernetes技术对自身it系统进行容器化改造。华为在通过自身的容器化改造实践受益的同时,又将遇到的实际问题不断贡献给社区,与社区成员一同推动kubernetes的发展。

2018年4月,华为云获得了cncf基金会的顶级席位——cncf技术监督委员会席位,全球共9席,华为是亚洲首家进入者。

同时,随着越来越多的企业业务选择容器化,在集群的规模、性能、实时监控与弹性扩缩容等方面都提出了新的要求,当开源社区方案难以解决这些问题的时候,就非常考验各大云服务供应商的技术能力。

为什么说容器的崛起预示着云原生时代到来?中,华为云云原生团队认为,各类现代化的应用都将会运行在k8s之上,不仅仅是当前以互联网app、webservice为代表的无状态应用,还有新型的诸如大数据、ai、分布式数据中间件等等有状态应用,以及边缘应用也将会普遍运行在k8s之上,k8s将完成对各类现有平台的归一化,成为一个统一的应用运行的基础平台。

华为云最早于2018年洞察到了这一技术趋势,在容器全栈产品中构建了vessel云原生技术平台,主要包括了以容器引擎isula、容器网络yangtse、容器存储everest为代表的面向统一资源层的云原生基础设施组件。

下面,我们将逐一为大家揭开华为云的容器技术面纱。

容器引擎isula

基于docker和kubernetes,首先docker并不是万能药,它在某些场景下也存在不足,比如:

  • 在资源敏感环境,或需要部署高密度容器节点时,容器对基础设施的资源占用会急剧升高;
  • 当大规模应用拉起或遇到突发流量时,并发速度可能成为瓶颈。

当主流的 docker 等容器引擎在特定用例下力不从心时,一些针对某种用例进行过专门优化的容器引擎技术开始崛起。比如说,以 kata container 为代表的专门针对容器隔离性不够严格而设计的安全容器技术;以 isula 为代表的针对资源受限的边缘计算和 iot 环境设计的轻量级容器技术。

可以看出,isula是与docker相对的一种容器引擎,它一方面完全兼容现有容器生态,另一方面相比docker内存占用下降68%、启动时间缩短35%。

比如相比golang编写的docker,isula使用c/c 实现,具有轻、灵、巧、快的特点,不受硬件规格和架构的限制,底噪开销更小。在严苛的资源要求环境下,轻量模式下的 isulad 本身占用资源极低(< 15m) 。

2017 年,isula 技术团队成功将 kata containers 集成到 isula 容器平台,并于 18 年初应用于华为云容器服务,推出基于isulad 容器引擎和 kata containers 的商用容器服务——华为云容器实例 cci(cloud container instance),这也是业界首个 serverless 架构的云容器服务。

那么,基于isulad 容器引擎和 kata containers 如何打造安全、高性能的cci?且看 基于 kata containers 与 isulad 的云容器实践解析进一步分析,文中提到真正的 serverless 容器服务中,集群管理由云服务提供商承担,客户只需要关注每个应用的容器实例即可。在这种情况下,云服务提供商需要考虑如何在统一管理面下保证每个用户的安全。

cci 服务所属的 kubernetes 集群直接部署在裸金属服务器之上,底层是 kata containers,中间靠 isula 容器平台连接。其中,依靠 kata containers 的强隔离特性,多个租户之间的容器运行环境强隔离,不同租户之间的容器不感知、不可见,做到在同一台裸金属服务器上混合部署而安全无虞。

安全之外,在算力方面,cci基于isula提供的gpu直通功能,可以直接在容器中使用各种gpu进行ai计算。再加上cci无需购买和管理弹性服务器,可直接在华为云上运行容器和pod,也无需创建集群,管理master和work节点,非常适用于批量计算,高性能计算,突发扩容,以及ci/cd测试。

在此,华为云社区推荐一些有趣的案例,可以帮助大家快速上手cci,比如 和云容器实例cci – 经典2048数字合成游戏部署指南 ,通过这些简单的实操和小游戏,能够对serverless 架构的云容器服务有更直观的认识。

容器网络yangtse

大家应该都看过某些明星导致社交媒体平台宕机的新闻,明星事件带来的突发流量触发业务扩容,以前是扩容虚拟机,速度慢还情有可原,现在大部分互联网平台都使用容器了,为什么扩容速度还是跟不上流量增长的节奏呢?

首先,kubernetes本身并不负责网络通信,它提供了容器网络接口cni负责具体的网络通信,开源的cni插件非常多,像flannel、calico等。包括华为云容器引擎cce也专门为kubernetes定制了cni插件,使得kubernetes可以使用华为云vpc网络。

尽管如此,多个容器集群的网络通信(容器连接到其他容器、主机和外部网络的机制)始终是个复杂的问题。比如大规模节点管理场景下网络性能的瓶颈;网口发放速度如何匹配容器扩容速度等等。最终,对对底层虚拟化网络提出了密度更高规模更大发放更快,调整更频繁的要求。

容器网络yangtse深度融合华为云虚拟私有云(vpc)原生网络能力,它采用的vpc-native组网被称作eni(elastic network interface)模式,容器直接挂载具有vpc子网地址的eni,具备完全vpc网络互通能力。容器实例可以在集群vpc网络和与之相连的其他vpc网络中进行原生路由,并且直接使用vpc原生的网络能力如 network policy、elb、eip、nat等。换言之,就是容器地址属于vpc子网,容器独占对应的eni网口,解决了容器的互通性问题。

而且yangtse基于华为云擎天架构的软硬协同能力,会把治理和转发逻辑下沉到擎天卡上,实现容器网络主机资源0占用。数据显示,通过硬件直通方式及动态网络队列,网络整体性能提升40%,单容器pps提升2倍;基于warm pool的能力,1-2秒内完成eni的发放和网络端到端打通。

至于具体如何实现,大体上可以总结为三点:

1、warm pool 机制可以解决网络资源预热的问题。如果不做预热,容器网络端到端打通时间在一分钟以上,分钟级容器启动时间是不可接受的。 warm pool机制在裸金属节点上预挂载一定数量eni(用户可根据服务部署并发量自定义配置),容器随时调度到预热节点上都有即时可用的eni网卡。经过warm pool的优化,容器网络端到端打通时间缩短为1s-2s。

2、得益于擎天架构的优势,裸金属容器还可以向虚拟机容器扩容,而在虚拟机容器上,容器网络yangtse使用了trunkport技术,结合eni的优势,在保障性能的前提下,单台服务器理论上可为千容器同时提供直通网络能力。

3、当应用业务流量增长触发扩容时,如果elb直接全量发放分摊的流量请求,海量请求会迅速压垮(overload)新扩的容器,造成扩容失败。 所以新扩容的后端实例需要“慢启动”的过程,但一个节点部署多个容器时,节点的二次分发让elb无法感知到最终的后端容器,进而无法做到容器级别的流控,也难以保证稳态后的负载均衡。容器网络yangtse实现了与华为云elb v3独享型负载均衡实例的直通。

具体技术详解,可以阅读华为云第二代裸金属容器技术系列:应对海量并发的网络黑科技

目前,yangtse已经为华为云cce/cci/ief等容器服务提供了统一的容器网络方案,覆盖虚机、裸金属、serverless和边缘节点等各种容器运行环境。

其中最值得注意的是cce,它是一种托管的kubernetes服务,可进一步简化基于容器的应用程序部署和管理,深度整合华为云的计算、存储、网络和安全等技术构建高可用kubernetes集群。

在cce中,用户可以直接使用华为云高性能的弹性云服务器、裸金属服务器、gpu加速云服务器等多种异构基础设施,也可以根据业务需要在云容器引擎中快速创建cce集群、鲲鹏集群、cce turbo集群,并通过云容器引擎对创建的集群进行统一管理。

以今年在hdc重磅发布的云容器集群cce turbo为例,它主要针对企业大规模业务生产中的高性能、低成本诉求,在计算、网络和调度上全方位加速, 新一代容器4008云顶国际网站的解决方案:云容器引擎cce turbo集群就总结了它在这三个方面的新突破。

在计算加速方面,业界独家实现容器100%卸载,服务器资源和性能双零损耗。

在网络加速方面,采用独创的容器直通网络,让两层网络变成一层,端到端连通时间缩短一半,有效支撑业务秒级扩容千容器。

在调度加速方面,通过感知ai、大数据、web业务的不同特征,以及应用模型、网络拓扑等,实现业务混合部署、智能调度,还自动优化任务调度策略,实现1万容器/秒的大规模并发调度能力。


再就是容器存储everest, 每个pod使用独立vf,读写时延降低50%;将posix组件卸载,单进程节省30m内存;nas卷直挂pod容器内,提高请求处理效率30%。

基础设施之外,华为云先后将vessel的核心组件volcano和kubeedge开源,并贡献给云原生计算基金会cncf,成为社区首个容器智能边缘项目和容器批量计算项目。

volcano——批量计算

当有更多的用户希望在kubernetes上运行大数据、 ai和hpc应用,而它默认调度器又无法满足包括公平调度、优先级、队列等高级调度功能时,就需要一些新的技术4008云顶国际网站的解决方案登场了。

考虑到ai、大数据等业务的需求,华为云在kubernetes调度上做了一个感知上层业务的调度——volavano,它是基于kubernetes构建的一个通用批量计算系统,volcano架构设计与原理解读就volcano产生的背景、架构设计与原理进行深度解读,用数据证明了volavano为分布式训练、大数据、hpc场景带来了效率的提高。

volcano火山:容器与批量计算的碰撞则从并行计算开始说起,详细解释了volcano的调度框架、调度实现原理。作为调度系统,volcano通过作业级的调度多种插件机制来支持多种作业,其中作业级的调度支持以多种类型的作业为目标进行设计,比如基于时间的、跨队列的等等。volcano的插件机制有效的支撑了针对不同场景算法的落地,从早期的gang-scheduling/co-scheduling,到后来各个级别的公平调度。

图:总体架构

在华为云今年刚推出的cce turbo容器集群中,就采取了多项volcano关键调度技术,如基于共享资源视图的多调度器、决策复用、应用模型感知、数据位置亲和调度、网络拓扑调度等,从而实现1万容器/秒的大规模并发调度能力。

kubeedge——边缘计算

容器天然的轻量化和可移植性,非常适合边缘计算的场景。理想情况下,在边缘部署复杂的应用,kubernetes 是个很好的选择,现实真相是要想在边缘部署 kubernetes集群,各种问题层出。

比如很多设备边缘的资源规格有限,特别是 cpu 处理能力较弱,因此无法部署完整的 kubernetes;kubernetes 依赖 list/watch 机制,不支持离线运行,而边缘节点的离线又是常态,例如:设备休眠重启;边缘业务通常在私有网络中,无公网ip,云边跨越公网导致延迟高。

为了解决这些问题,kubeedge应运而生。kubeedge即kube edge,顾名思义就是依托k8s的容器编排和调度能力,实现云边协同、计算下沉、海量设备的平滑接入。

其架构主要包含三部分,分别是云端、边缘侧和终端。云端负责应用和配置的下发,边缘侧则负责运行边缘应用和管理接入设备。 kubeedge架构解读:云原生的边缘计算平台从kubeedge架构设计理念、kubeedge代码目录概览、kubeedge集群部署三方面带大家认识kubeedge。

关于kubeedge和volcano的更多技术硬实力体现和落地案例,可以阅读专题【技术补给站】第5期:从架构和实践,剖析kubeedge volcano技术硬实力,在此不再赘述。

批量计算和边缘计算的问题解决后,伴随云原生技术和市场的不断成熟,很多企业都是多云或者混合云的部署,一方面可以避免被单供应商锁定降低风险,另一方面也可以是出于成本的考量。

但是多集群同时也带来了巨大的复杂性,包括如何让应用面向多集群部署分发,并做到多集群之间灵活切换。在今年的hdc上,华为云宣布了多云容器编排项目karmada正式开源,karmada项目由华为、工商银行、小红书、中国一汽等8家企业联合发起,它可以构建无极可扩展的容器资源池,让开发者像使用单个k8s集群一样使用多云集群。

karmada是一个 kubernetes 管理系统,基于 kubernetes  和  开发,它可以跨多个 kubernetes 集群和云运行云原生应用程序,直接使用 kubernetes 原生 api 并提供高级调度功能,实现真正的开放式多云 kubernetes。

华为云mcp多云跨云的容器治理与实践为我们梳理了karmada项目诞生的前因后果,以及整个项目的核心价值,比如对k8s原生api兼容 、丰富的多集群调度支持、开箱即用等等。

karmada的架构设计图

从架构图可以看到,整个控制面板可以分为四大块:提供原生api入口,存放用户yaml和karmada资源对象的karmda api server,和配套存储etcd;以及资源控制器karmda controller manager、多集群调度器 karmda sheduler。其中,最关键的就是api server,让用户既有的资源配置(yaml)可以借助k8s原生api进行部署。

综上,karmada 旨在为多云和混合云场景下的多集群应用程序管理提供 turnkey 自动化,其关键功能包括集中式多云管理、高可用性、故障恢复和流量调度。

今年的hdc期间,在线教育平台vipkid的后端研发高级专家分享了使用 karmada实现从天到秒的跨云迁移实践。在剖析vipkid的多场景云原生落地实践后,他对多集群管理提出了一些思考,如下图所示,理想的多集群管理方式是:

  • 集中管理,但要原生;
  • 应用在不同集群的差异化管理;
  • 集群故障自动转移。


对比了多家方案后,vipkid选择了开源的方案 karmada。作者表示karmada的整个设计结构就是按原生k8s开发标准开发的,唯一差别之处是需要管理多个集群不同的 workload信息,所以改写了调度器和控制器,在它们下面对接了多个集群管理起来。这样最大的好处是看起来在控制一个集群,但最终的效果是在控制多个集群。

具体案例情况参见karmada | vipkid在线教育平台从天到秒的跨云迁移实践,文章内有现场demo演示用karmada实现多集群管理。

另一个经典案例是工商银行多k8s集群管理及容灾实践。工商银行的应用平台云容器规模超20万,业务容器占到55,000个左右,整体的一些核心业务都已入容器云内部,包括个人金融体系的账户,快捷支付、线上渠道等。当越来越多的核心业务应用入云之后,最大的挑战是容灾以及高可用。

但既有的运管平台并不能解决这些问题,比如没有整体的跨集群自动伸缩能力、集群对上层用户不透明、没有跨集群的自动调度和迁移等等。对此,他们根据业务场景调研了一些多集群管理平台,最终也选择了社区支持的开源项目karmada。

karmada以类k8s的形式部署,对他们来说,改造成本是比较小的,只需在上面部署一个管理集群即可。而且karmada仅管理资源在集群间的调度,子集群内分配高度自治。在实践中,karmada的资源调度、容灾、集群管理和资源管理的优势突出。

截止到现在,工行在测试环境中已经用karmada对存量集群进行一些纳管,未来规划的关键的点是如何和整体云平台进行集成。

项目地址

围绕docker和kubernetes,华为云在技术层面做了诸多的优化和新的探索尝试,除此之外,华为云还有端到端的容器运维管理体系,涵盖资源编排、容器应用持续交付、应用生命周期管理、镜像安全扫描以及日常运维监控等。

云原生浪潮下,容器技术是串联起整个云原生世界的关键一环,它的市场之争,正是山雨欲来风满楼,想要占得高地,技术实力、开源生态、4008云顶国际网站的合作伙伴,缺一不可。

聚焦热门的细分技术领域,带来系统且专业的干货解读,从而为开发者提供新技术知识的补给,助力技术能力更上一层楼。

往期回顾

【第1期】 中台规划:重磅发布!《it 2.0时代,华为全场景驱动下中台规划实战全集》


【第2期】数仓调优:数仓性能调优必读:从系统级到sql级,带你进阶为性能调优高手


【第3期】依赖图绘制:学习大数据治理,手把手教你从零开始画dag作业依赖图


【第4期】音视频:音视频爆火的背后,藏着哪些技术奥秘?华为云视频云专家为你深度解读


【第5期】云原生:从架构和实践,剖析kubeedge volcano技术硬实力


【第6期】liteos实操:带你步步深入liteos,掌握物联网开发秘笈


【第7期】 api应用:20个超实用api应用案例,开启api进阶之路(内附资料下载)


【第8期】 hilens开发:用好modelarts hilens,轻松上手端云协同ai开发


【第9期】 从angular、react到vue,探秘三大主流前端框架


【第10期】分析内部运行机制,教你解决redis性能问题

【4008云顶国际集团的版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。