本文介绍了如何在两台 ubuntu 16.04 64 bit 双核 cpu 虚拟机上从源码开始部署 KubeEdge 1.2.0 集群的过程,云端 Kubernetes 版本为 1.17.3,Golang 版本为1.12.4。本文基于 KubeEdge 1.1.0 部署文章,具有一定实践参考意义。
一、概述
1.1 环境
云端:ubuntu 16.04 64 bit,用户名为 ubuntu。IP 为 192.168.0.102。
边缘端:同上,IP 为 192.168.0.140。
KubeEdge部署涉及两端:
- 云端
docker, kubernetes 集群和 KubeEdge 云端核心模块。 - 边缘端
docker, mqtt 和 KubeEdge 边缘端核心模块。
1.2 依赖
依赖组件(含工具、编译器)及版本:
- golang
版本 1.12.14,到 https://studygolang.com/dl 下载。编译源码需要,如果不编译,则无须安装。需要指出的是,KubeEdge 对 golang 版本有兼容性,当前官方源码的 master 分支已经支持 1.13 版本 golang,但本文依旧使用 1.12。 - k8s 版本
1.17,具体部署参考其它文章。根据当前官方文档,已经支持 1.17 版本了。 - mosquitto
1.6.8, 到 https://mosquitto.org/download/ 下载。 - KubeEdge 相关的(云端、边缘端)
最新发布版本为 v1.2.0, 到 https://github.com/kubeedge/kubeedge/releases/tag/v1.2.0 下载。代码仓库为 https://github.com/kubeedge/kubeedge/ 。
注意,github并不是一直都十分稳定,所以下载可能会较耗时。
本文部署时间约为2020年2月中下旬。需注意时间有效性。仅针对 KubeEdge 1.2.0 有效。
1.3 方法论
最权威的莫过于 KubeEdge 官方安装文档:https://docs.kubeedge.io/en/latest/setup/setup.html 。该文档从源码编译到安装,均有涉及。然作为初学者,个人认为官方的文档还不够细致。网上也有很多安装部署教程,虽然方法不同,但目的是一样的。这里根据笔者经验简述如下:
-
事预则立
下载官方编译好的二进制文件(cloudcore、edgecore),或者自行编译源码得到这两个二进制文件。准备好配置文件(并做适应性修改)。然后再运行。本文采用此方式。先准备好所有的文件,并统一放置到部署工程目录。
需要注意的是,KubeEdge 官方文档只涉及 KubeEdge 有关的部署,KubeEdge 还要依赖 docker 和 kubernetes(边缘端还要依赖 mosquitto)。而这些需要实践者额外进行,为减少篇幅,本文不过多涉及,但给出部署文章链接。
1.4 新版本主要变化
1.2.0 版本的云边端配置由各自的程序生成默认的配置,再手动修改,相比 1.1.0 版本方便很多。
新版本的边缘端默认自动注册云端(需在配置文件中指定云端IP)。
新版本加强了异步通信。
二、准备
2.1 创建部署文件目录
官方文档建议创建单独的目录存储二进制文件,如~/cmd/
,在部署 1.1.0 版本时笔者也创建目录,但新版本做了优化,笔者认为无须部署目录,故省略。
2.2 KubeEdge 二进制
本文使用的 KubeEdge 是从源码编译得到。
2.2.1 官方编译好的文件
到 https://github.com/kubeedge/kubeedge/releases 下载官方编译好的二进制。压缩包名称为 kubeedge-v1.2.0-linux-amd64.tar.gz 。
也可以通过编译源码得到,方法参考文后。
另外,除了编译好的二进制外,还需要下载源码,地址为: https://github.com/kubeedge/kubeedge 。因为部分配置文件只在仓库源码中才可找到(当然,也可以直接在 github 仓库上找到对应的文件下载)。
2.2.2 KubeEdge 源码编译
1、Golang 环境搭建
下载好 golang,并解压:
# mkdir ~/tools
# tar xf go1.12.14.linux-amd64.tar.gz -C ~/tools
export PATH=$PATH:/home/ubuntu/tools/go/bin
export GOROOT=/home/ubuntu/kubeedge
export GOPATH=/home/ubuntu/kubeedge
执行 source ~/.bashrc 生效。验证:
# ubuntu@ubuntu:~/kubeedge$ go version
go version go1.12.14 linux/amd64
2、克隆仓库:
# git clone https://github.com/kubeedge/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge
如果克隆速度慢,可以直接下载zip包,并解压源码到 $GOPATH/src/github.com/kubeedge/kubeedge,注意,这个目录一定是源码所在目录。
切换 1.2.0 分支:
# git checkout -b release-1.2 remotes/origin/release-1.2
3、检测 gcc 版本:
# gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
copyright (C) 2015 Free Software Foundation, Inc.
如果没有安装 gcc,则自行安装。
编译云端:
# cd $GOPATH/src/github.com/kubeedge/kubeedge/
# make all WHAT=cloudcore (注:进行coloud目录,执行make cloudcore 也可以,下类似)
编译边缘端:
# cd $GOPATH/src/github.com/kubeedge/kubeedge
# make all WHAT=edgecore
2.3 生成证书
# $GOPATH/src/github.com/kubeedge/kubeedge/build/tools/certgen.sh genCertAndKey edge
ca 和 certs 分别位于 /etc/kubeedge/ca 和 /etc/kubeedge/certs 目录。
2.4 创建设备模块和设备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
注:新版本的 yaml 文件有两类,在 devices 和 reliablesyncs 目录。
2.6 配置云端节点
# cd $GOPATH/src/github.com/kubeedge/kubeedge/
# 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"
。其它保持默认。
2.7 配置边缘节点
新版本配置文件由 edgecore 程序生成,因此,需要在边缘端机器上执行。具体参考下文。
2.8 mqtt
mqtt 只有边缘端需要。
如果边缘端为 ubuntu 系统,直接使用源安装:
# add-apt-repository ppa:mosquitto-dev/mosquitto-ppa // 添加源
# apt-get update // 更新
# apt-get install mosquitto // 安装
也可以使用源码编译。
2.9 Docker 和 kubernetes
Docker 安装可参考这里,kubernetes 安装可参考这里。需要指出的是,kubernetes 只部署 master 即可,node 无须部署。但必须安装网络插件(此处存疑,如果不安装,状态不是 Ready)。
三、部署
前面已经准备好了文件,直接部署就方便很多。注意,需要将证书和边缘端和文件拷贝到边缘机器上。方式多种,建议使用 scp 命令。前提是安装了 SSH 协议。在边缘端机器上执行拷贝(也称为分发)示例:
# mkdir -p /etc/kubeedge ~/kubeedge/edge
# scp -r 192.168.0.102:/etc/kubeedge/* /etc/kubeedge
# scp -r 192.168.0.102:/home/ubuntu/kubeedge/src/github.com/kubeedge/kubeedge/edge/edgecore ~/kubeedge/edge/
注1:此操作在边缘端机器上,非云端。
注2:此处直接将云端位于/etc
目录的证书拷贝到边缘端机器的 /etc/kubeedge 目录。将边缘端文件拷贝到 ~/kubeedge/edge/ 目录。
笔者配置了 SSH 允许 root 登陆,并添加了公钥。所以无须输入密码。如无此方式,可手动拷贝。
3.1 云端
3.1.1 部署 k8s 集群
查看节点状态:
# kubectl get node
NAME STATUS ROLES AGE VERSION
latelee-master Ready master 2m v1.17.0
此刻只有云端节点就绪。
3.1.3 运行云端核心
# cd $GOPATH/src/github.com/kubeedge/kubeedge/
# ./cloudcore // 建议先如此,方便观察日志
3.2 边缘端
进入边缘端机器的部署工程目录:
# cd ~/kubeedge/edge
运行边缘端核心:
# ./edgecore // 建议先如此,方便观察日志
运行 mqtt :
# mosquitto -d -p 1883
3.3 验证
在云端查看状态:
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
latelee-master Ready master 49m v1.17.3
latelee-node Ready edge 4m8s v1.17.1-kubeedge-v0.0.0-master+$Format:%h$
云端和边缘端均为 Ready 状态。
四、ARM部署
ARM的部署十分简单,将 edgecore 交叉编译即可,其它方法与 X86 上一致。
安装交叉编译器:
sudo apt-get install gcc-arm-linux-gnueabihf
设置环境变量并编译:
export GOARCH=arm
export GOOS="linux"
export GOARM=7
export CGO_ENABLED=1
export CC=arm-linux-gnueabihf-gcc
export GO111MODULE=off // 禁止 go module
make all WHAT=edgecore
五、问题
在测试时发现的问题及解决方法:
# ./cloudcore
[address: Invalid value: "unix:///var/lib/kubeedge/kubeedge.sock": unixSocketAddress unix:///var/lib/kubeedge/kubeedge.sock dir /var/lib/kubeedge not exist , need create it]
解决:手动创建目录
mkdir -p /var/lib/kubeedge
六、小结
KubeEdge 在2020年2月10日(即本文发表前9天)发布了1.2.0。笔者在春节期间看了几天源码,略有所得,还用 visio 画了流程图并记录结构体参数,不料通网后更新代码,发现代码大变样,又得重新阅读一次。CHANGELOG 还没有细看,为了继续研究代码,于是先部署运行,再通过打印信息来跟踪,此为笔者研读代码习惯之一。
KubeEdge 的 beehive 框架目录使用了符号链接方式,不能在 Windows 文件系统存储。
参考
- 官方源码仓库: https://github.com/kubeedge/kubeedge
- 官方镜像: https://hub.docker.com/u/kubeedge
- 压缩包: https://github.com/kubeedge/kubeedge/releases
- 官方安装文档:https://docs.kubeedge.io/en/latest/setup/setup.html
- KubeEdge環境を構築してみた by AWS EC2: https://qiita.com/S-dwinter/items/f1e92f21d4b23fbbba80
- KubeEdge 部署: https://www.latelee.org/kubeedge/kubeedge-deploy.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。