KubeEdge安装详细教程

(注:本安装教程主要参考自 这里,但是在安装过程中自己也遇到了很多不同的问题,故转载,并记录于此)


本文介绍了在两台Ubuntu 18.04.3 LTS虚拟机下从源码开始部署 KubeEdge 1.1.0 集群的过程,云端 Kubernetes 版本为 1.16.0,Golang 版本为1.12.4。

1. 概述

1.1 环境

云端:Ubuntu 18.04.3 LTS,用户名为k8smaster。ip 为 192.168.179.131 

边缘端:Ubuntu 18.04.3 LTS,用户名为k8slave1。ip 为 192.168.179.142

KubeEdge 部署需要的组件:

云端:docker, kubernetes 集群和 KubeEdge 云端核心模块。

边缘端:docker, mqtt 和 KubeEdge 边缘端核心模块。

1.2 依赖

  • golang:版本1.12.14,移步 https://studygolang.com/dl 下载(由于是源码编译,所以需要用到golang)
  • k8s版本:v1.16.0
  • mosquitto:直接通过apt-get安装
  • KubeEdge:v1.1.0

2. 准备

2.1 创建部署文件目录

本安装方法主要适用于初学者,因为初学者对于搭建集群往往是比较陌生的。本文会先创建一个目录,存放各类安装过程中需要的文件。

创建部署工程目录:

# mkdir ~/kubeedge

创建子目录: 

# cd ~/kubeedge

# mkdir cloud edge certs yamls src

说明:

cloud:云端相关文件,包括 cloudcore 和配置文件。
edge:边缘端相关文件,包括 edgecore 和配置文件。
certs:证书文件。
yamls:一些 yamls 文件。
src:源码目录,存放kubeedge源码。

2.2 KubeEdge 二进制

获取KubeEdge的方式有两种,一种是直接从 官网(https://github.com/kubeedge/kubeedge/releases) 中下载(本实验版本为kubeedge-v1.1.0-linux-amd64.tar.gz);另一种方法是通过源码编译得到。这里介绍一下源码编译的方法(嗯,折腾...)

2.2.1 Golang环境搭建

(1) 下载golang,并解压

# wget https://studygolang.com/dl/golang/go1.12.14.linux-amd64.tar.gz

# tar -C /usr/local -xzf  go1.12.14.linux-amd64.tar.gz

(2) 添加环境变量

在~/.bashrc文件末尾添加:

# vim ~/.bashrc

export GOPATH=/home/kkbill/kubeedge
export PATH=$PATH:/usr/local/go/bin

保存后记得执行 source ~/.bashrc 生效。验证:

# go version
# go version go1.12.14 linux/amd64

2.2.2 下载kubeedge源码

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

2.2.3 检测gcc是否安装

# gcc --version

如果没有,则自行安装。

2.2.4 编译云端

# cd $GOPATH/src/github.com/kubeedge/kubeedge/

# make all WHAT=cloudcore

生成二进制 cloudcore 文件位于 cloud 目录。拷贝 cloudcore 和同一目录的配置文件(conf目录)到部署工程目录:

# cp -a cloud/cloudcore $GOPATH/cloud/
# cp -a cloud/conf/ $GOPATH/cloud/

在编译的时候遇到了第一个坑,就是版本的问题。由于最新clone下来的版本已经不是v1.1.0了,所以,我们需要把代码切回到v1.1.0版本,操作如下:(如果你在这一步无异常,则跳过)

在 $GOPATH/src/github.com/kubeedge/kubeedge 目录下,执行 git tag,并选择 v1.1.0 即可

# git tag
...
v1.1.0
...

# git checkout v1.1.0 执行完这一句后,代码就会回到v1.1.0版。

2.2.5 编译边缘端

# cd $GOPATH/src/github.com/kubeedge/kubeedge/

make all WHAT=edgecore

生成二进制 edgecore 文件位于 edge 目录。拷贝二进制及配置文件到部署工程目录:

# cp -a edge/edgecore $GOPATH/edge/

# cp -a edge/conf/ $GOPATH/edge/

这里又遇到了第2个坑,即出现如下错误:

/usr/local/go/pkg/tool/linux_amd64/link: signal: killed

这是由于编译需要较大的内存,而内存不够,造成了OOM。对应的解决办法:增加内存

(1) 创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。

# dd if=/dev/zero of=/root/swapfile bs=1M count=1024

(2) 格式化为交换分区文件:

mkswap /root/swapfile #建立swap的文件系统

(3) 启用交换分区文件:

swapon /root/swapfile #启用swap文件

解决这个问题,参考了:

https://forum.golangbridge.org/t/go-build-exits-with-signal-killed/513

https://segmentfault.com/a/1190000012219689

https://www.cnblogs.com/spjy/p/7085389.html

2.3 生成证书

# $GOPATH/src/github.com/kubeedge/kubeedge/build/tools/certgen.sh genCertAndKey edge

# cp -a /etc/kubeedge/* $GOPATH/certs

生成的 ca 和 certs 分别位于 /etc/kubeedge/ca 和 /etc/kubeedge/certs 目录,将其拷贝到部署工程目录的 certs 目录。注意,这是在云端机器执行,所以云端已经有了证书,拷贝到 certs 目录,是为了方便分发到边缘节点。

2.4 拷贝设备模块和设备CRD yaml 文件

# cp $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/devices/* $GOPATH/yamls

2.5 拷贝 node.json

# cp $GOPATH/src/github.com/kubeedge/kubeedge/build/node.json $GOPATH/cloud 

释义:node.json 为节点的配置信息,需要在云端机器执行,作用是将边缘端加入集群(但实际上只是让 k8s 知道有这个节点,还不是真正意义上的加入)

 

猜你喜欢

转载自www.cnblogs.com/kkbill/p/12600541.html