利用KubeEdgeA500部署边缘推理任务

目  录

1 环境介绍... 1

2 云端环境部署... 2

2.1 在master节点安装Docker和k8S (ubuntu) 2

2.1.1
安装前准备... 2

2.1.2
安装docker 和kubeadm... 3

2.1.3 配置daemon.json. 3

2.1.4 给docker配置代理... 4

2.1.5 其他配置... 4

2.1 Master节点配置... 5

2.1.1 初始化master节点... 5

2.1.2 配置k8s网络... 6

2.1.3 解除master隔离... 8

2.2 KubeEdge安装... 8

2.3 方法一:采用编译方式... 8

2.4 方法二:从库上下载的方式... 10

3 边缘端环境部署... 11

3.1 安装yum.. 11

3.2 安装Docker 12

3.3 部署edgecore. 12

3.4 安装和部署deviceplugin. 13

3.4.1 安装deviceplugin. 14

3.4.2 部署deviceplugin. 15

4 推理任务下发... 18

4.1 环境准备... 18

4.2 使用yaml跑通推理任务... 18

4.3 结果观察... 19

4.4 删除推理任务... 20

5 FAQ.. 21

5.1 kubeadm init拉取镜像失败,提示证书校验失败... 21

5.2 kubeadm init拉取镜像失败,提示超时... 22

5.3 calico一直有两个是pending状态... 23

5.4 编译keadm的时候,提示go语言版本不对,但是实际已经安装了最新版本的go. 23

5.5
keadm join的时候提示Failed to
synchronize cache for repo 'base' 24

5.6
安装mosquitto提示校验失败... 24

5.7
获取kubeedge的时候,提示网址不可信... 26

6 附录... 26

6.1 参考链接... 26



1 环境介绍

表1-1 环境版本

序号

资源项

资源名称

1

云端Master

2288H
V5 X86

2

边缘端

A500
3000

3

云端操作系统

Ubuntu
18.04.5

4

边缘端操作系统

Euler2.8

5

边缘端CANN软件版本

20.1

6

kubernetes

1.17.3

7

KubeEdge版本

1.7.2

2 云端环境部署

2.1 在master节点安装Docker和k8S (ubuntu)

2.1.1 安装前准备

1.安装需要的包

sudo apt install
apt-transport-https ca-certificates software-properties-common curl

2.添加 谷歌GPG 密钥

本地使用安全PC的谷歌浏览器(proxyhk.huawei.com:8080 代理),直接访问下面的网址,下载apt-key.gpg文件,https://packages.cloud.google.com/apt/doc/apt-key.gpg,并将apt-key.gpg文件上传到master节点的任意文件夹,执行apt-key add apt-key.gpg

注:若无法下载,也可以从(https://github.com/liaohang122/test)获取。

3.配置Source list,可以使用阿里的源

cat /etc/apt/sources.list

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe
multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted
universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted
universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted
universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted
universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted
universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main
restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted
universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main
restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main
restricted universe multiverse

#deb http://repo.huaweicloud.com/ubuntu/ bionic main multiverse
restricted universe

#deb http://repo.huaweicloud.com/ubuntu/ bionic-backports main
multiverse restricted universe

#deb http://repo.huaweicloud.com/ubuntu/ bionic-proposed main multiverse
restricted universe

#deb http://repo.huaweicloud.com/ubuntu/ bionic-security main multiverse
restricted universe

#deb http://repo.huaweicloud.com/ubuntu/ bionic-updates main multiverse
restricted universe

#deb-src http://repo.huaweicloud.com/ubuntu/ bionic main multiverse
restricted universe

#deb-src http://repo.huaweicloud.com/ubuntu/ bionic-backports main
multiverse restricted universe

#deb-src http://repo.huaweicloud.com/ubuntu/ bionic-proposed main
multiverse restricted universe

#deb-src http://repo.huaweicloud.com/ubuntu/ bionic-security main
multiverse restricted universe

#deb-src http://repo.huaweicloud.com/ubuntu/ bionic-updates main
multiverse restricted universe

kubeEdge安装使用中科大的镜像源

echo "deb http://mirrors.ustc.edu.cn/kubernetes/apt
kubernetes-xenial main" \

> /etc/apt/sources.list.d/kubernetes.list

4.配置外网代理

export http_proxy=http://username:passwd@proxyhk.huawei.com:8080

export https_proxy=http://
username:passwd @proxyhk.huawei.com:8080

export ftp_proxy=http://
username:passwd@proxyhk.huawei.com:8080

export no_proxy="10.71.xx.xx,127.0.0.1,.huawei.com,localhost,local,.local"

注意:本地节点的IP地址要配置到no_proxy中,否则后面kubeadm init的时候会出现错误。

2.1.2 安装docker 和kubeadm

apt-get update

apt-get install -y docker.io

apt-get  install -y kubelet=1.21.3-00 kubeadm=1.21.3-00
kubectl=1.21.3-00 --allow-downgrades

在上述安装 kubeadm 的过程中,docker
和kubeadm、 kubelet、kubectl 这几个二进制文件都会被自动安装好,安装kubeadm的时候,最好指定版本安装,本次是以1.17.3为例。安装前可以使用下面的命令查看可以安装的版本好:

apt-cache madison kubectl| grep
1.17

安装好之后,可以通过kubeadm version 查看版本号。

设置开机自启动并启动 Docker(安装成功后默认已设置并启动,可忽略)

systemctl enable docker

 systemctl start docker

2.1.3 配置daemon.json

注意:要把红色部分加入进去,否则下载镜像的时候,证书校验一般校验都无法通过。

vim /etc/docker/daemon.json

{


"registry-mirrors": [

"https://dockerhub.azk8s.cn",

"https://docker.mirrors.ustc.edu.cn",

"http://hub-mirror.c.163.com" ,

"https://k8s.gcr.io",

"https://github-releases.githubusercontent.com"

],

"insecure-registries": [

"rnd-dockerhub.huawei.com",

"docker-hub.tools.huawei.com",

"registry.me:5000",

"http://docker.mirrors.ustc.edu.cn",

"https://k8s.gcr.io",

"https://github-releases.githubusercontent.com"

],

"exec-opts": [

"native.cgroupdriver=systemd"

]

}

2.1.4 给docker配置代理

mkdir -p /etc/systemd/system/docker.service.d

vim /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]

