基于虚拟机Ubuntu与Jetson Nano之间的KubeEdge部署

注意所有操作都要在root权限下进行

前提准备

虚拟机:Ubuntu
Jetson Nano
本文用的ubuntu系统是18.04.5
(关于系统版本是否需要一致这个问题还没有验证,不过架构是可以不一样的,硬件不影响kubeedge部署)

虚拟机与开发板之间的部署不同于虚拟机与虚拟机之间的部署,我们必须要确保虚拟机与开发板与主机之间能够互相ping通!所以三台机子必须在同一局域网!
所以这里我们需要将虚拟机设置为桥接模式:(这一步需要在安装ubuntu系统的时候就要做好(看第二张图)不然进入系统再改可能会产生不必要的问题)
1.以管理员身份打开VM
2.工具栏中的 编辑 ->虚拟网络编辑器
“已桥接至”选择自己的网卡,我这里选的宽带网卡(因为在学校所以网络限制捣鼓了很久的linux版本锐捷校园客户端怎么用,如果也有校园网客户端登录的问题可以私信问我)
3.把笔记本的防火墙全都关掉
基于虚拟机Ubuntu与Jetson Nano之间的KubeEdge部署_第1张图片
基于虚拟机Ubuntu与Jetson Nano之间的KubeEdge部署_第2张图片

文章目录

    • ***注意所有操作都要在root权限下进行***
  • 前提准备
  • master和edge端都需要做的准备
  • 正式开始部署(master和edge端都要做)
  • master端的k8s部署,node节点只需要进行到下载kubexxx这一步,不需要初始化
  • edge端Mosquitto安装
  • keadm方式部署kubeedge
  • 最后一步
  • 一些常用操作总结
  • 查看cloudcore是否开机自启
  • 查看edgecore是否开机自启
  • 如果碰到kubeadm reset后不能重新keadm init
  • 总结
  • 参考文章


master和edge端都需要做的准备

命令安装与更新

sudo apt-get update
sudo apt-get upgrade
#输入ifconfig会提示安装net-tool根据他的提示安装
#安装好后再次输入ifconfig获取ip地址,连的wifi一般就是在wlan那一行,宽带就是ens那一行
sudo apt-get install wget
sudo apt-get install vim
sudo apt-get install ssh
#这些做完应该就不会有提示命令安装了
#然后要设置root身份,这样后面就免去很多权限的事情
sudo passwd root
#然后提示输入密码并设置成功
su root
#以root全兴登录,su XXX,XXX是最开始的用户名,su XXX即回到原始用户

本文用XSHELL链接两台系统
XSHELL使用时需要注意输入ip地址后跳出来要你输入的用户名就是你设置ubuntu的名字

正式开始部署(master和edge端都要做)

关闭防火墙
sudo ufw disable
#防火墙在系统启动时自动禁用
//查看防火墙状态
sudo ufw status
#状态:不活动

关闭交换分区
//临时关闭
sudo swapoff -a
//永久关闭
sudo sed -i 's/.*swap.*/#&/' /etc/fstab

修改主机名
//修改XXX部分即可
hostnamectl set-hostname XXX
// 同时在/etc/host中将原来主机名替换,否则用sudo命令时会报错
hostname
//查看当前主机名字

