本次实践在混合架构环境下部署Kubernetes
和KubeSphere
平台,环境涵盖5大厂商CPU和5类操作系统。整个环境准备耗时巨大,欢迎转发分享。
环境涉及软件版本信息
- 服务器芯片: 鲲鹏/飞腾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芯片:
- 鲲鹏
- 飞腾
- 海光
- 兆芯
- 国际芯片:interl、amd等
- 操作系统
- 银河麒麟V10
- 麒麟国防版
- 麒麟信安
- 中标麒麟V7
- 统信 UOS
- 华为欧拉 openEuler、移动大云
- 阿里龙蜥 Anolis OS
- 腾讯 TencentOS
- 国际操作系统:centos、ubuntu、debian等
本文由 [编码如写诗-天行1st] 原创编写,有任何问题可联系我 获取帮助。
关于我:
- 主要从事后端开发,兼具前端、运维及全栈工程师,热爱
Golang
、Docker
、kubernetes
、KubeSphere
。 - 信创服务器
k8s
&KubeSphere
布道者、KubeSphere
离线部署布道者
关于kt
kt
是基于kk
二次开发的产物,具备kk
的所有功能,二开主要为适配信创国产化环境、简化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
的稳定运行。该实践为国产化技术栈的云原生发展提供了可行性验证和技术积累,欢迎业界同仁交流探讨,若有任何疑问可随时联系我获取协助。