APP下载

基于海思3559A平台的容器集群管理技术研究

2022-07-21吴晗胡宁蒲骏玮

电子制作 2022年12期
关键词:海思镜像嵌入式

吴晗,胡宁,蒲骏玮

(航空工业西安航空计算技术研究所, 陕西西安,710065)

0 引言

海思3559A芯片是华为海思技术有限公司推出的一款ARM架构的智能芯片,它提供了8K30/4K120广播级图像质量的数字视频录制,支持H.265编码输出或影视级的RAW数据输出,并集成高性能ISP处理。在支持8K30/4K120视频录制下,Hi3559A提供硬化的6-Dof 数字防抖,减少了对机械云台的依赖。Hi3559A集成了双核A73和双核A53,独创性的大小核架构和双操作系统,使得功耗和启动时间达到均衡。集成了海思特有的SVP(Smart Vision Platform)平台,提供了高效且多样化的计算资源,支持用户开发各种人工智能应用。还同时集成双核DSP和双核NNIE神经网络计算引擎,算力高达4T,高算力可以更好地支持人工智能在嵌入式领域的应用,在边缘计算、自动驾驶等领域有着极大的应用前景。

传统上使用虚拟机程序或容器,必须基于目标平台构建应用程序,使其能够在对应体系结构上高效运行。虽然存在着模拟硬件平台来运行为其它体系结构编译的软件的虚拟机解决方案,但是此类解决方案对性能的影响很大,不适用于嵌入式系统。而容器及容器集群管理技术的引入提供了管理软件开发、测试、构建和部署的简单方法。它们减少了在新嵌入式开发板上重新部署嵌入式软件的痛苦,是将服务和应用程序重新部署到多个Linux发行版的理想选择。使用容器集群管理系统来编排调度整个集群中运行的容器,可以为整个系统提供任务的动态迁移、弹性伸缩、负载均衡等诸多新特性。

1 容器集群管理技术介绍

■1.1 容器集群管理技术发展现状

容器集群管理技术相较于容器技术更为上层,目的是实现在容器集群上进行简单的容器编排调度和部署。

目前国外容器集群管理工具主要有Kubernetes、Docker Swarm、Mesos等。Docker Swarm是Docker公司推出的原生容器集群管理系统,它主要通过Docker的Restful API并配合Docker公司的另一个工具Docker Compose,实现在容器集群上进行简单的容器编排和部署。但是Docker Swarm的功能较简单,只适合较小集群的管理,没有集群的统一监控系统等组件。Mesosphere公司在Apache Mesos的基础之上也开发了一个容器集群管理系统,称之为 Marathon。Apache Mesos是同 Apache Yarn一样是一个资源管理调度器,并非为容器的管理调度专门开发的工具。Kubernetes,简称K8S,是谷歌公司基于Borg在2014年6月开源的大规模容器集群管理系统,它是谷歌公司十几年以来大规模应用容器技术的经验累积和升华的一个重要结果。它可以为容器化的应用提供运行,服务发现,资源调度等一套功能。

K3S是轻量级Kubernetes发行版,易于安装,内存减半,所有二进制文件不到40mb,k3s是完全兼容的Kubernetes发行版,有以下更改:移除过时的功能、Alpha功能、非默认功能,这些功能在大多数Kubernetes集群中已不可用。删除内置插件,如云供应商插件和存储插件,可用外部插件程序替换。添加SQLite3作为默认的数据存储。etcd3仍然可用,但并非默认项。包含在一个简单的启动程序当中,可以处理复杂的TLS和其他选项。几乎没有操作系统依赖性,仅需要健全的内核和cgroup挂载。k3s软件包所需的依赖:containerd、Flannel、CoreDNS、CNI及主机系统服务 (iptables, socat, etc)。

■1.2 典型容器集群管理技术介绍

kubenetes,也即K8S集群,以Pod为最基本的操作单元,它包含一个或者多个相关的容器,将多个容器都“封装”到一个虚拟的主机里,这样容器之间就可以通过localhost进行通信。K8S集群主要由两个节点组成,它们分别是:Master和Node。其总体架构如图1所示。

