Nanopi R4s 构建 kubuEdge 集群 (基于kubuEdge v1.5.0)

KubeEdge是一个开源系统,由华为公司研发,用于将容器化应用程序编排功能扩展到Edge的主机。该系统对原有k8s组件进行优化,使其可以在硬件条件相对较差的支持容器开发的边缘处理器上部署应用,并可将边端设备状态信息纳入k8s集群进行监控和管理。

说在前面:

节点运行环境:

  • 系统环境:rk3399-sd-friendlycore-bionic-4.4-arm64-20201027
  • k8s集群环境:v1.15.2
  • docker版本:v18.9.9
  • kubeEdge版本:v1.5.0
  • 硬件条件:Nanopi R4s 4G版 (仅作为node节点),K8s主节点采用树莓派4B构建

参考文档:

  • https://blog.csdn.net/qq_24489251/article/details/108775479
  • https://blog.csdn.net/subfate/article/details/106463852
  • https://blog.csdn.net/kwame211/article/details/97661873

1、准备工作

// 关闭防火墙:
ufw disable
// 关闭交换空间:
swapoff -a
// 设置主机名
hostnamectl set-hostname k8s-edge01
// 设置内核路由转发
vim /etc/sysctl.conf
修改:net.ipv4.ip_forward = 1  #开启ipv4转发,允许内置路由
// 使设置生效
sysctl -p 
// 启用 net.bridge.bridge-nf-call-iptables 和 -iptables6
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sudo sysctl --system
// 设置hosts地址解析
vim /etc/hosts
192.168.253.8 k8s-master
192.168.253.11 k8s-node01
192.168.253.12 k8s-node02
192.168.253.21 k8s-Edge01
192.168.253.22 k8s-Edge02
// 设置时区(亚洲,中国,北京)
tzselect
依次输入:
4 - 9 - 1 - 1
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
// 换源
cp /etc/apt/sources.list /etc/apt/sources.list.backup // 官方源备份
vim /etc/apt/sources.list                             // 插入中科大源 或者 阿里源
/*------------------------------- 适用于 Ubuntu 1804 ---------------------------------------*/
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security multiverse

deb http://mirrors.aliyun.com/ubuntu-ports/ bionic main
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-updates main
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic universe
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-updates universe
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-security main
deb http://mirrors.aliyun.com/ubuntu-ports/ bionic-security universe
// 更新
apt update && apt upgrade

使用usb wifi组件集群,虽然两个千兆网口有些浪费,哎,说败家也不为过,主要是还是不想看见这么多网线!!!!

Nanopi R4s 基于friendlycore(采用Ubuntu1804开发)设置usb网卡静态IP方法,可参见笔者的另一篇博文:

Nanopi r4s 使用usb网卡设置静态IP:

2、软件环境部署

(1)、安装docker
(
cat <<EOF
deb [arch=arm64] https://download.docker.com/linux/ubuntu bionic stable
EOF
) > /etc/apt/sources.list.d/docker.list
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt update
apt -y install docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic
apt-mark hold docker-ce-cli
apt -y install docker-ce=5:18.09.9~3-0~ubuntu-bionic // containerd.io 自动安装
apt-mark hold docker-ce containerd.io

docker安装完成后,使用docker info 查看生成信息,着重检查一下几点:

Cgroup Driver: systemd

如果参数不对,可以使用如下程序可以对上述配置进行设置
# 创建或替换 /etc/docker/daemon.json 以启用 cgroup 的 systemd 驱动,k8s推荐使用,注意与后面的edgecore.yaml、cloudcore.yaml文件保持一致!!!!!!
$ sudo cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF
vim  /proc/cmdline   //Nanopi 默认添加位置   其实该系统安装好后自动就已添加了
添加:cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 swapaccount=1
// 配置完后重启docker
systemctl restart docker
// 注意:执行docker info无报错后发可往下执行!
(2)、mosquitto安装
// Ubuntu 1804系统直接使用如下指令即可安装
sudo apt-get install -y mosquitto

