KubeEdge架构部署日志

1、KubeEdge架构

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、前提依赖部署

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

3、kubeEdge部署

   官方编译好的文件
   到 https://github.com/kubeedge/kubeedge/releases 下载官方编译好的二进制。压缩包名称为 kubeedge-v1.2.0-linux-  amd64.tar.gz 。
也可以通过编译源码得到,方法参考文后。
另外,除了编译好的二进制外,还需要下载源码,地址为: https://github.com/kubeedge/kubeedge 。因为部分配置文件只在仓库源码中才可找到(当然,也可以直接在 github 仓库上找到对应的文件下载)。

 

3.1 克隆仓库源码

# git clone https://github.com/kubeedge/kubeedge.git  $GOPATH/src/github.com/kubeedge/kubeedge

3.2编译云端:

# 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/

3.3 编译边缘端:

本文边缘端是运行在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/

3.4 生成证书

# $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

3.6配置云端节点

本配置文件由 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

3.7 配置边缘节点


并生成配置文件:

# ./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

猜你喜欢

转载自blog.csdn.net/ggggyj/article/details/104920696