KubeEdge组件:
Edged:一个运行在 edge 节点的 agent 程序,管理边缘的容器化应用程序
EdgeHub:边缘的通信接口模块。这是一个 Web 套接字客户端,负责边缘计算与云服务的交互。包括同步云端资源到边缘端,以及报告边缘端 host 和 device 状态到云端
CloudHub:云端通讯接口模块。一个 Web 套接字服务器,负责监视云端的更改、缓存以及向 EdgeHub 发送消息
EdgeController:管理边缘节点。它是一个扩展的 Kubernetes 控制器,管理边缘节点和 pod 元数据,以便数据可以面向特定的边缘节点。
EventBus:使用 MQTT 处理内部边缘通信。MQTT 客户端与 MQTT 服务器(mosquitto)交互,为其他组件提供发布和订阅功能
DeviceTwin:处理设备元数据的设备软件镜像。该模块有助于处理设备状态并将其同步到云上。它还为应用程序提供查询接口,它连接到一个轻量级数据库(SQLite)
MetaManager:管理边缘节点上的元数据。这是 Edged 和 Edgehub 之间的消息处理器。负责在轻量级数据库(SQLite)中存储 / 检索元数据
kubeEdge 包括 cloud 和 edge 部分,在 kubernetes 构建,在cloud与edge 端提供核心的基础支持,比如网络,应用,部署以及元数据的同步等。
安装kubeEdge 需要安装 kubernetes 集群,cloud 与 edge 部分依赖:
cloud side: docker, kubernetes cluster and cloudcore.
edge side:golang, docker, mqtt and edgecore.
2.1 golang
版本 1.12.16,到 https://studygolang.com/dl 下载。编译源码需要,如果不编译,则无须安装。需要指出的是,KubeEdge 对 golang 版本有兼容性,根据当前官方要求,需要使用 1.12 版本 golang
# tar -xvf go1.12.16.linux-amd64.tar.gz -C /usr/local/
在 ~/.bashrc 文件最后添加:
export GOROOT=/usr/local/go
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/home/wyj/kubeedge
执行 source ~/.bashrc 生效。验证:
# ubuntu@ubuntu:~/kubeedge$ go version
go version go1.12.16 linux/amd64
2.2 安装gcc,或者Arm交叉编译工具链
2.3 mosquitto
到 https://mosquitto.org/download/ 下载 ,然后安装。
在线安装:
引入mosquitto仓库并更新
$sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
$sudo apt-get update
注:在Ubuntu下,如果提示这个错误的。 add-apt-repository: command not found,安装如下工具即可。
$ sudo apt-get install software-properties-common python-software-properties
执行以下命令安装mosquitto包
$sudo apt-get install mosquitto
2.4 docker安装
安装方法:https://blog.csdn.net/ggggyj/article/details/104921836
2.4 云侧 安装k8s
安装方法:https://blog.csdn.net/ggggyj/article/details/104922023
官方编译好的文件
到 https://github.com/kubeedge/kubeedge/releases 下载官方编译好的二进制。压缩包名称为 kubeedge-v1.2.0-linux- amd64.tar.gz 。
也可以通过编译源码得到,方法参考文后。
另外,除了编译好的二进制外,还需要下载源码,地址为: https://github.com/kubeedge/kubeedge 。因为部分配置文件只在仓库源码中才可找到(当然,也可以直接在 github 仓库上找到对应的文件下载)。
# git clone https://github.com/kubeedge/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge
# cd $GOPATH/src/github.com/kubeedge/kubeedge/
# make all WHAT=cloudcore
生成二进制 cloudcore 文件位于 cloud 目录
cp $GOPATH/src/github.com/kubeedge/kubeedge/_output/local/bin/cloudcore ~/kubeedge/cloud/
本文边缘端是运行在Arm平台,因此需要交叉编译。提前安装交叉编译工具链 arm-linux-gnueabihf-gcc
3.3.1 更改$GOPATH/src/github.com/kubeedge/kubeedge目录下Makefile
改为
else
all: verify-golang
hack/make-rules/crossbuild.sh $(WHAT)
endif
3.3.2 更改$GOPATH/src/github.com/kubeedge/kubeedge//hack/lib/golang.sh
本文arm架构是armv7
配置交叉编译工具,更改299行
if [ "${goarm}" == "8" ]; then
set -x
GOARCH=arm64 GOOS="linux" CGO_ENABLED=1 CC=arm-linux-gcc go build -o ${KUBEEDGE_OUTPUT_BINPATH}/${name} -ldflags "$ldflags" $bin
set +x
elif [ "${goarm}" == "7" ]; then
set -x
GOARCH=arm GOOS="linux" GOARM=${goarm} CGO_ENABLED=1 CC=arm-linux-gnueabihf-gcc go build -o ${KUBEEDGE_OUTPUT_BINPATH}/${name} -ldflags "$ldflags" $bin
set +x
fi
done
}
编译边缘侧
cd $GOPATH/src/github.com/kubeedge/kubeedge
make all WHAT=edgecore
或
GOFLAGS="-mod=vendor" make all WHAT=edgecore
生成二进制 edgecore 文件位于 edge 目录。拷贝二进制及配置文件到部署工程目录:
# cp -a $GOPATH/src/github.com/kubeedge/kubeedge/_output/local/bin/ ~/kubeedge/edge/
# $GOPATH/src/github.com/kubeedge/kubeedge/build/tools/certgen.sh genCertAndKey edge
ca 和 certs 分别位于 /etc/kubeedge/ca 和 /etc/kubeedge/certs 目录。注意,这是在云端机器执行,所以云端已经有了证书,拷贝到 certs 目录,是为了方便分发到边缘节点。
创建设备模块和设备CRD yaml 文件
cd $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/devices
kubectl create -f devices_v1alpha1_devicemodel.yaml
kubectl create -f devices_v1alpha1_device.yaml
cd $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/reliablesyncs
kubectl create -f cluster_objectsync_v1alpha1.yaml
kubectl create -f objectsync_v1alpha1.yaml
3.6 将证书文件传输到edge node
scp -r /etc/kubeedge/ca [email protected]:/etc/kubeedge
scp -r /etc/kubeedge/certs [email protected]:/etc/kubeedge
本配置文件由 cloudcore 程序生成,执行:新版
# cd $GOPATH/src/github.com/kubeedge/kubeedge/cloud
# mkdir -p /etc/kubeedge/config/
# ./cloudcore --minconfig > /etc/kubeedge/config/cloudcore.yaml
注1:cloudcore --minconfig生成最小配置,类似有cloudcore --defaultconfig。
注2:cloudcore 默认使用的配置文件为/etc/kubeedge/config/cloudcore.yaml。
边缘端类似,下省略。
接着修改配置文件:
# vim /etc/kubeedge/config/cloudcore.yaml
官方默认为kubeconfig: "/root/.kube/config",本文改为 kubeconfig: "/home/ubuntu/.kube/config"。其它保持默认。
部署node
kubectl apply -f $GOPATH/src/github.com/kubeedge/kubeedge/build/node.json
并生成配置文件:
# ./edgecore --minconfig > /etc/kubeedge/config/edgecore.yaml
修改配置文件:
# vim /etc/kubeedge/config/edgecore.yaml
注意2处地方。修改websocket下的server,默认为127.0.0.1:10000,需改为实际云端 IP 地址,此处为192.168.50.128:10000。另一处是podSandboxImage,X86平台为podSandboxImage: kubeedge/pause:3.1,ARM 平台根据位数不同,可设为kubeedge/pause-arm:3.1或ubeedge/pause-arm64:3.1。
其它要点:cgroup 驱动默认值为:cgroupDriver: cgroupfs,无须改 Docker 配置。网络设备接口名称及 IP 地址,会运行上述命令时自动检测获取,无须修改。
云端: ./cloudcore
边缘侧 ./edgecore
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
edge-node Ready edge 36m v1.17.1-kubeedge-v1.2.0-beta.0.157+adcdceaf9bafbf-dirty
ubuntu Ready master 47m v1.17.4
如果连接不上
# 关闭无用服务和防火墙
systemctl disable postfix.service
systemctl stop postfix.service
systemctl stop firewalld
systemctl mask firewalld
在测试时发现,在Ubuntu18.04上部署的云端每次在Ubuntu重启后就无法启动
解决办法
swapoff -a
sudo fuser -k -n tcp 10250