3、KubeEdge集群部署

(1)、云端Master节点部署

注意:

  1. 本方案采用的master节点物理机为树莓派4B 4G版!!!!!!
  2. 继续运行下面步骤,需要保证K8S集群已启动,并且master节点为Ready状态

关于树莓派4B组件k8s集群方案可以查看笔者的这篇博客:
树莓派4B Ubuntu1804 构建K8s技术方案

3.1.1 Golang环境部署

首先去镜像站,查找对应版本的安装包 下载对应go源码包

需要注意的是,由于Nanopi r4s 4g版采用基于rk3399处理器,其是基于arm架构的64位处理器,故需要下载arm64版本的源码包,本方案采用go1.14.4.linux-arm64.tar.gz版本!

下载完成后使用如下指令进行解包

tar -xzf  go1.14.4.linux-arm64.tar.gz   -C  /usr/local

修改环境变量

vim /etc/profile
// 在文件最后添加以下内容
export HOME=/root
export GOROOT=/usr/local/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

让环境变量生效

source /etc/profile
mkdir -p /data/gopath && cd /data/gopath
mkdir -p src pkg bin

查看是否构建成功

go version
3.1.2 下载kubeedge源码
git clone https://gitee.com/mirrors/KubeEdge.git $GOPATH/src/github.com/kubeedge/kubeedge
cd $GOPATH/src/github.com/kubeedge/kubeedge
git checkout -b v1.5.0 v1.5.0
3.1.3 云端环境配置

添加device

cd $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/devices
kubectl apply -f devices_v1alpha2_devicemodel.yaml
kubectl apply -f devices_v1alpha2_device.yaml

cd ../reliablesyncs/
kubectl apply -f cluster_objectsync_v1alpha1.yaml
kubectl apply -f objectsync_v1alpha1.yaml

编译(也可直接下载Release程序)

cd $GOPATH/src/github.com/kubeedge/kubeedge
make all WHAT=cloudcore && make all WHAT=edgecore
cd _output/local/bin/
cp cloudcore /usr/local/bin
# 注意:这里的 /usr/local/bin/ 就是到时候cloudcore.service,需修改ExecStart为真实值目录
scp edgecore root@192.168.253.21:/usr/local/bin/

配置cloudcore

mkdir -p /etc/kubeedge/config && cd /etc/kubeedge/config
cloudcore --minconfig >cloudcore.yaml
# 清除已有的密钥
kubectl delete secret casecret -nkubeedge
kubectl delete secret cloudcoresecret -nkubeedge

