有些企业在信创改造时,为了兼顾现有 x86 应用、降低迁移成本,会选择采购搭载海光 CPU 的服务器。同时,也会为已经完成 ARM64 适配的业务采购鲲鹏服务器,于是同一环境中出现了两种架构并存的情况。

两类服务器上的应用各有运行要求,但部署、更新和日常运维又需要统一管理。如果这些服务器处于同一个网络和运维范围,就可以考虑搭建 Kubernetes 异构集群,让应用运行在对应架构的节点上,再通过 Rainbond 管理整套应用。

本文就以这一场景为出发点,介绍如何在离线环境中准备双架构环境、部署 Kubernetes 和 Rainbond,并验证应用的调度与通信。

一、环境准备

本文以三台服务器为例,一台搭载海光 CPU,另外两台搭载鲲鹏 CPU,操作系统均为 Anolis OS。

服务器CPU 架构操作系统IP
海光服务器x86_64Anolis OS172.17.6.202
鲲鹏服务器 1ARM64Anolis OS172.17.6.201
鲲鹏服务器 2ARM64Anolis OS172.17.6.200

在安装包和容器镜像中,x86_64 通常对应 amd64,ARM64 对应 arm64。后面下载离线包时,会同时用到这两种架构。

本次将海光服务器作为安装入口,也就是配置中的 bootstrap 节点,由它执行安装。三台服务器都承载业务负载,其中海光服务器和一台鲲鹏服务器同时作为源码构建节点,为两种架构的应用提供构建环境。

节点本次配置的角色
node1:海光服务器bootstrap、etcd、控制面、工作节点、网关、amd64 构建节点、NFS
node2:鲲鹏服务器 1etcd、控制面、工作节点、arm64 构建节点
node3:鲲鹏服务器 2etcd、工作节点

这套配置用于展示异构部署。网关和 NFS 均部署在单个节点上,不能仅凭三个 etcd 节点就将整套环境视为生产高可用方案。

安装前,需要确认三台服务器内网互通、主机名不同、时间同步,并按安装要求开放节点间通信端口。bootstrap 节点还需要能够通过 SSH 连接其他节点。

二、离线包准备

以下操作在有外网访问权限的环境中完成。

离线部署时,安装工具、系统组件镜像、Rainbond 镜像和源码构建环境都需要提前准备。混合架构还多了一项检查:是否同时覆盖 amd64 和 arm64。

1. 下载 ROI 安装工具

本例后续在海光服务器上执行安装,因此下载 amd64 版本的 ROI:

curl -fL -o roi https://get.rainbond.com/roi/roi-amd64
chmod +x roi

下载命令需要在能够运行该工具的环境中执行。安装工具自身的架构,与目标集群需要的离线包架构是两回事:这里使用 amd64 工具,准备的是两种架构的离线包。

2. 下载多架构离线安装包

./roi download --arch all

下载完成后,检查两种架构的程序包、运行时镜像和平台镜像是否齐全。本例的离线包目录如下,具体文件名以所用 ROI 版本的实际下载结果为准:

roi                                             # 安装工具
offline-packages/
├── install.sh                                  # RKE2 安装脚本
├── rke2.linux-amd64.tar.gz                       # amd64 RKE2 二进制包
├── rke2.linux-arm64.tar.gz                       # arm64 RKE2 二进制包
├── rke2-runtime-bootstrap-amd64.tar.zst          # amd64 RKE2 runtime 镜像包
├── rke2-runtime-bootstrap-arm64.tar.zst          # arm64 RKE2 runtime 镜像包
├── rke2-images-multiarch.tar.zst                 # 多架构 RKE2 镜像包
├── nfs-subdir-external-provisioner-4.0.18.tgz     # NFS Provisioner Chart
├── mysql-14.0.3.tgz                              # MySQL Chart
├── rainbond-images-multiarch.tar.zst             # 多架构 Rainbond 镜像包
├── rainbond.tgz                                 # Rainbond Chart
├── cnb-packages-amd64.tar.zst                    # amd64 源码构建包
├── cnb-packages-arm64.tar.zst                    # arm64 源码构建包
├── cnb-images-multiarch.tar.zst                  # 多架构源码构建镜像包
├── sha256sum-arm64.txt                          # arm64 校验清单
└── sha256sum-amd64.txt                          # amd64 校验清单

文件下载完成后,按照随包提供的校验清单核对完整性,传入离线环境后再次检查。

另外,本例使用 NFS,还需要提前准备操作系统对应架构的 NFS 主机侧依赖。不要只准备容器镜像,到了现场才发现系统缺少挂载所需的软件包。

3. 将离线包传入离线环境

将 roi 和完整的 offline-packages/ 目录复制到海光服务器 172.17.6.202,后续由这个 bootstrap 节点执行安装。

目录结构如下:

./
├── roi
└── offline-packages/

三、开始离线安装 K8s 和 Rainbond

1. 配置节点与角色

