在2021年4月25的华为HDC cloud开发者大会上,华为云发布了升级版的云容器集群CCE Turbo。其相较于CCE集群,在计算、网络和调度方面全方位加速。本篇就结合一些找到的知识点,总结下CCE Turbo相较于CCE增加了哪些技术关键点。

一、CCE Turbo特性

华为官方网站的描述来看,CCE Turbo带来了如下特性。

cce-turbo

计算加速
基于擎天架构,卸载容器存储、容器网络、容器引擎,资源利用率提升20%-30%
百万级节点算力协同,随时、随地提供应用所需算力资源

网络加速
虚拟机trunkport,裸金属ENI流量直通容器,0损耗,性能提升40%
直通模式,单节点容器密度更高,最大256容器

调度加速
多类型业务智能混合调度,应用拓扑感知、分时复用等
缓存+多调度器共享视图,调度速度达到1万 Pod/s

全面安全
裸金属节点部署安全容器,提供虚拟机级别的资源和业务隔离
基于VPC安全组提供容器网络访问控制能力和Qos限速

二、CCE Turbo与CCE的对比

华为云的官方页面,对比两者之间的区别已做了说明,具体见下表:

cce-vs-cceturbo
cce-vs-cceturbo

针对主要四个方面的加速,其通过以下技术进行实现。

三、CCE Turbo集群计算加速

1. 安全容器轻量化

为使容器隔离性更好,CCE Turbo使用了isulad + kata container更换了docker container,使容器进程的内存资源使用率由300MB降低到了50MB左右,将启动pod的额外内存占用从130MB减少到了50MB以下。

cceturbo-kata-isulad
cceturbo-kata-isulad

第一步:容器引擎瘦身,剔除冗余部件,优化内部执行逻辑
第二步:使用 rust 语言重写核心模块,减少进程数量,提升执行效率
第三步:内核组件优化,减少内存消耗及并发运行时业务间的干扰
经过以上的优化,容器集群整体性能提升了 40%!

2. 优化启动速度

安全容器的启动速度主要耗时在以下几个步骤中:
1. 启动虚拟机和guest内核耗时
2. 网络初始化耗时
3. 镜像下载耗时

针对以上3点,华为云CCE turbo实施了一下优化措施:
1. 通过使用非解压内核、精简BIOS引导过程,直接从start_kernel开始启动内核、去除不必要的rom加载、通过模块化加载等技术,使虚拟机的整体启动时间降低到了400ms以下。

  1. 华为云的pod网络是直接和IaaS网络打通的,为了加速网络的初始化,CCE-turbo采用预热的方式在节点上预先初始化了网络端口,pod启动时可以快速加载IaaS网络端口。这也大大加速了并发加载的流程。
  2. 镜像懒加载等技术可以在镜像尚未完全拉取的前提下,直接启动容器,这也将大镜像容器的启动时间从分钟级降低到毫秒级。华为云采用containerd社区较为成熟的stargz-snapshotter方案,通过用户态文件系统,实现文件按需加载,无需拉取整个镜像,即可直接启动容器。

3. 硬件加速

华为云CCE-turbo采用自研的加速硬件,将网络和存储的转发能力都卸载到专用硬件卡上,既可以节省主机上计算资源,又通过专有硬件的加速能力,对网络、存储的转发进行加速,可大大降低网络和存储的时延。提高网络和存储转发效率。

cceturbo qingtian
cceturbo qingtian

网络: 独家采用vfio直通技术,将华为云自研网卡的SRIOV硬件虚拟卡直通到虚拟机,这和虚拟的TAP接口转发方案相比,网络包完全不需要经过Host,而是从虚拟机直接发送到卸载网卡上,极大缩减了网络转发路径,将虚拟化带来的发包率和时延损失降到最低。

存储: CCE-turbo的容器可以采用PVC的方式,无缝使用华为云的OBS、SFS、EVS等存储,并且存储的挂载都在pod内部完成,去除了主机上的挂载,更加安全的同时,也加速了存储的转发效率,降低了时延。通过华为云自研的硬件加速卡可以将时延可以进一步降低存储转发时延。

vfiopf-virtoscsi
vfiopf-virtoscsi

四、CCE Turbo集群网络加速

在网络加速方面,CCE Turbo集群采用的是华为云基于擎天软硬协同架构自研的新一代容器网络模型——云原生网络2.0,深度整合了华为云VPC的弹性网卡(Elastic Network Interface,简称ENI)和辅助弹性网卡(Sub Network Interface,简称Sub-ENI)的能力,直接从VPC网段内分配容器IP地址、支持ELB直通容器、支持容器直接绑定安全组、支持容器配置QoS、支持容器直接绑定弹性公网IP、支持安全容器VF直通等高阶能力,构建了业内领先的深度融合云上虚拟私有云VPC的新一代容器网络方案。