Environment="HTTP_PROXY=http://username:passwd@proxyhk.huawei.com:8080"


Environment="HTTPS_PROXY=http:// username:passwd@proxyhk.huawei.com:8080"

systemctl daemon-reload

systemctl restart docker

查看docker代理

systemctl show --property=Environment docker

查看docker配置

docker info

2.1.5 其他配置

步骤1 关闭虚拟内存和防火墙。

l  
关闭虚拟内存

内存关闭

swapoff -a

修改配置:

关闭fstab swap配置,修改/etc/fstab,注释swap文件系统挂载配置。

swapoff -a

重启操作系统使配置生效

l  
关闭防火墙

编辑文件/etc/sysconfig/selinux和/etc/selinux/config

修改参数SELINUX的值为disabled(SELINUX=disabled)

systemctl
stop firewalld.service

systemctl
disable firewalld.service

firewall-cmd
–state

Ubuntu关闭防火墙命令为:

ufw disable

允许包转发

vi
/etc/sysctl.d/k8s.conf  添加如下行

net.bridge.bridge-nf-call-ip6tables
= 1

net.bridge.bridge-nf-call-iptables
= 1

执行modprobe br_netfilter

步骤2修改主机名,防止与集群中其他机器同名。

hostnamectl
set-hostname train0    train0为主机名

同时在/etc/hosts添加如下行

Source
/etc/hosts

安装过程中遇到的一些问题请参考5 FAQ

2.1 Master节点配置

2.1.1 初始化master节点

执行kubeadm init ,可以指定版本 kubeadm
init

kubeadm init --kubernetes-version=v1.17.3
--pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=$masterIP

masterIP:用本机IP替换。

参数中192.168.0.0/16跟后续的Pod network add-on相关,这里我们选择的是Calico,详细信息可以参见官方文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

关于kubeadm init时的参数说明同样可参考上述链接。

----结束

2.1.2 配置k8s网络

步骤 1     配置k8s apiserver访问公钥。

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config

步骤 2     安装网络插件,查看node信息。

kubectl get node

输出STATUS为NotReady,原因是没有安装网络插件。

步骤 3     部署calico插件。

  1. 离线部署

l  
X86架构

docker
load -i cni.tar.gz

docker
load -i kube-controllers.tar.gz

docker
load -i node.tar.gz

docker
load -i pod2daemon-flexvol.tar.gz

kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/(手动下好再装此步必须

注意一下这里calico的版本号与k8s有关联关系,K8S1.22.0的版本号要配套3.20的calico.yaml

l  
ARM架构

待补充

  1. 在线部署

kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml(手动下好再装)

当发现所有Pod都docker已经变为Running状态,表示master节点已经安装成功。

kubectl get pods -n kube-system

这里calico.yaml需要从镜像仓下载,可能由于下载速度慢,导致查看pod时遇到ImagePullBackOff的问题,可以尝试手动拉取镜像。

docker pull calico/cni:v3.20.0

docker pull calico/node:v3.20.0

docker pull calico/kube-controllers:v3.20.0

docker pull calico/pod2daemon-flexvol:v3.20.0

如果calico还是跑不起来,可以kubectl describe 查看一下状态。

这里是因为使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,也就是说Master Node不参与工作负载,需要解除master节点的隔离。

另外,需要检查一下calico.yaml的版本是否正确,K8S 1.17.3版本,最好配套比较新的版本,可以从

----结束

2.1.3 解除master隔离

默认情况下,集群中创建的所有资源(如Pods)并不会被部署到master节点上,但是在我们的开发或者测试环境中,经常只有一个master节点或者并不想浪费master节点的可用空间,这时可以使用如下命令解除master隔离的限制。

kubectl
taint nodes --all node-role.kubernetes.io/master-  

验证是否成功:

kubectl
get pods -n kube-system

所有pod都应该能跑起来了,查看master节点

kubectl
get node

2.2 KubeEdge安装

Kubeedge安装方法有两种,一种是下载最新的代码编译出cloudcore和edgecore,另外一种是直接下载社区上的发布版本。

2.3 方法一:采用编译方式

1)下载golang

[root@ke-cloud ~]# wget https://golang.google.cn/dl/go1.14.4.linux-arm64.tar.gz

[root@ke-cloud ~]# tar -zxvf go1.14.4.linux-arm64.tar.gz -C /usr/local

2)配置golang环境

vim /etc/profile

文件末尾添加:

# golang env

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

3)下载KubeEdge源码,并编译cloudcore、edgecore

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

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

make all WHAT=keadm

说明:编译后的二进制文件在./_output/local/bin下,单独编译cloudcore与edgecore的方式:make all WHAT=cloudcore && make all WHAT=edgecore

注意:这里编译出来的kubeadm和edgecore版本,都是x86版本,传到A500上是不能使用的,因此可以考虑在arm服务器上编译,或者直接到库上获取发布版本。

cp cloudcore /usr/local/bin

# 将edgecore拷贝至边缘端

scp edgecore root@edgeip:/usr/local/bin/

4)添加设备

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

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

kubectl apply -f $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/reliablesyncs/cluster_objectsync_v1alpha1.yaml

kubectl apply -f $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/reliablesyncs/objectsync_v1alpha1.yaml

5)创建证书文件

# 清除已有的密钥

kubectl delete secret casecret
–nkubeedge

kubectl delete secret cloudcoresecret
-nkubeedge [y1]

生成证书文,存放在/etc/kubeedge/目录下ca、certs,将其传到edge端相同目录(提前创建好)

mkdir -p /etc/kubeedge/config

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

6)部署cloudcore服务

cd /etc/kubeedge/config (yaml必须放在此目录,否则服务起不来)

cloudcore --minconfig >cloudcore.yaml 创建配置文件

进入 cloudcore.service目录

cd $GOPATH/src/github.com/kubeedge/kubeedge/build/tools

vim cloudcore.service

# 将cloudcore的路径修改为真实路径

cp cloudcore.service /lib/systemd/system/

systemctl enable cloudcore

systemctl start cloudcore

systemctl status cloudcore

如果服务启动失败,单独执行cloudcore --config cloudcore.yaml查看具体日志

# 将edgecore.service传至边缘端

scp edgecore.service root@192.168.2.3:/lib/systemd/system/

2.4
方法二:从库上下载的方式

可以直接到发布库上获取对应架构版本的keadm,cloudcore,edgecore版本,

https://github.com/kubeedge/kubeedge/releases/tag/v1.7.2

除了不用编译,其他操作跟方法一是一致的。

3 边缘端环境部署

3.1
安装yum

参考如下链接操作即可:

Atlas500
的EulerOS安装yum (http://3ms.huawei.com/km/blogs/details/11490285)

安装完成后,需要部署epel的镜像仓位置,用你我司的镜像仓就可以了。参见附件:

修改如下两个文件,如果没有就新建文件

/etc/yum.repos.d/EulerOS.repo

cat EulerOS.repo

[base]

name=EulerOS-2.0SP8 base

baseurl=http://repo.huaweicloud.com/euler/2.8/os/aarch64/

enabled=1

gpgcheck=1

gpgkey=http://repo.huaweicloud.com/euler/2.8/os/RPM-GPG-KEY-EulerOS

epel.repo

[epel]

name=Extra Packages for Enterprise Linux 7 - $basearch

baseurl=http://mirrors.tools.huawei.com/epel/7/$basearch

#metalink=https://mirrors.fedoraproject.org/#metalink?repo=epel-7&arch=$basearch&infra=$infra&content=$contentdir

failovermethod=priority

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]

