本文由 KubeSphere 社区贡献者 天行1st 编写。本文为作者实践总结。本文记录了在信创环境中基于混合架构(x86 与 ARM64)部署 Kubernetes 和 KubeSphere 的实践过程,覆盖多种国产 CPU 和操作系统,具有一定的参考价值。
环境涉及软件版本信息
- 服务器芯片: 鲲鹏/飞腾2500(arm64)+海光/兆芯(x86)
- 操作系统:银河麒麟V10+openEuler+麒麟信安+龙蜥
- Containerd: 1.7.13
- Kubernetes:v1.32.5
- KubeSphere:v4.1.3
- KubeKey: v3.1.10(二开版)
服务器基本信息
| 主机名 | 架构 | OS | CPU | IP | 
|---|---|---|---|---|
| master1 | arm64 | 麒麟信安 3 | Kunpeng-920 | 192.168.0.219 | 
| master2 | x86_64 | 欧拉 20.03 | Hygon C86 3350 | 192.168.0.87 | 
| master3 | arm64 | 麒麟V10 sp1 | Phytium,FT-2500 | 192.168.0.120 | 
| node1 | x86_64 | 龙蜥 8.6 | KX-5000 | 192.168.0.158 | 
| node2 | arm64 | UOS | Kunpeng-920 | 192.168.0.89 | 
1.说明
作者使用K8s和KubeSphere过程中已适配芯片和操作系统如下:
- CPU芯片:
- 鲲鹏
- 飞腾
- 海光
- 兆芯
- 国际芯片:intel、ARM等
 
- 操作系统
- 银河麒麟V10
- 麒麟国防版
- 麒麟信安
- 中标麒麟V7
- 统信 UOS
- 华为欧拉 openEuler、移动大云
- 阿里龙蜥 Anolis OS
- 腾讯 TencentOS
- 国际操作系统:CentOS、Ubuntu、Debian等
 
关于 kt
kt是基于Kubekey二次开发的产物,具备Kubekey的所有功能,二开主要为适配信创国产化环境、简化ARM部署过程和国产化环境离线部署。支持ARM64和AMD64架构国产操作系统,已适配芯片+操作系统如上。
2.环境准备
将对应架构 kt_**.tar.gz 上传至每个节点
2.1 系统初始化
解压kt文件后执行./kt init-os 已适配操作系统和架构见1.说明
该命令kk会自动判断操作系统和架构以安装依赖项和进行必要的初始化配置。
3 创建 Kubernetes 集群
以下操作默认在master1执行
3.1 创建安装目录
home目录下创建ks目录,用于安装部署 K8s+ KubeSphere 。
此处之所以在/home目录下安装,是有些客户自带操作系统而且默认根目录下只有50G空间,而更大的空间在/home目录下。笔者所在公司可能需要到用户提供的服务器和操作系统安装集群,为避免空间占用不足,直接到/home下新建。
mkdir -p /home/ks
cd /home/ks
3.2 上传kt
将kt移动至/home/ks目录下
3.3 创建集群配置文件
主要修改相关节点和harbor信息
./kt create config --with-kubernetes v1.32.5
3.4 修改配置文件
根据实际服务器信息,配置到生成的config-sample.yaml中
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: master1, address: 192.168.0.219, internalAddress: 192.168.0.219, user: root, password: "123@213", arch: arm64}
  - {name: master2, address: 192.168.0.87, internalAddress: 192.168.0.87, user: root, password: "123@213"}
  - {name: master3, address: 192.168.0.120, internalAddress: 192.168.0.120, user: root, password: "123r@213", arch: arm64}
  - {name: node1, address: 192.168.0.158, internalAddress: 192.168.0.158, user: root, password: "123@213"}
  - {name: node2, address: 192.168.0.89, internalAddress: 192.168.0.89, user: root, password: "123@213", arch: "arm64"}
  roleGroups:
    etcd:
    - master1
    - master2
    - master3
    control-plane: 
    - master1
    - master2
    - master3
    worker:
    - node1
    - node2
  controlPlaneEndpoint:
    ## Internal loadbalancer for apiservers 
    internalLoadbalancer: haproxy
    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.32.5
    clusterName: cluster.local
    autoRenewCerts: true
    containerManager: containerd
  etcd:
    type: kubekey
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
    ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
    multusCNI:
      enabled: false
  registry:
    privateRegistry: ""
    namespaceOverride: ""
    registryMirrors: []
    insecureRegistries: []
  addons: []
