kubernetes on arm发展现状

原创
2020/05/06 09:43
阅读数 5.1K

kubernetes on arm已取得极大的发展,构建全arm解决方案已成为可能。arm是各种手机类移动设备的主要CPU架构,各种IoT设备、智能设备、移动设备也主要采用arm架构的CPU。因为其体积小、功耗低的特点,服务器、边缘数据中心甚至于企业级数据中心也开始逐步使用arm架构的CPU(Amazon已提供arm服务器实例,中国的飞腾CPU、华为鲲鹏服务器采用arm架构),让arm运行Kubernetes也是必然的趋势(主要支持arm64架构的CPU)。但是由于GPU等支持较弱,要想arm全面代替x86还有很长的路要走。

要全面实现kubernetes on arm,需要完成:

  1. 容器引擎,arm上的docker/containerd支持。
  2. 集群管理,kubernetes系统支持arm运行。
  3. 代码管理,提供代码与版本管理,如Git/GitLab。
  4. 持续集成,提供Build与自动化测试,如Jenkins/Jenkins X等。
  5. 镜像服务,提供Harbor等本地容器镜像存储/分发服务。
  6. 文件系统,支持容器文件系统/大容量文件存储等。
  7. 数据存储,提供关系型/文档型数据服务,如MySQL/Redis/MongoDB等。
  8. 集群存储,提供网络存储/分布式存储服务,如NFS/GlusterFS/Ceph等。
  9. 应用移植,应用软件源代码能够编译到arm架构。
  10. 镜像重构,重新构建支持arm的容器镜像。

以下总结一下目前各部分发展的阶段和可用性。

1、容器引擎

目前arm已经官方支持docker,尤其是对arm64的支持,已进入开发主线。

需要docker on arm首先需要操作系统的支持,目前对arm支持较好的主要是deb体系(包括Ubunutu/Raspbian/Pirate等),CentOS也在开发相应的arm版本,但是应用相对较少。此外,Alpine和ArchLinux也提供了arm支持,而且系统尺寸较小,是构建应用容器的好选择(只是系统软件库和应用软件相对少一些),FreeBSD也支持arm(参见 https://www.freebsd.org/platforms/arm.html)。

2、集群管理

Kubernetes已经对arm架构提供了官方的安装支持。

kubernetes包含kubeadm/kubectl/kubelet三个系统软件和7个系统容器(标准版,部分分发版将其实现为单个或多个系统服务),都需要能够支持arm架构和其操作系统。此外,监控软件如Promethes和Grafana、管理面板Dashboard等亦须提供arm版支持。

Ubuntu的MicroK8s和RancherLib的K3s也提供了针对低功耗设备的Kubernetes分发版,可以支持arm架构CPU的设备。

3、代码管理

目前常用的代码版本管理使用Git,已经提供arm原生支持。

如果构建自己的代码仓库,可以使用GitLab,目前的 arm 支持还在开发中,参见:

4、持续集成

目前GitHub、GitLab、Jenkins等都提供了持续集成的支持,而且可以进行多CPU架构的编译。

参见:

5、镜像服务

Docker的registry是可以运行在arm架构上的,但是Harbor(也是基于registry的)目前还没有正式的arm发布版,需要自行编译、修改bug和手动部署。

参见:

6、文件系统

ZFS/btrFS是处理大数据的较好文件系统,是构建NAS供集群访问的基础文件系统。

目前ZFS通过BSD可以提供支持,其它操作系统需要编译源码。

btrFS还处于Beta阶段,会有文件/磁盘丢失的风险,不建议使用。感兴趣的可以编译源码。

7、数据存储

很多关系数据库系统(如MySQL/SQLite等)和NewSQL(如Redis/MongoDB等)都能支持arm架构,但传统的Oracle/SQLServer之类的企业级数据库目前尚不支持,而且无法完全移植到arm(如存储过程、触发器、函数、部分数据类型等服务器方功能),在开发运行于arm的应用时需要注意。

8、集群存储

Local path/NFS已经提供成熟的arm支持,分布式存储GlusterFS/Ceph等也在进行arm支持的开发。这里包括客户端和服务器两个部分,客户端基本在arm可用,而服务器目前的应用测试相对少一些,性能和稳定性还有待检验。总体来说,arm的磁盘数据IO性能不佳(未针对大数据特点优化),但是其低功耗特性在网络存储服务方面具有较大的优势。

9、应用移植

目前大部分基础软件库都已经提供了arm支持,专业应用的移植还需要做的事情包括:应用重新build、性能优化、稳定性测试。客户端软件和软件开发工具的arm支持已经不是问题,但考虑到存储系统、数据库系统、服务器系统、中间件系统、测试框架与自动化系统等都需要移植,要把X86体系的应用移植到arm体系,需要做的工作是非常多的,而且需要一定的时间、经过充分的测试才能进入和完成生产级部署。

在应用移植的过程中,需要多种架构的应用混合运行、逐步切换,对运维的压力是比较大的、要求是比较高的、工作量也是比较大的。

10、镜像重构

要将x86应用迁移到arm集群,首先需要进行应用移植,然后将其封装为容器,再部署到Kubernetes on arm集群上运行。

如果应用已经支持arm,而且已经支持k8s,在arm上进行镜像重构和部署已经有现成的工具链支持。只是,因为运行的环境和资源条件不同,部署到arm上后还需要重新跑覆盖测试、压力测试、稳定性测试、性能测试,才能用于生产级系统,这一过程的时间和工作量消耗不容低估。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部