name=Extra Packages for Enterprise Linux 7 - $basearch - Debug

baseurl=https://mirrors.tools.huawei.com/epel/7/$basearch/debug

#metalink=https://mirrors.fedoraproject.org/#metalink?repo=epel-debug-7&arch=$basearch&infra=$infra&content=$contentdir

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=1

[epel-source]

name=Extra Packages for Enterprise Linux 7 - $basearch - Source

baseurl=https://mirrors.tools.huawei.com/epel/7/SRPMS

#metalink=https://mirrors.fedoraproject.org/#metalink?repo=epel-source-7&arch=$basearch&infra=$infra&content=$contentdir

failovermethod=priority

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

gpgcheck=1

3.2 安装Docker

Atlas500自带docker安装,无需安装

3.3 部署edgecore

1)修改主机名

主机名必须为小写字母,从arm环境获取hostnamectl工具(which hostnamectl)

hostnamectl set-hostname euler27

如果没有这个工具也可以直接修改,网上有很多介绍

1、 修改/etc/sysconfig/network中的hostname

2、  修改/etc/hosts文件(IP与主机名对应,DNS解析的时候有用)

3、  修改/etc/hostname

2)部署kubeEdge镜像

把前面下载的keadm和edgecore分别解压,并把对应的执行文件放到如下目录

cp keadm /usr/bin

cp keadm /usr/local/bin

3)部署edgecore服务

mkdir -p /etc/kubeedge/config && cd /etc/kubeedge/config

edgecore --minconfig > edgecore.yaml

在cloud端执行keadm gettoken获取token

然后在边缘端使用keadm来初始,命令如下:

keadm join --cloudcore-ipport= EDGE_IP:10000 --kubeedge-version=1.7.2  --token=480cba67b95454aacface05d4f612d2c5a9748d2772356f170fcc906e7948ff0.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzEzMjEwMzh9.ff5uFhhG6stg-2hqlbzW1SyCaFRJLD5xguAHKGrG-6Y

EDGE_IP就是cloud端的IP地址。

边缘节点加入后,能够在master上看到节点情况,如果状态为ready,说明加入正常

一般来说,在过程中都会出现一些问题,需要注意以下问题:

1、  需要配置proxy,proxy配置方法参考2.1.1,这样可以直接拉取镜像。

2、  缺少一些基础库,这种情况可以直接通过yum来安装,比如epel

3、  经常出现的一些问题如FAQ 5.6~8,主要还是代理和证书校验的问题,这些问题解决后,一般可以拉取成功。

3.4 安装和部署deviceplugin

Deviceplugin是昇腾提供的插件,主要用于向K8S
master上报NPU相关的信息,如果没有这插件,边缘设备的NPU就无法被调度到。

3.4.1 安装deviceplugin

1、下载相关应用并制作容器镜像

边缘部署的时候需要安装plugin,步骤是先下载plugin的应用程序,制作成容器镜像,并使用K8S进行部署。由于A500是arm架构,因此要下载arm版本的程序,并在a500上制作镜像。然后通过master节点部署。

外部用户参考这个地方进行下载,需要进行权限申请,相对比较麻烦。https://www.hiascend.com/software/mindx-dl/download

内部用户可以直接在云龙上下载:https://cmc-szv.clouddragon.huawei.com/cmcversion/index/componentVersionView?deltaId=4744190415405184&isSelect=Software&url_data=MindX%20DL

将Ascend-mindxdl-device-plugin_2.0.2_linux-aarch64.zip解压A500的目录中,使用下面的命令制作容器

docker build -t
ascend-k8sdeviceplugin:v2.0.2 .[y2]

制作容器的时候,容器镜像的名称,需要跟device-plugin-310-v2.0.2.yaml中保持一致,否则部署的时候会出问题

制作镜像过程如下:

docker build -t
ascend-k8sdeviceplugin:v2.0.2 . (注意后面有个点点)

注意这个build操作,要在A500或者ARM环境上操作,X86的服务器上build出来,架构不一致无法使用。

>/etc/profile"echo'source/etc/profile'>>一/.bashr.
一>Runninginias4b737edlb
Removingintermediatecontainerla84b737edlb
-一》93ce78c43b07
Successfullybuilt93ce78c43b07
Successfullytaggedascend一kssdeviceplugin:vZ.0.2" style="width:432.75pt;height:189pt;visibility:visible;mso-wrap-style:square">

docker images

如果是本节点使用,这个镜像就可以使用了,如果是还有其他节点需要使用,可以使用dokcer save命令,将镜像保存出来,可以在其他环境使用

