背景

随着我国对信息安全的愈发重视,国产化的趋势也越来越浓,包括国产操作系统、国产CPU等。由于ARM架构国产CPU在维持创新可信和先进性方面的潜在优势,其应用也将会越来越广泛。

KubeSphere 作为一款深受国内外开发者所喜爱的开源容器平台,也将积极参与并探索在ARM架构下的应用与创新。本文将主要介绍如何在ARM64环境下部署 Kubernetes 和 KubeSphere。

环境准备

节点

以一台 openEuler 20.09 64bit 为例:

nameiprole
node1172.169.102.249etcd, master, worker

确保机器已经安装所需依赖软件(sudo curl openssl ebtables socat ipset conntrack docker)

具体环境要求参见:https://github.com/kubesphere/kubekey/tree/release-1.0#requirements-and-recommendations

建议:可将安装了所有依赖软件的操作系统制作成系统镜像使用,避免每台机器都安装依赖软件,即可提升交付部署效率,又可避免依赖问题的发生。

提示:如使用 centos7.x、ubuntu18.04,则可以选择使用 kk 命令对机器进行初始化。
解压安装包,并创建好配置文件之后(创建方法请看下文),可执行如下命令对节点进行初始化:
./kk init os -s ./dependencies -f config-example.yaml
如使用该命令遇到依赖问题,可自行安装相关依赖软件。

镜像仓库

可使用 harbor 或其他第三方镜像仓库。

提示:可使用 kk 命令自动创建测试用自签名镜像仓库。注意,请确保当前机器存在registry:2,如没有,可从解压包中kubesphere-images-v3.0.0/registry.tar 中导入,导入命令:docker load < registry.tar
创建测试用自签名镜像仓库:
./kk init os -f config-example.yaml --add-images-repo
注意:由 kk 启动的镜像仓库端口为443,请确保所有机器均可访问当前机器443端口。镜像数据存储到本地/mnt/registry (建议单独挂盘)。

安装包下载:

提示:该安装包仅包含 k8s + ks-core 镜像,如需更多组件 arm64 镜像,可自行编译构建。

# md5: 3ad57823faf2dfe945e2fe3dcfd4ace9
curl -Ok https://kubesphere-installer.pek3b.qingstor.com/offline/v3.0.0/kubesphere-core-v3.0.0-offline-linux-arm64.tar.gz

安装步骤:

1. 创建集群配置文件

安装包解压后进入kubesphere-core-v3.0.0-offline-linux-arm64

./kk create config

根据实际环境信息修改生成的配置文件config-sample.yaml,也可使用-f参数自定义配置文件路径。kk 详细用法可参考:https://github.com/kubesphere/kubekey

注意填写正确的私有仓库地址privateRegistry(如已准备好私有仓库可设置为已有仓库地址,若使用 kk 创建私有仓库,则该参数设置为:dockerhub.kubekey.local)

apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  # 注意指定节点 arch 为 arm64
  - {name: node1, address: 172.169.102.249, internalAddress: 172.169.102.249, password: Qcloud@123, arch: arm64}
  roleGroups:
    etcd:
    - node1
    master:
    - node1
    worker:
    - node1
  controlPlaneEndpoint:
    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.17.9
    imageRepo: kubesphere
    clusterName: cluster.local
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
  registry:
    registryMirrors: []
    insecureRegistries: []
    privateRegistry: dockerhub.kubekey.local
  addons: []

2. 导入镜像

进入kubesphere-all-v3.0.0-offline-linux-arm64/kubesphere-images-v3.0.0
使用 offline-installation-tool.sh 将镜像导入之前准备的仓库中:

# 脚本后镜像仓库地址请填写真实仓库地址
./offline-installation-tool.sh -l images-list-v3.0.0.txt -d kubesphere-images -r dockerhub.kubekey.local

3. 执行安装

# 以上准备工作完成且再次检查配置文件无误后,执行安装。
./kk create cluster -f config-sample.yaml --with-kubesphere

查看结果

Feynman 更改标题为「三步搞定 arm64 离线环境部署 K8s + KubeSphere
8 天 后

您好,我按照文中的方法在华为鲲鹏上成功部署了 KubeSphere 但还存在如下问题:
1、集群节点无法显示 服务器 cpu 内存 等信息。

2、Monitoring 组件有两个Pod 不正常。


3、calico-node 无法运行。

看提示信息有可能是ip不对,但这里的 192.168.0.97 192.168.0.38 需要到哪里设置。

    @Feynman 请问官方是否提供其它组件的 arm64 的image,谢谢啦!

    有人帮忙看看问题没,谢谢啦。

    好的。谢谢!我先试试,有什么情况再反馈。

    谢谢Cauchy 主要还是多网卡的原因,我把其它网卡禁用就安装成功了。

    另外就是其它的arm64 的image 有没有官方提供。或者有对应的dockerfile 。如果能提供一个kubesphere 可选组件所需的image 清单,也能提高部署速度。

    17 天 后

    Cauchy 大佬,有构建arm64镜像的教程么?求指点下,自己构建的arm64的在鲲鹏机器上跑还是提示standard_init_linux.go:219: exec user process caused: exec format error

      14 天 后

      我看了一下istio 官方就没有ARM 的镜像,需要自己打补丁,重新编译才行。

      @Cauchy ARM完整支持是不是商业支持的范围哟,还是可以到哪里下载到可选组件哟。

        3 个月 后

        tdcare 我也遇到你前2个问题,一模一样。有解决方案吗?

        1 个月 后

        我配置了两个节点,在安装的过程中报找不到etcd的配置

        这是我的config-sample.yaml配置

          lingyun

          上边报错是添加节点或者init集群时候报错的reset,要等执行完看最终的报错日志

            Cauchy 安装完成之后有三个错误
            1、kube-controller-manager启动失败

            2、kube-scheduler-ks-master启动失败

            3、node节点的caclio启动不起来

            我卸载了重新安装之后,无法安装成功,卸载使用的是ks-install中的delete脚本

            根据上面的提示,我删除了/etc/ssl下的etcd文件夹,导致了etcd无法启动了,不知道为啥,但是/etcd/ssl下已经生成了相关的etcd文件

            另外,每次重新安装的时候看输出日志都有Configuration file already exists,不清楚是不是哪边没有卸载干净导致的,而且不清楚这个配置在哪,第一次安装的时候输出的日志是Configuration file will be created