说明: 具体参数含义可查看官方文档:在 Linux 上安装 Kubernetes 和 KubeSphere,这里写一下注意事项
config-sample.yaml 配置文件的 spec:hosts 参数
官方介绍
- address 服务器的 SSH 登录 IP 地址。
- internalAddress 服务器在子网内部的 IP 地址。
注:若部署的服务器在同一区域,内网IP可以互通,address 和internalAddress 都使用内网IP。之前遇到过有的小伙伴买的云服务器做测试,address使用公网IP,由于部署过程通信拷贝文件走了address,公网带宽又低。导致创建集群时异常的慢。
3.5 创建 K8s 集群
export KKZONE=cn
 ./kt create cluster -f config-sample.yaml
执行后会有如下提示,输入 yes/y 继续执行
等待一段时间,看到输入成功的消息
3.6 验证
- 查看节点状态
kubectl get nodes -o wide
[root@master1 ~]# kubectl get nodes -owide
NAME      STATUS   ROLES           AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                                   KERNEL-VERSION                           CONTAINER-RUNTIME
master1   Ready    control-plane   3m10s   v1.32.5   192.168.0.219   <none>        KylinSecOS Linux 3 (Core)                  4.19.90-2003.4.0.0036.ky3.kb13.aarch64   containerd://1.7.13
master2   Ready    control-plane   2m28s   v1.32.5   192.168.0.87    <none>        openEuler 20.03 (LTS)                      4.19.90-2003.4.0.0036.oe1.x86_64         containerd://1.7.13
master3   Ready    control-plane   2m58s   v1.32.5   192.168.0.120   <none>        Kylin Linux Advanced Server V10 (Tercel)   4.19.90-17.5.ky10.aarch64                containerd://1.7.13
node1     Ready    worker          2m27s   v1.32.5   192.168.0.158   <none>        Anolis OS 8.6                              4.19.91-26.an8.x86_64                    containerd://1.7.13
node2     Ready    worker          2m27s   v1.32.5   192.168.0.89    <none>        UOS Server Euler 20                        4.19.90-2005.2.0.0039.uel20.aarch64      containerd://1.7.13
[root@master1 ~]#
- 查看pod状态
kubectl get pod -A -o wide
4.安装 KubeSphere
helm upgrade --install -n kubesphere-system --create-namespace ks-core https://charts.kubesphere.io/main/ks-core-1.1.5.tgz \
    --set global.imageRegistry=swr.cn-south-1.myhuaweicloud.com/gjing1st \
    --set extension.imageRegistry=swr.cn-south-1.myhuaweicloud.com/gjing1st \
    --set ksExtensionRepository.image.tag=v1.1.6 \
     --debug \
     --wait
若有x86镜像错误,可至所在节点进行x86镜像拉取重命名,类似:
#拉取x86镜像
crictl pull swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-controller-manager:v4.1.3
#打tag
ctr -n=k8s.io image tag --force \
  swr.cn-southwest-2.myhuaweicloud.com/ks/kubesphere/ks-controller-manager:v4.1.3 \
  swr.cn-south-1.myhuaweicloud.com/gjing1st/kubesphere/ks-controller-manager:v4.1.3
等待一段时间看到成功消息
查看pod列表
5.验证
- 登录页面
初次登录需要换密码,如果不想换也可以继续填写P@88w0rd,不过建议更换
- 首页
- 集群管理信息
- 节点信息
- 节点详细
- master1
 
- master2
- master3
6.总结
本次技术实践成功在信创环境下完成混合架构云原生平台部署,具体涵盖 x86(海光/兆芯)和 ARM64(飞腾/鲲鹏)两大架构的多款国产芯片,适配UOS、麒麟、欧拉等主流国产操作系统,最终实现Kubernetes和KubeSphere的稳定运行。该实践为国产化技术栈的云原生发展提供了可行性验证和技术积累,欢迎更多开发者参与国产化云原生生态的共建与探索。如您在实践中遇到问题,欢迎通过社区论坛交流讨论。
本文由博客一文多发平台 OpenWrite 发布!