【云原生】如何在arm64架构系统上安装kubernetes及适配kubevela?-姐姐爱做菜漫画
本期作者
GO开发工程师 冯康
为了适应国内越来越多的国产化服务器以及配套产品,许多软件也诞生了适配国内服务器的新需求。
本文将描述在华为服务器arm64架构系统上,如何安装适配kubernetes以及kubevela。
一、arm64机器安装kubernetes1.1 安装dockers
# 下载阿里云docker yum 源
wget:
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
![](https://file.jqhtml5.com/file/view/20221001/krm1vvqshwl.jpg)
# 安装docker
yum -y install docker-ce
![](https://file.jqhtml5.com/file/view/20221001/qtozgqv3nyf.jpg)
![](https://file.jqhtml5.com/file/view/20221001/2lpbzmjtkqt.jpg)
![](https://file.jqhtml5.com/file/view/20221001/tzh5wtjhk51.jpg)
![](https://file.jqhtml5.com/file/view/20221001/23lxkxh2zge.jpg)
![](https://file.jqhtml5.com/file/view/20221001/kbhlgc2rzaa.jpg)
![](https://file.jqhtml5.com/file/view/20221001/tviqkr4a2l4.jpg)
# 设置开机启动docker
systemctl start docker
systemctl enable docker
![](https://file.jqhtml5.com/file/view/20221001/4f1vhia4bqp.jpg)
# 设置docker的cgroup驱动
这里推荐systemd
![](https://file.jqhtml5.com/file/view/20221001/0c5lk10y5xg.jpg)
# 使配置生效,重启docker
systemctl daemon-reload
systemctl restart docker
![](https://file.jqhtml5.com/file/view/20221001/3di1ww2zfmm.jpg)
# 查看docker状态
service docker status
![](https://file.jqhtml5.com/file/view/20221001/1wc2u0ww3ay.jpg)
# 查看docker版本
![](https://file.jqhtml5.com/file/view/20221001/dvpebcxhk0z.jpg)
1.2 设置网络
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
![](https://file.jqhtml5.com/file/view/20221001/jbgmagy0bh3.jpg)
# 三台主机全部关闭selinux
![](https://file.jqhtml5.com/file/view/20221001/v5he4lfue1h.jpg)
# 关闭swap分区
![](https://file.jqhtml5.com/file/view/20221001/rwx5xbmvhyd.jpg)
# 设置节点解析
cat >> /etc/hosts << EOF
xxx.xxx.xxx.xx master
EOF
![](https://file.jqhtml5.com/file/view/20221001/a0v2pkh302j.jpg)
# 设置主机名
vim /etc/hosts
hostname master
![](https://file.jqhtml5.com/file/view/20221001/fx5mfaupblg.jpg)
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
![](https://file.jqhtml5.com/file/view/20221001/gktejt0o4xk.jpg)
通过kubeadm工具安装kubernetes
# 添加网络源
![](https://file.jqhtml5.com/file/view/20221001/eszix2rg2ye.jpg)
# 安装kubectl,kubeadm,kubelet
yum install -y kubelet-1.22.0 kubeadm-1.22.0 kubectl-1.22.0
![](https://file.jqhtml5.com/file/view/20221001/knsw21nbapd.jpg)
# 启动kubelet服务
systemctl enable kubelet
# 初始化集群
# 设置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 设置集群网络(flannel)
kubectl apply -f
https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 去除主节点污点
kubectl describe node master | grep Taint
kubectl taint node master
node-role.kubernetes.io/master:NoSchedule-
二、arm64机器安装kubevela2.1 安装cli
在对应的官方github项目地址中,找到对应的机器版本即可。
这里选择现在对应的arm64版本,并在解压后将vela文件移动到/usr/local/bin文件夹下即可
2.2 安装core
这里在arm64类型的机器上安装core时,我选择使用helm的方式安装。
在安装时对于arm64的机器需要选择使用对应的arm64的镜像。
如果不做特殊的设置,在进行安装时发现gateway的pod无法正常运行,通过查看容器日志发现报exec format error 。
这里的这个报错原因就是因为容器使用的镜像是amd64而不是arm64的镜像导致的。
通过查看artifacthub上的对应的参数,发现可以通过以下参数来设置使用的镜像tag:
这里再查看dockerhub发现该镜像将arm64架构的镜像进行了单独tag:
所以在进行helm安装时,我们通过命令行—set来指定具体的镜像tag即可指定到对应的镜像。
2.3 安装velaux
这里我们选择私有的镜像,由于要适配arm64架构的机器需要使用源码来进行打镜像,这里使用kubevela的官方Dockerfile来打镜像。
在打apiserver的镜像时使用Dockerfile.apiserver。
通过查看Dockerfile,发现其中指定了platform参数来指定具体的镜像架构平台,但却只指定了构建过程的镜像(golang镜像),没有设定运行的镜像架构(alpine镜像)。
通过查看dockerhub上对应镜像的文件,发现同一个tag的镜像中包含了不通架构的镜像分支。
所以这里通过指定特定架构的镜像分支来指定使用特定架构的镜像。
![](https://file.jqhtml5.com/file/view/20221001/b3gekbqft5y.jpg)
同理,在打velaux前端项目的镜像时,也指定具体的digest即可。
但是在打velaux镜像时发现其中设置了GITVERSION的参数,将对应的值设置在了镜像/tmp/version中。
但是在全局搜索中并未发现这个值有使用到,并且在打镜像时这个值不设置还会影响镜像的构建。
![](https://file.jqhtml5.com/file/view/20221001/cbsdegoww1j.jpg)
这里我们选择将该行删除,就可以正常构建镜像啦~
![](https://file.jqhtml5.com/file/view/20221001/elt40w4urzq.jpg)
我们致力于用数字技术重构企业价值,助力企业实现数字化转型升级!
公众号 搜索【神州数码云基地】,后台回复Odoo,加入Odoo技术交流群!
知乎 搜索【神州数码云基地】,收看更多Odoo相关回答与文章!