RISCV64架构下 Kubernetes相关软件编译
转载自知乎用户 在路上
原文链接 : https://zhuanlan.zhihu.com/p/443777923
一、编译环境#
- OS :openEuler Linux 5.4.61 (openEuler镜像下载地址)
- ARCH: riscv64
- 平台: 全志D1开发板
- go版本: go version go1.17 linux/riscv64
二、go和docker安装#
详见教程:在D1/openEuler上安装docker,并运行docker/Debian
docker安装前请先确认一下内核配置是否满足:check-config.sh
安装完成docker后还是无法正常使用docker的话(报错与libseccomp
相关),建议重新安装一下libseccomp
。
三、conntrack安装#
编译conntrack-tools会出现依赖包文件找不到的问题,根据提示进行安装即可。目前openEuler软件源有大部分的包,可直接下载软件以及对应的devel软件。依赖包源码下载地址:https://git.netfilter.org/
四、编译Kubernetes#
由于目前还没有基于riscv架构的kubernetes release包,因此需要从源码入手。
RISCV移植过的源码地址:https://github.com/carlosedp/kubernetes/tree/riscv64_build
对应的PR地址:https://github.com/kubernetes/kubernetes/pull/86011
编译完成后,可以在 _output/local/bin/linux/riscv64/
中找到需要的二进制文件
本实验在全志D1的开发板上进行,系统采用的openEuler,由于CPU核数和存储的限制,以下是编译过程中可能遇到的错误:
4.1. 相关错误及对应的解决办法#
- network: /usr/local/go/pkg/tool/linux_riscv64/compile: signal: killed
问题重现:
解决方法:
属于OOM错误,需要扩大swap分区
1.创建作为swap分区的文件:增加1GB大小的交换分区
dd if=/dev/zero of=/root/swapfile bs=1M count=1024
2.格式化为交换分区文件
mkswap /root/swapfile
3.启用交换分区文件
swapon /root/swapfile
- _output/bin/deepcopy-gen: Permission denied
问题重现:编译kubernetes时遇到报错
./hack/run-in-gopath.sh: line 33: _output/bin/deepcopy-gen: Permission denied
解决方法:
然后重新 make 编译操作。
- vendor/https://github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go:10:9: undefined: syscall.Dup2
问题重现:编译kubernetes时遇到报错信息
解决方法:
这是由于kubernetes库 go.mod
中依赖 ginkgo
,但是 go.mod
中为 ginkgo v1.10.1
版本,而支持riscv的ginkgo
版本从v1.11.0开始,因此在编译前需要将go.mod
中的ginkgo
版本修改为1.11.0
github.com/onsi/ginkgo => github.com/onsi/ginkgo v1.11.0
- tmp存储Out of Memory
解决方法参考,如何增加 Linux 下临时文件夹 /tmp 的大小
http://xiehongfeng100.github.io/2016/01/18/ops-how-to-increase-tmp-partition-size/
五、编译etcd#
etcd的RISCV移植已经并入主线可直接下载主线代码:
https://link.zhihu.com/?target=https%3A//github.com/etcd-io/etcd
对应的PR地址:https://github.com/etcd-io/etcd/pull/10834
5.1. etcd编译过程中出现的问题#
- etcd on unsupported platform without ETCD_UNSUPPORTED_ARCH=riscv64 set
问题重现
安装etcd时出现etcd on unsupported platform without ETCD_UNSUPPORTED_ARCH=riscv64 set
,致使etcd启动失败。
解决方法:
重启一下etcd即成功。
六、编译flannel#
尚未进行RISCV移植,目前只支持二进制编译。
Related Issues not found
Please login GitHub to create issue