注意:仅CCE Turbo集群支持使用云原生网络2.0。

cloudnative-net2.0
cloudnative-net2.0

云原生网络2.0的创新方案:
– Trunkport方案:解决了虚拟机场景下高性能、高密度部署、安全隔离等问题;
– VF直通安全容器方案:解决了裸金属场景下高性能、高密度部署、安全隔离等问题;
– SecurityGroup安全隔离方案:针对容器访问控制场景,创新性地将VPC的安全组隔离能力透传到CCE Turbo集群中,用户可通过标签选择器(Label Seletor)便捷地规划各种复杂业务场景下的访问控制策略。

1. 虚拟机Trunkport方案

目前业界云上虚拟机新一代容器网络”In Cloud”技术发展方向下,可大规模落地的技术实现主要有两种:一是辅助IP方案(也是就弹性网卡多IP);另外一种是辅助弹性网卡方案(借助于Trunkport技术),详细对比如下表所示:

方案 说明 优点 厂商
辅助弹性网卡(Trunkport) 一张弹性网卡上承载多个辅助弹性网卡 支持绑定安全组、QoS、EIP,拥有独立的mac地址 华为、AWS
辅助网卡 一张弹性网卡上可以绑定多个内网IP 只支持绑定EIP,创建速度比辅助弹性网卡略快 阿里、腾讯、AWS

虚拟机Trunkport技术方案依赖虚拟机弹性网卡的Trunkport配置以及该弹性网卡所接入的网络必须是一个Trunk network(由虚拟私有云VPC提供和配置)。虚拟机弹性网卡的Trunkport配置是指在主机的一块弹性网卡上添加多个带有不同VLAN ID的子网卡。通过子网卡发送的数据,会自动打上相应的VLAN Tag后被发送出去。由于带了不同的VLAN Tag,子网卡可以认为连接在VLAN Tag标识的网络中。由于弹性网卡配置成了VLAN Trunkport。为了让带有VLAN标签的Ethernet Frame能够在网络上传输,虚拟私有云VPC需要对该弹性网卡所对应的Port配置成为Trunkport,并且配置识别该弹性网卡上所承载的所有辅助弹性网卡的VLAN。

这样,不用增减主机的网卡,就可以将主机添加到新的网络中。更主要的是,这种方式的网络添加是动态的。在云计算场景下,一个主机能添加的弹性网卡(ENI)是有限的(例如华为云普通虚机最多支持挂载12张弹性网卡),而且弹性网卡的绑定/解绑耗时比较长(目前华为云采用V1绑定网卡接口,端到端大概需要20秒)。而容器场景下,对密度以及极速扩缩容提出了更高的要求,而Trunkport技术正好完美解决了上述难题, 当前华为云支持辅助弹性网卡特性的虚拟机最多可支持挂载256张辅助弹性网卡,1s内即可完成单个辅助弹性网卡的挂载和数据面网络打通,3分钟可完成3000辅助弹性网卡的挂载和数据面网络打通。

云原生网络2.0设计了节点级别网卡预热池(warm pool),在辅助弹性网卡的批创性能的基础上,更进一步可帮助开发者快速实现1分钟极速扩容3000容器的业务能力,更好的应对流量浪涌,让应用交互更流畅。

注意:这部分感觉不是很好理解,不过因为华为和AWS都使用了ENI Trunkport技术,我在查阅了AWS的技术文档后,大致有一点了解,其就是在虚拟机ENI的基础上进行了中继,这样就可以快速创建和增高弹性网卡的数量。

ENI trunkport
ENI trunkport

2. 裸金属安全容器VF直通

裸金属安全容器VF直通方案,安全容器直接挂载具有VPC子网地址的弹性网卡,独占弹性网卡,具备完全VPC网络互通能力,以及VPC安全组、ELB、EIP、NAT网关等能力。裸金属的弹性网卡是通过SDI卡上的Hi1822智能网卡利用SR-IOV技术在物理网卡上虚拟而来。在裸金属安全容器场景下,再将此弹性网卡对应的VF设备直通安全容器,实现容器网络转发数据面下沉到硬件卸载卡,实现容器网络零损耗。

SR-IOV
SR-IOV

注意:由于网上我找到的华为云CCE Turbo VF直通相关的技术图都不清晰,所以未采用华为相关的图,这里使用的Intel网站的相关图,同时也是为了更好的理解SR-IOV,查询了相关信息,发现这个也是业界标准,华为的产品也是将业界技术进行整合利用。

安全容器网络数据面转发路径下沉至Hi1822智能网卡上,大幅提升转发效率,及降低时延,并支持高密度部署:

采用SR-IOV技术VF直通安全容器,实现零损耗的网络转发性能,安全容器的直通网卡基本与裸金属服务器主网卡性能持平。