docker save -o Ascend-device-plugin_2.0.2_linux-aarch64.tar.gz
ascend-k8sdeviceplugin:v2.0.2

3.4.2 部署deviceplugin

部署推理任务参考

https://support.huawei.com/enterprise/zh/doc/EDOC1100207064/3a1c6839

推理任务部署的yaml定义

https://support.huawei.com/enterprise/zh/doc/EDOC1100207064?section=j01d#ZH-CN_TOPIC_0000001144249924

由于A500的edgecore中有关于npu的上报开关,因此需要打开一下。

vi /etc/kubeedge/config/edgecore.yaml,把devicePluginEnabled这个地方改成true

systemctl restart edgecore

systemctl status edgecore

如果edgecore服务启动失败,可以执行edgecore --config edgecore.yaml查看启动日志

在cloud侧,对边缘节点打标签

参考链接中的方法,对master和edge节点打标签,https://support.huawei.com/enterprise/zh/doc/EDOC1100207064/ccf79def

标签序号

命令

说明

1

kubectl label nodes主机名称 node-role.kubernetes.io/worker=worker

该命令为识别K8s的计算节点,其中“主机名称”为所有计算节点名。

3

kubectl label nodes 主机名称 accelerator=huawei-Ascend310

该命令为识别昇腾310 AI处理器节点,其中“主机名称”为所有推理节点名。

5

kubectl label nodes 主机名称 masterselector=dls-master-node

该命令为识别MindX DL的管理节点,其中“主机名称”为管理节点名。

6

kubectl label nodes主机名称 workerselector=dls-worker-node

该命令为识别MindX DL的计算节点,其中“主机名称”为所有计算节点名。

7

kubectl label nodes 主机名称 host-arch=huawei-x86

该命令为识别x86架构的节点,其中“主机名称”为所有x86架构的计算节点名。

8

kubectl label nodes 主机名称 host-arch=huawei-arm

该命令为识别ARM架构的节点,其中“主机名称”为所有ARM架构的计算节点名。

对于A500,需要修改device-plugin-310-v2.0.2.yaml中如下红色的部分,把hiai-driver的路径修改正确,并上传到cloud侧的任何目录

volumes:

- name: device-plugin

hostPath:

path: /var/lib/kubelet/device-plugins

- name: hiai-driver

hostPath:

path: /home/data/miniD/driver

- name: log-path

hostPath:

path: /var/log/mindx-dl/devicePlugin

type: Directory

- name: localtime

在cloud侧执行命令,部署deviceplugin

kubectl apply -f device-plugin-310-v2.0.2.yaml

然后再检查边缘侧npu资源能否获取到,在Cloud端执行

kubectl get node

kubectl describe node euler27

4 推理任务下发

4.1 环境准备

安装驱动、固件

按照CANN用户指南手动制作docker镜像,如果有现成的,可以直接导入镜像。

完成后使用docker images查看是否存在

4.2 使用yaml跑通推理任务

编写yaml

apiVersion:
batch/v1

kind:
Job

metadata:

name: ke-infer

#namespace: kube-system

spec:

template:

spec:

nodeSelector:

accelerator: huawei-Ascend310

containers:

- image: ubuntu-a500:v1

imagePullPolicy: IfNotPresent

name: ubuntu-a500

command:

- "/bin/bash"

- "-c"

- "cd /home/test; cd out; ./main"

#args: [ "while true; do sleep 30000;
done;"  ]

resources:

resources:

requests:

huawei.com/Ascend310: 1

limits:

huawei.com/Ascend310: 1

volumeMounts:

- name: ascend-dirver

mountPath: /home/data/miniD/driver

- name: slog

mountPath: /var/log/npu/conf/slog/

- name: test

mountPath: /home/test

- name: npu-smi

mountPath: /usr/local/bin/npu-smi

- name: timezone

mountPath: /etc/timezone

- name: localtime

mountPath: /etc/localtime

volumes:

- name: ascend-dirver

hostPath:

path: /home/data/miniD/driver

- name: slog

hostPath:

path: /var/log/npu/conf/slog/

- name: test

hostPath:

path: /etc/kubeedge/acl_resnet50_sample/

- name: npu-smi

hostPath:

path: /usr/local/bin/npu-smi

- name: timezone

hostPath:

path: /etc/timezone

- name: localtime

hostPath:

path: /etc/localtime

restartPolicy: OnFailure

启动任务,cloud端执行

kubectl
apply -f infer.yaml

查看pod

4.3 结果观察

边缘端查看container id,使用docker ps -a

观察推理输出:docker logs -f d44c4be8a32d 

4.4 删除推理任务

kubectl
delete -f infer.yaml

5 FAQ

5.1 kubeadm init拉取镜像失败,提示证书校验失败