**golang安装**
这里要注意的是,最好是自己去官网下载go的tar包,链接就是下面这个链接,然后通过xshell的文件传输放到自己熟悉的文件夹位置
```c
https://studygolang.com/dl

还有一点要注意的是:不同架构要下载不同版本的tar包,比如nano就是aarch64架构,就需要下载arm64位的,虚拟机的是x86_64就要下载amd64的
具体自己什么架构查看方法: uname -m
不一定要下这个版本,可以下最新版本的go,具体参数自己改

//下载安装包
sudo wget https://dl.google.com/go/go1.15.3.linux-amd64.tar.gz
//解压到/usr/local/文件下
sudo tar -zxvf go1.15.3.linux-amd64.tar.gz -C /usr/local/
// 将go添加至环境变量
sudo cp /usr/local/go/bin/go /usr/local/bin/go
// 查看go是否安装成功
go version
#go version go1.15.3 linux/amd64
#如果重启节点后有问题可以更改环境变量(这里面的具体问题我也不太明白,就放一张我的笔记仅供参考)


(笔记里的图片放大照,更新环境变量的指令 )
基于虚拟机Ubuntu与Jetson Nano之间的KubeEdge部署_第3张图片

**docker安装**
// step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
// step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
// Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
//step4下载docker
sudo apt-get -y update
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
//查看docker版本
docker version
//修改镜像源
sudo vi /etc/docker/daemon.json
//打开后输入以下内容  注意exec-opt这步不要改成systemd,还是写为cgroupfs

{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com",
    "https://quay-mirror.qiniu.com"
  ],
  "exec-opts": [ "native.cgroupdriver=systemd" ]    
}
//重启
sudo systemctl daemon-reload
sudo systemctl restart docker
//查看修改后的 docker cgroup 状态,发现变为systemd即为修改成功
docker info | grep Cgroup

master端的k8s部署,node节点只需要进行到下载kubexxx这一步,不需要初始化

//使得 apt 支持 ssl 传输
apt-get update && apt-get install -y apt-transport-https
//下载 gpg 密钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
//添加 k8s 镜像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
//更新源列表
apt-get update

**下载 kubectl,kubeadm以及 kubelet** 
apt-get install -y kubelet=1.19.4-00 kubeadm=1.19.4-00 kubectl=1.19.4-00

**初始化 master 节点**
kubeadm init \
  --apiserver-advertise-address=192.168.213.129 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.19.4 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16
#注意第一条命令要把ip地址改成master的ip地址,k8s version如果报错就按照他的要求改版本
#其他指令的ip地址只要不和master的地址冲突即可
#并且要把每句指令后的\删除掉并以一行的形式现在文本文档中改好,再全部复制到xshell中执行

成功后会出现下图,再把标白部分一句一句的复制并输出!
基于虚拟机Ubuntu与Jetson Nano之间的KubeEdge部署_第4张图片
网络部署

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
//查看拉取情况
kubectl get pods -n kube-system
//等待一段时间后(多次输出上面这条语句可以查看下载状况,等的时间依网速而定)
kubectl get nodes
//好了以后输出上面这句(ready就是成功了,name是master的名字)

如果出现The connection to the server localhost:8080 was refused - did you specify the right host or port? 需要输入 su root 在root用户权限下重新再试一次

网络部署状态
基于虚拟机Ubuntu与Jetson Nano之间的KubeEdge部署_第5张图片
ready状态
在这里插入图片描述

edge端Mosquitto安装

//添加源
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
//下载并安装
sudo apt-get install mosquitto

keadm方式部署kubeedge

一、master端
去github上手动下载keadm的tar包,这里用的是1.5.0的版本,这里同样要注意arm和amd的版本问题。和golang一样放在自己找的到的地方

https://github.com/kubeedge/kubeedge/releases
//解压
tar -zxvf keadm-v1.5.0-linux-amd64.tar.gz
//进入keadm位置(这一步很重要,因为./keadm init必须在这个位置执行)
cd keadm-v1.5.0-linux-amd64/keadm
//首先登录websites.ipaddress.com
//然后搜索github和raw.githubusercontent的域名解析
//将域名添加在hosts中,如下图
sudo vi /etc/hosts

在这里插入图片描述

//执行,如果一直访问拒绝一定是网络的问题,多试,多试,再多试
./keadm init

出现这个为成功
在这里插入图片描述

//获取token值,稍后会用到
./keadm gettoken

二、edge端
前面操作和master端一致,直到执行./keadm init 这一步
需要改成

//这里可以不加版本号
./keadm join --cloudcore-ipport='master端所在的ip':10000 --edgenode-name='edge名字(自己取)' --kubeedge-version=1.5.0 --token='前面获取的token值'

出现下图即成功
在这里插入图片描述

最后一步

在master端输入指令查看节点状态

kubectl get nodes

多等一会,出现下图即为加入成功
在这里插入图片描述

一些常用操作总结

//近100条日志查询
journalctl -u edgecore.service -r
//查看各类信息状态
ps aux|grep mosquitto
//查看edgecore是否开机自启
systemctl is-enabled mosquitto

查看cloudcore是否开机自启

#查看cloudcore启动情况
ps aux|grep cloudcore

#输出如下表示启动:
root     23498  0.1  0.3 1012544 48640 ?       Ssl  May12  13:11 /usr/local/bin/cloudcore

#查看端口 10000 10002 端口都有了
#没有netstat命令,安装:yum install net-tools -y
netstat -tpnl
#如下:
tcp6       0      0 :::10000                :::*                    LISTEN      23498/cloudcore     
tcp6       0      0 :::10002                :::*                    LISTEN      23498/cloudcore     

#查看cloudcore启动状态
systemctl status cloudcore

#如果没有设置开机启动服务则设置 复制开启自启动服务文件
cp /etc/kubeedge/cloudcore.service /etc/systemd/system/cloudcore.service

#添加文件权限
chmod +x /etc/systemd/system/cloudcore.service

#重新加载配置文件
systemctl daemon-reload

#查看cloudcore启动的进程id,然后杀掉
ps aux|grep cloudcore
#输出如下:
root     23498  0.1  0.3 1012544 48640 ?       Ssl  May12  13:12 /usr/local/bin/cloudcore
#杀掉
kill -9 23498

#启动cloudcore
systemctl start cloudcore

#设置开机自启动
systemctl enable cloudcore.service

#查看cloudcore开机启动状态 enabled:开启, disabled:关闭
systemctl is-enabled cloudcore.service

查看edgecore是否开机自启

#查看edgecore是否开机启动
systemctl is-enabled edgecore

#如果没有设置则设置 开启自启动
如果没有设置则设置 开启自启动
vim /etc/systemd/system/edgecore.service 
[Unit]
Description=edgecore.service

[Service]
Type=simple
ExecStart=/usr/local/bin/edgecore
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

#添加文件权限并启动edgecore
chmod +x /etc/systemd/system/edgecore.service 

#重新加载配置文件
systemctl daemon-reload 

#启动edgecore      
systemctl start edgecore    

#设置开机自启
systemctl enable edgecore.service  

#查看edgecore开机启动状态 enabled:开启, disabled:关闭
systemctl is-enabled edgecore

#查看状态     
systemctl status edgecore

如果碰到kubeadm reset后不能重新keadm init

解决方法

注意要做这两步
rm -rf $HOME/.kube
rm -rf /etc/cni/net.d/

总结

虚拟机上的单纯部署和板子与虚拟机之间的部署还是有很多差异的,还是要有自己实践的一个过程才会学到东西,一定要有自己摸索的一个过程,这是自己技术成长的关键,坚持下来在你眼前的必然是一片花海。如果有疑问可以私信或者评论。

参考文章

Kubeedge1.4.0安装
解决GitHub的raw.githubusercontent.com无法连接问题
kubeedge1.3.0 安装过程
ubuntu 安装 k8s

你可能感兴趣的:(kubeedge,边缘计算,Jetson,Nano,ubuntu)