支持网卡多队列,用户可直接通过Node资源对象直接配置裸金属节点的弹性网卡的队列数,以适应不同业务类型容器的网络规格要求。

继承裸金属服务器最多可挂载128张弹性网卡的能力,实现安全容器单节点高密度部署。

由于裸金属节点安全容器采用的是弹性网卡,单个弹性网卡挂载需要25s左右,完全不能适应容器生命周期的动态变化,通过维护节点级别网卡预热池(warm pool)有效弥补VPC网络资源分配性能不能匹配容器生命周期的现状。warm pool设计大幅提升了容器网络端到端打通时长,将单个容器网络打通时长从30秒提升到2s以内,在节点大批量容器创建场景下,容器网络打通速度提升尤为显著。现实了容器规模化部署、极致的启动速度。

3. SecurityGroup安全隔离

云原生网络2.0网络模式下,容器使用的是华为云VPC的弹性网卡/辅助弹性网卡,容器可直接独立绑定安全组,相比业界容器共享集群节点的安全组,不仅提升了容器的安全性,还提升了大业务流量下容器网络的转发效率,减少网络阻塞。

虽然可直接为弹性网卡绑定安全组,进而实现对容器的访问控制,由于容器的弹性扩缩容,IP地址是动态可变,按照这种在传统虚拟机场景下配置安全组的操作方式,维护代价巨大,对业务模型不感知,靠人工进行安全组的维护,不够可靠,会对客户的业务的安全性带来一定的风险。

为方便用户在CCE内直接为Pod关联安全组,CCE新增了一个名为SecurityGroup的自定义资源对象,SecurityGroup资源对象遵循Kubernetes的标签选择器的设计思想,借助标签选择器(Label Seletor)搭建了容器与VPC安全组间的桥梁,用户可直接操作SecurityGroup资源对象轻易实现各种复杂业务逻辑隔离述求的安全访问控制规划。

 1apiVersion: crd.yangtse.cni/v1
 2kind: SecurityGroup
 3metadata:
 4name: user-security-group
 5namespace: default
 6spec:
 7podSelector:
 8  matchLabels:
 9    app: db
10securityGroups:
11- id: 64566556-bd6f-48fb-b2c6-df8f44617953

例如,某客户想对所有的数据库容器配置更高安全隔离的安全组,客户可创建如下的SecurityGroup资源对象,给所有的app:db容器绑定上高安全隔离的安全组64566556-bd6f-48fb-b2c6-df8f44617953。这样所有拥有标签app: db的新建/存量的容器都会绑定上安全组64566556-bd6f-48fb-b2c6-df8f44617953 。

五、CCE Turbo集群调度加速

CCE集群调度加速主要也是应用三个方面的技术创新实现调度加速:

  • 大规模高效调整:基于共享资源视图的调度器
  • 智能调度:应用模型感知及在离线作业混部
  • 智能调度:网络拓扑调度

大规模高效调整:基于共享资源视图的调度器

业界主流调度框架有集中式monolithic、两级调度two level、共享视图shared state三种调度框架。Google的下一代调度框架Omega使用的是共享调度。其使用了MVCC乐观锁,这大大提升了并发性能。CCE Turbo使用volcano采用和这个类似的架构,其基于资源视图的多调度框架,可以使集群的整体吞吐可以达到1万pod/s。

智能调度:应用模型感知及在离线作业混部

k8s默认的调度是以pod为单位,不会对pod中的业务进行区分。Volcano基于应用模型感知智能调度算法,对不同的作业类型进行优化调度。

  1. 作业类型感知:能够识别在线作业和离线作业。
  2. Pod类型感知:能够识别作业中不同类型的Pod,例如Tensorflow作业中的PS和Worker,Spark作业中的Driver和Executor等

智能调度:网络拓扑调度

Task-topology算法是一种根据Job内task之间亲和性和反亲和性配置计算task优先级和Node优先级的算法。通过在Job内配置task之间的亲和性和反亲和性策略,并使用task-topology算法,可优先将具有亲和性配置的task调度到同一个节点上,将具有反亲和性配置的Pod调度到不同的节点上。

参考页面:

https://bbs.huaweicloud.com/forum/thread-143359-1-1.html
https://www.infoq.cn/article/f3mv6wp8vi2dyqvvwwa4
https://github.com/huaweicloudDocs/cce/blob/master/cn.zh-cn/%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97/CCE-Turbo%E9%9B%86%E7%BE%A4%E4%B8%8ECCE%E9%9B%86%E7%BE%A4%E7%9A%84%E5%8C%BA%E5%88%AB.md

https://volcano.sh/zh/docs/plugins/
https://bbs.huaweicloud.com/blogs/344094
https://bbs.huaweicloud.com/blogs/118181