一次 Rancher 和 openEuler 的上云之旅

作者简介
张智博,SUSE Rancher 大中华区研发总监,一直活跃在研发一线,经历了 OpenStack 到 Kubernetes 的技术变革,在底层操作系统 Linux、虚拟化 KVM 和 Docker 容器技术领域都有丰富的研发和实践经验。

Rancher 是一套开源的企业级容器管理平台,支持大量的 Kubernetes 发行版以及 Linux 操作系统,将 openEuler Linux 纳入支持体系是我们近期开展的一项工作。

这是一次 Rancher 和 openEuler 的上云之旅,同时也是我们内部工程体系的一部分,一旦纳入一种新的 OS,就需要让它能在云端启用,这是云原生时代的大势所趋。本文展示了使用 AWS 平台这一上云过程,并搭建了一套 Rancher+openEuler 的环境用于展现这种能力。

文中提到的相关产品版本信息如下:

一次 Rancher 和 openEuler 的上云之旅_第1张图片

构建 openEuler AMI

openEuler 在 Cloud Image 这方面还不够完善,目前主要提供 ISO 镜像,在 Cloud Image 层面还只有一个简单的 QCOW2 Image。我们首先实现了一套工程化方法,将 openEuler QCOW2 Image 转换为 AWS AMI,这样我们可以在云端灵活部署启用。

这个过程需要做一些额外工作,我们重新调整了社区 QCOW2 Image 的 rootdisk 分区,引入了可以适配云环境的相关软件包,并通过 scripts+packer 工具实现了整体构建。构建 AMI 的同时,也顺带解决了以下问题:

  • 无法动态注入 ssh key;
  • 无法自动扩容根磁盘;
  • 禁用 Apparmor,确保容器正常启动(实际不应该直接禁用,后续会寻找更加合理的解决办法);
  • 默认内置云原生场景必要的基础软件包(避免测试部署时手动安装);
  • openEuler ARM64 系统缺少 ENA 驱动,导致 EC2 ARM 实例网络无法激活。

后续,我们会推动在 openEuler 社区建设 Cloud Image。对于云原生场景,很显然这是一项非常重要的基础工作。

部署 Rancher 以及下游集群

openEuler 虽然内置了 Docker 引擎,但最终我们仍然决定不使用 Docker。从Kubernetes 生态角度来看,Docker 已不再是必需品。Rancher 无论是管理平面还是下游集群,也不会强烈依赖 Docker;而且 Containerd 已经内置到 K3s 和 RKE2 中,也不需要 openEuler 的 Containerd 软件包。

在这个层面解耦是非常重要的,因为操作系统的软件包存在很强的依赖关系,减少这种和 OS 软件包的冲突,更有利于运维管理。未来,也会考虑将欧拉开源社区中的轻量化容器引擎 iSulad 等引入到我们的方案中,为客户提供更为灵活多样的选择。

我们设计了一个部署架构,它可以快速展示 Rancher+openEuler 的能力:

  • 使用 AMD64 AMI,启动一台 EC2 实例,部署 K3s;
  • 在此 K3s上,部署 Rancher Server;
  • 使用 ARM64 AMI,启动一台 EC2 实例,部署 K3s ARM64 版本,将其以导入方式纳管到 Rancher;
  • 使用 Rancher 中的 EC2 Node Driver,弹性创建 RKE2 集群,AMI 使用 AMD64 镜像。

Local K3s 和 Rancher Server 的安装较为简单,这里我们可以直接简化为两行脚本:

curl -sfL https://get.k3s.io | K3S_TOKEN=SUSERancherGC sh -s - server --cluster-init
curl https://raw.githubusercontent.com/cnrancher/autok3s/master/assets/rancher-setup/rancher-l7.sh | sh -

另一个 K3s ARM64 集群的创建和导入也十分简单,无需特别的参数处理。一旦 K3s ARM64 和 Rancher Server 都准备妥当之后,使用 Generic Import 导入即可。实际,我们可以看到这样的效果:

一次 Rancher 和 openEuler 的上云之旅_第2张图片

基于 EC2 Node Driver 配置弹性 RKE2 集群相对复杂一些。首先需要配置好 AWS 的访问密钥,Rancher 支持大量的公有云生态,在 AWS 上使用过程和其他云基本一致。

一次 Rancher 和 openEuler 的上云之旅_第3张图片

创建 RKE2 集群时,选择 EC2 Node Driver,配置 RKE2 节点模板,以及集群的基础参数配置。在 AWS 上,选择先前构建的 AMI,并使用 openEuler 作为 SSH User,同时选择 Spot 竞价实例,对于普通的测试环境可以极大程度减少费用。

一次 Rancher 和 openEuler 的上云之旅_第4张图片

通过 UI 以 SSH 灵活访问 RKE2 节点,这些节点使用 openEuler Linux。这取决于我们先前配置 openEuler AMI 以及其 SSH User。

一次 Rancher 和 openEuler 的上云之旅_第5张图片

使用 Node Drvier 方式最具特色的能力,就是可以快速进行集群扩容。因为 Rancher 连接了 EC2 API,并且会根据集群配置状态自动将部署任务下发给新的 openEuler 节点。

一次 Rancher 和 openEuler 的上云之旅_第6张图片

对于集群内的资源管理,可以切换到集群浏览视图,对每个 workload 资源精细化管理。

一次 Rancher 和 openEuler 的上云之旅_第7张图片

这样,我们就完成了 Rancher 和 openEuler 的初步上云之旅。一个单节点的管理平面,两个下游集群,分别是 K3s 集群和 RKE2 集群,并且 K3s 使用了 ARM64 系统。同时,一定程度展示了 Rancher 的多云多集群的管理能力。

一次 Rancher 和 openEuler 的上云之旅_第8张图片

未来商业化思考

通过 Rancher 对公有云的整合能力以及 Kubernetes 发行版的管理能力,可以很顺畅地将 openEuler 带入公有云环境。不但扩充了 Rancher 的兼容矩阵,也连接了 openEuler 生态。

SUSE 作为传统 Linux 厂商,也基于 openEuler 构建了自己的商业发行版 SUSE Euler。同时,Rancher 在商业化层面也有 Rancher 企业版,通过 Rancher 企业版和SUSE Euler 的组合,可以为客户带来更稳定的商业技术支持。

你可能感兴趣的