Nanopi R4s 构建 kubuEdge 集群 (基于kubuEdge v1.2.0)
KubeEdge是一个开源系统,由华为公司研发,用于将容器化应用程序编排功能扩展到Edge的主机。该系统对原有k8s组件进行优化,使其可以在硬件条件相对较差的支持容器开发的边缘处理器上部署应用,并可将边端设备状态信息纳入k8s集群进行监控和管理。
说在前面:
节点运行环境:
- 系统环境:rk3399-sd-friendlycore-bionic-4.4-arm64-20201027
- k8s集群环境:v1.15.2
- docker版本:v18.9.9
- kubeEdge版本:v1.2.0
- 硬件条件:Nanopi R4s 4G版 (仅作为node节点),K8s主节点采用树莓派4B构建
参考文档:
https://blog.csdn.net/Obese_Tiger/article/details/104741708
https://blog.csdn.net/Obese_Tiger/article/details/104741606
感谢南冥无渔作者的无私奉献!
以下是部署流程:
1、准备工作
// 关闭防火墙:
ufw disable
// 关闭交换空间:
swapoff -a
// 设置主机名
hostnamectl set-hostname k8s-edge01
// 设置内核路由转发
vim /etc/sysctl.conf
修改:net.ipv4.ip_forward = 1 #开启ipv4转发,允许内置路由
// 使设置生效
sysctl -p
// 启用 net.bridge.bridge-nf-call-iptables 和 -iptables6
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sudo sysctl --system
// 设置hosts地址解析
vim /etc/hosts
192.168.253.8 k8s-master
192.168.253.11 k8s-node01
192.168.253.12 k8s-node02
192.168.253.21 k8s-Edge01
192.168.253.22 k8s-Edge02
// 设置时区(亚洲,中国,北京)
tzselect
依次输入:
4 - 9 - 1 - 1
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
// 换源
cp /etc/apt/sources.list /etc/apt/sources.list.backup // 官方源备份
vim /etc/apt/sources.list // 插入中科大源
/*------------------------------- 适用于 Ubuntu 1804 ---------------------------------------*/
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic main
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic universe
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-updates universe
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-security main
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-security universe
// 更新
apt update && apt upgrade
使用usb wifi组件集群,虽然两个千兆网口有些浪费,哎,说败家也不为过,主要是还是不想看见这么多网线!!!!
Nanopi R4s 基于friendlycore(采用Ubuntu1804开发)设置usb网卡静态IP方法,可参见笔者的另一篇博文:
2、软件环境部署
(1)、安装docker
(
cat <<EOF
deb [arch=arm64] https://download.docker.com/linux/ubuntu bionic stable
EOF
) > /etc/apt/sources.list.d/docker.list
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt update
apt -y install docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic
apt-mark hold docker-ce-cli
apt -y install docker-ce=5:18.09.9~3-0~ubuntu-bionic // containerd.io 自动安装
apt-mark hold docker-ce containerd.io
docker安装完成后,使用docker info 查看生成信息,着重检查一下几点:
Cgroup Driver: cgroups
如果参数不对,可以使用如下程序可以对上述配置进行设置
# 创建或替换 /etc/docker/daemon.json 以启用 cgroup 的 systemd 驱动
$ sudo cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=cgroups"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
}
EOF
// 将 cgroup 和交换选项添加到内核命令行中
// 请注意 "cgroup_enable=cpuset" 前的空格,以便在该行的最后一个项目后添加一个空格
vim /proc/cmdline //Nanopi 默认添加位置 其实该系统安装好后自动就已添加了
添加:cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 swapaccount=1
// 配置完后重启docker
systemctl restart docker
// 注意:执行docker info无报错后发可往下执行!
(2)、Golang环境部署
首先去镜像站,查找对应版本的安装包 下载对应go源码包
需要注意的是,由于Nanopi r4s 4g版采用基于rk3399处理器,其是基于arm架构的64位处理器,故需要下载arm64版本的源码包,本方案采用go1.12.16.linux-arm64.tar.gz版本!
下载完成后使用如下指令进行解包
tar -xzf go1.12.16.linux-arm64.tar.gz -C /usr/local
修改环境变量
vim /etc/profile
// 在文件最后添加以下内容
export HOME=/root
export GOROOT=/usr/local/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
让环境变量生效
source /etc/profile
查看是否构建成功
go version
(3)、mosquitto安装
// Ubuntu 1804系统直接使用如下指令即可安装
sudo apt-get install -y mosquitto
注意:Golang环境以及mosquitto部件同样需要在k8s的master主节点进行安装
3、KubeEdge集群部署
图片来源:https://github.com/kubeedge/kubeedge
由上图可知其实kubuedge节点与k8s节点其实是等价的,共同被k8s master所纳管,故安装kubeEdge同样需要构建K8s环境!关于使用树莓派构建K8s环境可以参考笔者的这篇博文:
使用:kubectl get nodes 查看master节点是否正常运行,确认主节点正常运行后,可执行如下指令进行部署
(1)、云端Master节点部署
注意啊,需要保证云端也完成了Golang环境以及mosquitto部件的安装
说明:笔者这一块是在由树莓派4B Ubuntu1804 构建的一个master主节点上进行的
安装git软件
apt install -y git
在码云上克隆源码包
git clone https://gitee.com/mirrors/KubeEdge.git $GOPATH/src/github.com/kubeedge/kubeedge
切换到 Kubeedge V1.2正式版
cd $GOPATH/src/github.com/kubeedge/kubeedge
git checkout -b v1.2.0 v1.2.0
生成证书
$GOPATH/src/github.com/kubeedge/kubeedge/build/tools/certgen.sh genCertAndKey edge
证书生成后,会在/etc/kubeedge
下生成两个文件夹,这两个文件夹里的内容作为云和边端的连接的凭证。之后会拷贝到边端的相应位置。
编译cloudcore源码
apt -y install gcc
cd $GOPATH/src/github.com/kubeedge/kubeedge/
make all WHAT=cloudcore
创建DeviceModel和设备CRD
cd $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/devices
kubectl create -f devices_v1alpha1_devicemodel.yaml
kubectl create -f devices_v1alpha1_device.yaml
复制cloudcore二进制文件
cd $GOPATH/src/github.com/kubeedge/kubeedge/cloud
mkdir -p ~/cmd
cp cloudcore ~/cmd/
创建并配置
mkdir -p /etc/kubeedge/config/
~/cmd/cloudcore --minconfig > /etc/kubeedge/config/cloudcore.yaml
vim /etc/kubeedge/config/cloudcore.yaml //里面的内容基本无需修改
运行cloudcore
mkdir -p /var/lib/kubeedge // 程序运行时会用到
cd ~/cmd/
./cloudcore // 如果运行时没有报错,可以放到后台运行
nohup ./cloudcore & // 这一步为后台运行cloudcore
查看是否在运行cloudcore
ps aux // 查找是否存在cloudcore线程
(2)、边端节点部署
说明:边端节点部署在Nanopi R4s上
安装git软件
apt install -y git
在码云上克隆源码包
git clone https://gitee.com/liu_hu_wei/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge
切换到 Kubeedge V1.2正式版
cd $GOPATH/src/github.com/kubeedge/kubeedge
git checkout -b v1.2.0 v1.2.0
编译edgecore二进制文件
apt -y install gcc
cd $GOPATH/src/github.com/kubeedge/kubeedge/
make all WHAT=edgecore
复制edgecore二进制文件
#可以在此目录下,查看是否存在一个edgecore的二进制文件
cd $GOPATH/src/github.com/kubeedge/kubeedge/edge
mkdir -p ~/cmd
cp edgecore ~/cmd/
创建edgecore配置文件
mkdir -p /etc/kubeedge/config/
~/cmd/edgecore --minconfig > /etc/kubeedge/config/edgecore.yaml
vim /etc/kubeedge/config/edgecore.yaml
/* 需要进行如下修改:
将nodeIP:一般会自动添加节点的内网IP地址
将edgehub.websocket.server:更改成云端公网IP地址+:10000
将modules.edged.podSandboxImage:更改kubeedge/pause-arm64:3.1
*/
// 保存后,将云端生成的证书,拖拽到树莓派的 /etc/kubeedge 下
启动edgecore服务
mosquitto -d -p 1883
cd ~/cmd
./edgecore #这一个是前端启动命令
如果前端启动无误,也可以使用后端启动方式
nohup ./edgecore > edgecore.log 2>&1 &
启动之后,就可以到云端的master查看是否加入成功了
kubectl get nodes // 在master端输入后,显示边端加入的节点处于Ready,就说明部署成功。