图1 K8S总体架构

Master节点运行着四个组件:etcd、API Server、Controller Manager、Scheduler,除了etcd,后面三个组件主要负责对集群中的资源进行管理和调度,它们构成了K8S的总控中心。API Server是资源对象的操作入口,而且就跟main()函数是程序唯一执行入口一样,API Server也是唯一的。Controller Manager是集群内部的控制管理中心,主要用于K8S的故障排查和修复。Scheduler是K8S集群中的调度器,负责Pod在集群节点中的调度分配。

Node节点是相对于Master来说的工作主机,它既可以是物理的,也可以是虚拟的,每个Node上管理着Pod生命周期的kubelet同时也被Master管理,Node的主要信息有:地址、运行状态、条件、系统容量等,在Node节点上运行的服务进程主要有kubelet、kube-proxy和容器运行时。Node节点往往不止一个,它们负责对管理本节点的Pod的生命周期和服务代理。kubelet负责当前Node节点的Pod的创建、监控、修改和删除等。Proxy负责Service代理,同时也是软件模式的负载均衡器。etcd是用来存储所有 Kubernetes 的集群状态的,它除了具备状态存储的功能,还有事件监听和订阅、Leader选举的功能,所谓事件监听和订阅,各个其他组件通信,都并不是互相调用 API 来完成的,而是把状态写入 etcd(相当于写入一个消息),其他组件通过监听 etcd的状态的的变化(相当于订阅消息),然后做后续的处理,然后再一次把更新的数据写入 etcd。所谓 Leader 选举,其它一些组件比如 Scheduler,为了做实现高可用,通过 etcd从多个(通常是3个)实例里面选举出来一个做Master,其他都是Standby。

API Server作为集群的核心,负责集群各功能模块之间的通信。集群内的功能模块通过Api Server将信息存入到etcd,其他模块通过Api Server读取这些信息,从而实现模块之间的信息交互。Node节点上的Kubelet每隔一个时间周期,通过Api Server报告自身状态,Api Server接收到这些信息后,将节点信息保存到etcd中。Controller Manager中 的node controller通过Api server定期读取这些节点状态信息,并做响应处理。Scheduler监听到某个Pod创建的信息后,检索所有符合该pod要求的节点列表,并将pod绑定到节点列表中最符合要求的节点上。如果scheduler监听到某个Pod被删除,则调用api server删除该Pod资源对象。kubelet监听pod信息,如果监听到pod对象被删除,则删除本节点上的相应的pod实例,如果监听到修改Pod信息,则会相应地修改本节点的Pod实例。

2 基于海思3559的容器集群管理框架

基于海思3559A的容器集群管理框架如图2所示,框架为:海思3559A+嵌入式Linux+Docker+Harbor+K3S。

图2 基于海思3559A的容器集群管理框架

海思3559A芯片作为嵌入式ARM开发板,具有高算力、低功耗等特性,为嵌入式领域人脸识别,语音识别,智能算法等人工智能应用提供了硬件支撑。容器技术提供了管理软件开发、测试、构建和部署的简单方法。

同时使用Harbor作为容器镜像仓库吗,Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry是必要的。Harbor是一个由VMware公司开源的企业级的Docker Registry管理项目,用于存储和分发Docker镜像的开源镜像仓库,用于容器镜像管理,主要提供权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、基于角色的镜像访问控制、镜像复制、镜像漏洞分析、镜像验真和操作审计、中文支持等功能。

运行在整个集群中的容器需要容器集群管理系统对其进行编排调度,占据统治地位的Kubernetes集成了许多组件,源码规模庞大,超百万行,在嵌入式领域资源受限的情况下难以直接应用。因此,选用轻量级Kubernetes发行版K3S,更适合在ARM架构、嵌入式领域、以及边缘环境下运行使用,海思3559A芯片配合轻量化容器集群管理系统K3S可以满足边缘计算、物联网、ARM架构平台下对容器集群管理的需求。

3 测试与验证

■3.1 测试环境