在 bootstrap 节点创建 cluster.yaml。配置主要分为两部分:

  • hosts:服务器名称、连接地址和 SSH 信息。
  • roleGroups:节点承担的集群与平台角色。

下面保留本例的完整角色配置。更多选项可参考 Rainbond 离线安装文档。

hosts:
  - name: node1
    address: 172.17.6.202
    internalAddress: 172.17.6.202
    user: root
    password: "${NODE1_SSH_PASSWORD}"
    port: 22
    bootstrap: true

  - name: node2
    address: 172.17.6.201
    internalAddress: 172.17.6.201
    user: root
    password: "${NODE2_SSH_PASSWORD}"
    port: 22

  - name: node3
    address: 172.17.6.200
    internalAddress: 172.17.6.200
    user: root
    password: "${NODE3_SSH_PASSWORD}"
    port: 22

roleGroups:
  # etcd 节点
  etcd:
    - node1
    - node2
    - node3

  # Kubernetes 控制面节点
  master:
    - node1
    - node2

  # 业务负载节点
  worker:
    - node1
    - node2
    - node3

  # Rainbond 网关节点
  rbd-gateway:
    - node1

  # 分别配置 amd64 和 arm64 源码构建节点
  rbd-chaos:
    - node1
    - node2

  # 集群内 NFS Server
  nfs-server:
    - node1

storage:
  nfs:
    enabled: true
    sharePath: /nfs-data/k8s
    storageClass:
      enabled: true

这里有两个配置值得注意。

bootstrap: true 只设置在执行安装的海光节点上,该节点同时属于控制面。

rbd-chaos 则选择了海光和鲲鹏各一个节点。如果后续需要同时构建 amd64 和 arm64 应用,就要为两种架构分别提供构建节点及对应的离线源码构建包。如只配置一种架构的构建节点,并不能满足另一种架构的源码构建需求。

2. 执行安装

确认 bootstrap 节点上的目录结构:

./
├── roi
├── cluster.yaml
└── offline-packages/

然后执行:

./roi up --mode offline --multiarch

安装过程中关注日志中的离线包检查、节点连接和组件部署结果。如果出现失败,先确认具体阶段,再检查对应架构的安装包或镜像,避免直接重复执行而忽略真正的错误原因。

四、访问 Rainbond 并检查集群

安装完成后,根据日志打印的地址访问控制台。本例的访问地址为:

http://172.17.6.202:7070

控制台能打开后,再检查节点和平台组件:

# 查看节点状态及所在架构
kubectl get nodes -o wide

# 查看 Kubernetes 系统组件
kubectl get pods -n kube-system

# 查看 Rainbond 组件与存储
kubectl get pods -n rbd-system

节点列表中应同时包含 amd64 和 arm64,并确认三台节点处于 Ready 状态。

五、离线环境下使用源码构建

如果还需要通过 Rainbond 源码构建应用,在 bootstrap 节点加载源码构建离线包:

./roi addon sourcebuild --multiarch

执行前,确认离线目录中包含本例所需的双架构构建包与镜像包:

offline-packages/
├── cnb-packages-amd64.tar.zst
├── cnb-packages-arm64.tar.zst
└── cnb-images-multiarch.tar.zst

如果缺少这些文件,需要返回联网环境补充下载。可以使用所选 ROI 版本支持的源码构建组件下载选项,并明确覆盖两种架构;下载后再将离线包传入 bootstrap 节点。

加载构建镜像,只是准备好了构建环境。 项目代码和 Maven、npm 等依赖也需要有内网可用的来源。如果项目仍指向公网 Git 仓库或依赖源,在完全离线的环境中,构建仍然可能失败。

六、验证应用部署

平台安装完成后,可以分别部署一个 amd64 和 arm64 应用,验证两种架构的节点是否能够正常运行组件。

在 Rainbond 中选择通过「容器镜像」创建组件,填写镜像地址,并在「CPU 架构」中选择对应类型:海光节点选择 amd64,鲲鹏节点选择 arm64,如下图所示。

需要注意,镜像本身必须支持所选架构。截图中的公网镜像地址仅用于展示配置方式,实际离线部署时,应使用内网可访问的镜像仓库,或上传提前准备好的镜像包。

完成创建后,查看组件的运行状态、实例所在节点和日志,并通过访问地址检查应用是否正常响应。分别完成两种架构的部署与访问验证,即可确认这套异构集群的基本应用运行能力。

最后

海光和鲲鹏采用不同的 CPU 架构,但在满足兼容性和网络条件的情况下,可以加入同一个 Kubernetes 集群,再通过 Rainbond 统一部署和管理应用。对于同时使用两类服务器的企业,这提供了一种组织现有资源的方式。

整个部署过程中,重点是提前准备齐两种架构的离线安装包,并为应用选择匹配的镜像和运行架构。后续接入实际业务时,也可以沿用这套流程,逐步验证应用依赖、存储和服务间通信,让不同架构的服务器共同承载业务。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