现象:

解决办法:

在配置的时候要把https://k8s.gcr.io加入到免认证的网站列表,否则就需要去配置证书,我们下载的时候可以配置诚免校验。参考: http://3ms.huawei.com/km/blogs/details/6314139

cat daemon.json

{

"registry-mirrors":
[

"https://dockerhub.azk8s.cn",

"https://docker.mirrors.ustc.edu.cn",

"http://hub-mirror.c.163.com",

"http://mirrors.aliyun.com",

"https://k8s.gcr.io"

],

"insecure-registries":
[

"rnd-dockerhub.huawei.com",

"docker-hub.tools.huawei.com",

"registry.me:5000",

"http://docker.mirrors.ustc.edu.cn" ,

"http://mirrors.aliyun.com",

"https://k8s.gcr.io"

5.2 kubeadm init拉取镜像失败,提示超时

kubeadm init 
--kubernetes-version=1.17.3 --apiserver-advertise-address=10.71.233.24 --pod-network-cidr=192.168.0.0/16
的时候提示超时

解决办法:

export no_proxy="10.71.xx.xx,127.0.0.1,.huawei.com,localhost,local,.local"

注意:本地节点的IP地址要配置到no_proxy中,否则后面kubeadm init的时候会出现错误。

5.3 calico一直有两个是pending状态

解决办法:

calico.yaml的版本不对,要更新到320版本以上

5.4
编译keadm的时候,提示go语言版本不对,但是实际已经安装了最新版本的go

解决办法:主要原因是usr/bin目录下的文件链接没修改过来,还一直链接到旧版本。

root@ubuntu:/usr/bin# ls -ll |grep go

-rwxr-xr-x 1 root   root     
5730672 Feb 12  2021 aarch64-linux-gnu-ld.gold

lrwxrwxrwx 1 root   root           21 Feb 28  2018 go -> ../lib/go-1.10/bin/go

-rwxr-xr-x 2 root   root     
3454104 Aug  5 05:18 gofmt

lrwxrwxrwx 1 root   root           24 Feb 28  2018 gofmt~ -> ../lib/go-1.10/bin/gofmt

lrwxrwxrwx 1 root   root           21 Feb 12  2021 gold -> x86_64-linux-gnu-gold

lrwxrwxrwx 1 root   root           24 Feb 12  2021 ld.gold -> x86_64-linux-gnu-ld.gold

lrwxrwxrwx 1 root   root           24 Feb 12  2021 x86_64-linux-gnu-gold -> x86_64-linux-gnu-ld.gold

-rwxr-xr-x 1 root   root     
3111952 Feb 12  2021 x86_64-linux-gnu-ld.gold

把之前的链接删掉,然后重新用下面的命令就好了。

ln -s /usr/local/go/bin/* /usr/bin/

5.5
keadm join的时候提示Failed to synchronize cache for repo 'base'

keadm join --cloudcore-ipport=<ip:port address>
--edgenode-name=<unique string as edge identifier>

- For
this command --cloudcore-ipport flag is a required option

- This
command will download and install the default version of pre-requisites and KubeEdge

keadm join --cloudcore-ipport=10.20.30.40:10000
--edgenode-name=testing123 --kubeedge-version=1.5.0

Flags:

--certPath
string                  The certPath used
by edgecore, the default value is /etc/kubeedge/certs (default "/etc/kubeedge/certs")

-s, --certport
string                  The port where to
apply for the edge certificate

--cgroupdriver
string              CGroupDriver that uses
to manipulate cgroups on the host (cgroupfs or systemd), the default value is cgroupfs

-e, --cloudcore-ipport
string          IP:Port address of KubeEdge
CloudCore

-i, --edgenode-name
string             KubeEdge Node unique identification
string, If flag not used then the command will generate a unique id on its own

-h, --help                             help for join

--kubeedge-version
string          Use this key to download and
use the required KubeEdge version

-p, --remote-runtime-endpoint
string   KubeEdge Edge Node RemoteRuntimeEndpoint
string, If flag not set, it will use unix:///var/run/dockershim.sock

-r, --runtimetype
string               Container runtime type

--tarballpath
string               Use this key to set the
temp directory path for KubeEdge tarball, if not exist, download it

-t, --token
string                     Used for edge to
apply for the certificate

F0910 11:57:18.129816   31335 keadm.go:27] failed to exec 'bash -c yum
-y install mosquitto', err: Failed to synchronize cache for repo 'base', ignoring
this repo.

Failed to synchronize cache for repo 'epel', ignoring
this repo.

Error: Unable to find a match

DNS

配置一下下面两个路由:

cat /etc/hosts

127.0.0.1 euler27   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1      
euler27   localhost localhost.localdomain
localhost6 localhost6.localdomain6

172.18.100.92 proxyhk.huawei.com

7.223.219.40 
mirrors.tools.huawei.com

5.6 安装mosquitto提示校验失败

yum -y install mosquitto

Extra Packages for Enterprise Linux 7 - aarch64

EulerOS-2.0SP8 base                                                                                                                                                           
7.8 kB/s | 1.7 kB     00:00

The downloaded packages were saved in cache until
the next successful transaction.

You can remove cached packages by executing 'dnf
clean packages'.

Traceback (most recent call last):

File "/usr/bin/yum",
line 58, in <module>

main.user_main(sys.argv[1:],
exit_code=True)

File "/usr/lib/python3.7/site-packages/dnf/cli/main.py",
line 179, in user_main

errcode
= main(args)

File "/usr/lib/python3.7/site-packages/dnf/cli/main.py",
line 64, in main

return
_main(base, args, cli_class, option_parser_class)

File "/usr/lib/python3.7/site-packages/dnf/cli/main.py",
line 99, in _main

return
cli_run(cli, base)

File "/usr/lib/python3.7/site-packages/dnf/cli/main.py",
line 123, in cli_run

ret
= resolving(cli, base)

File "/usr/lib/python3.7/site-packages/dnf/cli/main.py",
line 154, in resolving

base.do_transaction(display=displays)

File "/usr/lib/python3.7/site-packages/dnf/cli/cli.py",
line 227, in do_transaction

self.gpgsigcheck(install_pkgs)

File "/usr/lib/python3.7/site-packages/dnf/cli/cli.py",
line 279, in gpgsigcheck

self._get_key_for_package(po,
fn)

File "/usr/lib/python3.7/site-packages/dnf/base.py",
line 2265, in _get_key_for_package

keys
= dnf.crypto.retrieve(keyurl, repo)

File "/usr/lib/python3.7/site-packages/dnf/crypto.py",
line 177, in retrieve

keyinfos
= rawkey2infos(handle)

File "/usr/lib/python3.7/site-packages/dnf/crypto.py",
line 158, in rawkey2infos

with
pubring_dir(pb_dir), Context() as ctx:

File "/usr/lib64/python3.7/site-packages/gpg/core.py",
line 206, in __init__

self.protocol
= protocol

File "/usr/lib64/python3.7/site-packages/gpg/core.py",
line 161, in __setattr__

super(GpgmeWrapper,
self).__setattr__(key, value)

File "/usr/lib64/python3.7/site-packages/gpg/core.py",
line 885, in protocol

errorcheck(gpgme.gpgme_engine_check_version(value))

File "/usr/lib64/python3.7/site-packages/gpg/errors.py",
line 120, in errorcheck

raise
GPGMEError(retval, extradata)

gpg.errors.GPGMEError: GPGME: Invalid crypto engine

File "/usr/lib64/python3.7/site-packages/gpg/errors.py",
line 120, in errorcheck

raise
GPGMEError(retval, extradata)

gpg.errors.GPGMEError: GPGME: Invalid crypto engine

解决办法:

在安装的时候加上--nogpgcheck

euler27:/var/lib/docker/zyh/rpm2 # yum -y install
mosquitto  --nogpgcheck

5.7 获取kubeedge的时候,提示网址不可信

wget https://github.com/kubeedge/kubeedge/releases/download/v1.7.2/checksum_kubeedge-v1.7.2-linux-arm64.tar.gz.txt

--2021-09-10 12:50:23--  https://github.com/kubeedge/kubeedge/releases/download/v1.7.2/checksum_kubeedge-v1.7.2-linux-arm64.tar.gz.txt

Resolving proxyhk.huawei.com
(proxyhk.huawei.com)... 172.18.100.92

Connecting to proxyhk.huawei.com
(proxyhk.huawei.com)|172.18.100.92|:8080... connected.

ERROR: The certificate
of ‘github.com’ is not trusted.

ERROR: The certificate
of ‘github.com’ hasn't got a known issuer.

解决办法:加上--no-check-certificate选项

wget https://github.com/kubeedge/kubeedge/releases/download/v1.7.2/checksum_kubeedge-v1.7.2-linux-arm64.tar.gz.txt --no-check-certificate

6 附录

6.1 参考链接

https://docs.kubeedge.io/en/v1.5.0/setup/local.html

https://github.com/kubeedge/kubeedge/tree/master

https://blog.csdn.net/qq_24489251/article/details/108775479

http://3ms.huawei.com/km/blogs/details/8578357


[y1]无秘钥

[y2]需要配置docker代理,密码不支持特殊字符转义,建议改为下划线_。

利用KubeEdge在A500部署边缘推理任务的更多相关文章

  1. CentOS 6.7下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器

    一.简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取 ...

  2. CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器

    一.简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取 ...

  3. 烂泥:KVM利用LVM快照快速部署虚拟机

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章介绍了有关KVM利用LVM快照备份和恢复虚拟机的功能,这篇文章我们来介绍,如何利用LVM快照功能为KVM快速部署虚拟机. 部署虚拟机需要以下几 ...

  4. 如何优雅的利用Windows服务来部署ASP.NET Core程序

    上一篇文章中我给大家讲述了五种部署ASP.NET Core网站的方法,其中有一种方式是通过Windows服务来进行部署,这样既可以做到开启自启动,又不会因为iis的反向代理而损失部分性能.但是美中不足 ...

  5. 利用shell编程,部署项目到服务器

    现在在前后端分离的开发形式中,每次前端将VUE项目打包之后,需要后端程序员部署到服务器上.这过程为何没有用git,因为每次vue打包后的文件都不相同与前一次打包,git为何的话,会包含过大迭代版本,同 ...

  6. 4. 利用MySQL Shell安装部署MGR集群 | 深入浅出MGR

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 安装准备 2. 利用MySQL Shell构建MGR集群 3. MySQL Shell接管现存的MGR集群 4 ...

  7. 利用Oracle VM VirtualBox部署自己的owncloud存储服务器

    最近在弄文档方面的工作,所以想找个能够自动备份且带历史版本的网盘,找了很久没找到,所以决定自己部署一个私人服务器. 找了很久.试了很久终于确定owncloud能够满足自己的要求,而且还是开源免费的. ...

  8. IntelliJ IDEA 14 利用JRebel实现热部署 二

    前言:今天下午和一个qq群里讨论JRebel时,忽然得到“自动部署”的奥秘--真有听君一席话,胜读十年书的感悟. 这是此群友的热部署博客:http://blog.csdn.net/martinkey/ ...

  9. 如何利用VS2010安装和部署应用程序

    转自:http://jingyan.baidu.com/article/4b52d70255d7f0fc5d774b4d.html 1.假设你当前的winform已经okay了 2.解决方案中新建&q ...

  10. springboot项目利用devtools实现热部署,改动代码自动生效

    一.前言 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后 ...

随机推荐

  1. KingbaseES V8R6集群维护案例之---停用集群node_export进程

    案例说明: 在KingbaseES V8R6集群启动时,会启动node_exporter进程,此进程主要用于向kmonitor监控服务输出节点状态信息.在系统安全漏洞扫描中,提示出现以下安全漏洞: 对 ...

  2. spark 写入数据到Geomesa(Hbase)

    package com.grady.geomesa import org.apache.spark.sql.jts.PointUDT import org.apache.spark.sql.types ...

  3. spring native 初体验实现 小米控制美的空调

    目前关于 spring native 分享的文章还比较少 写这篇文章的主要目前是分享一下自己写的一个 小米控制美的空调 的程序 集成 spring native 过程中碰到的一些问题和解决方法 先放地 ...

  4. Exchange 2019中启用自动转发到外部域

    今天遇到一个用户反映自动转发的邮件规则没有生效.检查了一下,邮件规则配置没有问题.用户邮箱也能正常收到邮件,但是就是没有转发出去.仔细检查邮件规则,转发的收件人是外部邮箱.Exchange出于安全考虑 ...

  5. 使用 Loki 进行日志报警(一)

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492352&idx=1&sn=9c0cc7927b ...

  6. Elasticsearch 快照生命周期管理 (SLM) 实战指南

    文章转载自:https://mp.weixin.qq.com/s/PSfgPJc4dKN2pOZd0Y02wA 1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群 ...

  7. Docker 部署 RocketMQ 双主双从模式( 版本v4.7.0)

    文章转载自:http://www.mydlq.club/article/96/ 系统环境: 系统版本:CentOS 7.8 RocketMQ 版本:4.7.0 Docker 版本:19.03.13 一 ...

  8. 关于使用kuboard安装其自带的监控应用授权普通用户使用

    官方文档地址:https://www.kuboard.cn/guide/example/monitor-v2.html#授权用户访问套件

  9. logstash知识点

    Logstash是位于Data和Elasticsearch之间的一个中间件.Logstash是一个功能强大的工具,可与各种部署集成. 它提供了大量插件. 它从数据源实时地把数据进行采集,可帮助您解析, ...

  10. 解决inode满

    登陆服务器运行df -i 然后运行 for i in /*; do echo $i; find $i |wc -l|sort -nr; done 看看每个文件夹下面的数量 最后发现是/var/spoo ...