vim cloudcore.yaml
# 将tlsCertFile和tlsPrivateKeyFile注释,并删除/etc/kubeedge/ca 和/etc/kubeedge/cert
# 我们采用自动注册结点的方式,在添加配置modules.edged.registerNode=true
# 修改kubeConfig=正确的路径
# 修改advertiseAddress为对外暴露的ip,即master所在的IP
# 修改cloudcore.service
/**************************************************
# With --minconfig , you can easily used this configurations as reference.
# It's useful to users who are new to KubeEdge, and you can modify/create your own configs accordingly. 
# This configuration is suitable for beginners.
apiVersion: cloudcore.config.kubeedge.io/v1alpha1
kind: CloudCore
kubeAPIConfig:
  kubeConfig: /root/.kube/config
  master: ""
leaderelection:
  LeaderElect: false
  LeaseDuration: 0s
  RenewDeadline: 0s
  ResourceLock: ""
  ResourceName: ""
  ResourceNamespace: ""
  RetryPeriod: 0s
modules:
  cloudHub:
    advertiseAddress:
    - 192.168.253.8
    https:
      address: 0.0.0.0
      enable: true
      port: 10002
    nodeLimit: 1000
    tlsCAFile: /etc/kubeedge/ca/rootCA.crt
    tlsCAKeyFile: /etc/kubeedge/ca/rootCA.key
    unixsocket:
      address: unix:///var/lib/kubeedge/kubeedge.sock
      enable: true
    websocket:
      address: 0.0.0.0
      enable: true
      port: 10000
  edged:
    registerNode: true
***************************************************/
cd $GOPATH/src/github.com/kubeedge/kubeedge/build/tools
vim cloudcore.service
# 将cloudcore的路径修改为真实路径
# 即将ExecStart=/etc/kubeedge/cloudcore,改为 ExecStart=/usr/local/bin/cloudcore
cp cloudcore.service /lib/systemd/system/
systemctl daemon-reload
systemctl enable cloudcore
systemctl start cloudcore
# 同理修改edgecore.service
vim edgecore.service
# 即将ExecStart=/etc/kubeedge/edgecore,改为 ExecStart=/usr/local/bin/edgecore
scp edgecore.service root@192.168.253.21:/lib/systemd/system/
(2)、边端Edge节点部署
# 不要安装kubelet或将其关闭
mkdir -p /etc/kubeedge/config/
edgecore --minconfig > /etc/kubeedge/config/edgecore.yaml
vim /etc/kubeedge/config/edgecore.yaml
# 注释modules.edgehub.tlsCaFile,modules.edgehub.tlsCertFile,modules.edgehub.tlsPrivateKeyFile
    #tlsCaFile: /etc/kubeedge/ca/rootCA.crt
    #tlsCertFile: /etc/kubeedge/certs/server.crt
    #tlsPrivateKeyFile: /etc/kubeedge/certs/server.key
# 修改modules.edgehub.websocket.server和modules.edgehub.quic.server(没有就不改)
    httpServer: https://192.168.253.8:10002
# 修改modules.edgehub.httpServer
    websocket:
      enable: true
      handshakeTimeout: 30
      readDeadline: 15
      server: 192.168.253.8:10000
/***********************************!!!!!在云端操作  开始!!!!!**************************************/      
# cloud端操作!!!!!在云端操作!!!!!
kubectl get secret tokensecret -n kubeedge -oyaml
     /*注意,如果报错:Error from server (NotFound): namespaces "kubeedge" not found 
     	请执行:systemctl start cloudcore.service
     	并使用:systemctl status cloudcore.service,查看服务是否正常启动!
     	● cloudcore.service
		   Loaded: loaded (/lib/systemd/system/cloudcore.service; enabled; vendor preset: enabled)
		   Active: active (running) since Wed 2020-12-30 15:46:44 CST; 12s ago
		 Main PID: 15705 (cloudcore)
		    Tasks: 10 (limit: 4443)
		   CGroup: /system.slice/cloudcore.service
		           └─15705 /usr/local/bin/cloudcore
	*/ 
# 将返回值中的data.tokendata字符串复制并进行转码
echo 填入data.tokendata的数值 | base64 -d
/***********************************!!!!!在云端操作  结束!!!!!**************************************/
# 将值填入edgecore.yaml的token处
# edgecore.yaml 编辑结束

# 提前导入镜像
# arm64
docker pull kubeedge/pause-arm64:3.1
# x86_64 or amd64
docker pull kubeedge/pause:3.1
# arm
docker pull kubeedge/pause-arm:3.1
systemctl daemon-reload
systemctl enable edgecore
systemctl start edgecore

部署完成

# 在master结点查看
kubectl get no -o wide
# 均处于Ready状态

在这里插入图片描述
错误处理:

// 针对以下报错:
MemoryAccounting not enabled for pid: 8586 
CPUAccounting not enabled for pid: 7296
    
// 解决办法 
// 增加一个配置文件,明确启用Default CPUAccounting和DefaultMemory Accounting
mkdir -p /etc/systemd/system.conf.d
cat <<EOF >/etc/systemd/system.conf.d/kubernetes-accounting.conf
[Manager]
DefaultCPUAccounting=yes
DefaultMemoryAccounting=yes  
EOF
// 在边端,执行
systemctl daemon-reload
systemctl restart edgecore
// 在云端,执行
systemctl restart kubelet
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值