写点什么

左手自研,右手开源,技术揭秘华为云如何领跑容器市场

  • 2021 年 12 月 25 日
  • 本文字数:7296 字

    阅读完需:约 24 分钟

摘要:云原生浪潮下,容器技术是串联起整个云原生世界的关键一环。

 

本文分享自华为云社区《左手自研,右手开源,技术揭秘华为云如何领跑容器市场》,作者:华为云社区精选。



​近日,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 - 使用Tensorflow训练神经网络 和云容器实例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 为例,它主要针对企业大规模业务生产中的高性能、低成本诉求,在计算、网络和调度上全方位加速, 新一代容器解决方案:云容器引擎CCE Turbo集群就总结了它在这三个方面的新突破。


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


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


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

再就是容器存储 Everest, 每个 POD 使用独立 VF,读写时延降低 50%;将 Posix 组件卸载,单进程节省 30M 内存;NAS 卷直挂 POD 容器内,提高请求处理效率 30%。

“查漏补缺”Kuberentes,开源技术解决特殊场景难题


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

Volcano——批量计算


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


考虑到 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技术硬实力,在此不再赘述。

解决多云容器集群管理,新秀 Karmada 崛起


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


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


Karmada 是一个 Kubernetes 管理系统,基于 Kubernetes Federation v1 和 v2 开发,它可以跨多个 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 对存量集群进行一些纳管,未来规划的关键的点是如何和整体云平台进行集成。


项目地址 :https://github.com/karmada-io/karmada

总结


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


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


点击关注,第一时间了解华为云新鲜技术~

发布于: 33 分钟前
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
左手自研,右手开源,技术揭秘华为云如何领跑容器市场