实验硬件环境由五块海思3559A开发板组成,开发板之间经由网线通过交换机联通,构成五个节点的容器集群,控制节点1、控制节点2、控制节点3作为主节点,运行K3S Master进程,工作节点1、工作节点2作为工作节点,运行K3S节点代理进程,五个节点上都部署了嵌入式Linux操作系统,每个节点都安装了Docker容器引擎,另外控制节点1布置Harbor镜像仓库,用于整个集群镜像的存储拉取和推送,测试硬件环境如图3所示。

图3 测试硬件环境

■3.2 测试结果及分析

编写任务A与负载B两类容器化应用程序。任务A:http服务器应用,其作用是返回当前任务运行的宿主机名称。负载B:脚本访问程序,其工作内容是使用脚本不间断访问任务A所设立的服务器应用,访问强度可以自定义。

3.2.1 动态迁移

当集群处于初始状态时,工作节点1上容器内运行任务A:http服务器应用,使用负载B,不间断访问此服务。此时采用断电/断开网络连接等方式使得工作节点1失效,k3s容器集群管理系统可以不经人为干预自动地将工作节点1上运行的任务A迁移至工作节点2上运行,具体流程如下:当K3S控制节点发现工作节点1失联,任务A无法正常运行时,经过确认以及重试无法重新连接时,向工作节点2发送启动任务A命令,工作节点2上的节点代理kubelet收到消息后,调用Docker容器引擎从控制节点1上部署的Harbor中拉取镜像,然后创建容器任务A,实现任务的动态迁移。

3.2.2 弹性伸缩

当集群处于初始状态时,工作节点1上容器内运行任务A:http服务器应用,使用负载B,不间断访问此服务。增大负载B的访问强度,当超出工作节点1上任务A的设计承受范围时,系统根据设置自动扩容,在工作节点2上启动新的容器,容器中部署任务A。工作节点1与工作节点2上同时运行任务A,共同承担访问流量压力,且都在设计承受范围内,系统不再扩容。减小负载B的访问强度,回归初始状态值,工作节点4和工作节点2负载降低,低于预定下限值后,K3S容器管理系统执行缩容操作,随机保留一个工作节点之上的任务A,即满足负载B的访问需求。实现了系统的弹性伸缩。

3.2.3 负载均衡

当集群处于初始状态时,工作节点1、工作节点2上都运行着任务A,此时运行负载B,访问流量会根据预先设定的策略(此处为均分策略),将访问流量平均发送到工作节点1和工作节点2之上,实现了负载均衡。

3.2.4 测试结果分析

在ARM架构的海思3559A平台上使用K3S对容器集群进行管理时:系统可以将一个节点之上的任务迁移至另一个节点,实现了动态迁移;同时,系统能够随请求的增减,实现系统扩容,在业务下降的时候,能实现系统缩容,实现了动态伸缩;此外,系统将网络请求进行平衡,分摊到多个嵌入式开发板上进行运行,将网络流量平均发送到多个工作节点上,保证了整个业务系统的高可用,实现了负载均衡。

总结下来,在5片海思3559A嵌入式开发板所构成的集群上,通过引入容器和轻量化容器集群管理技术,实现了容器化工作任务的动态迁移、弹性伸缩、负载均衡。

4 总结

本文使用5块部署了嵌入式Linux的海思3559A芯片开发板,在其上运行了容器集群,并使用轻量级容器集群管理系统K3S对整个集群的容器化应用进行管理,编写程序对动态迁移、弹性伸缩、负载均衡等功能特性进行了测试验证。未来随着云原生、边缘计算等向嵌入式领域扩展,更多高算力、低功耗的嵌入式开发板的出现,容器及容器集群管理系统在嵌入式领域将迎来更加广阔的应用前景。

猜你喜欢

海思镜像嵌入式
镜像
华为海思宣布推出首款华为海思LTE Cat4平台Balong 711
解密华为芯片技术实力
何庭波:逼出来的华为“芯片女皇”
镜像
华为不可期,海思有可能
镜像
嵌入式LINUX操作系统的研究
嵌入式组件技术的研究及应用
“嵌入式系统概论”课程设计