利用KubeEdge在A500部署边缘推理任务

利用KubeEdge在A500部署边缘推理任务

目 录

  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
  1. 边缘端环境部署... 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
  1. 推理任务下发... 18
  • 4.1 环境准备... 18
  • 4.2 使用yaml跑通推理任务... 18
  • 4.3 结果观察... 19
  • 4.4 删除推理任务... 20
  1. 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
  1. 附录... 26
  • 6.1 参考链接... 26

1 环境介绍

表1-1 环境版本

序号

资源项

资源名称

  1. 云端Master

2288H V5 X86

  1. 边缘端

A500 3000

  1. 云端操作系统

Ubuntu 18.04.5

  1. 边缘端操作系统

Euler2.8

  1. 边缘端CANN软件版本

20.1

  1. kubernetes

1.17.3

  1. 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
  1. 添加 谷歌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)获取。
  1. 配置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
  1. 配置外网代理
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插件。

离线部署

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架构

待补充

在线部署

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://xxx.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 DL

将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的计算节点,其中“主机名称”为所有计算节点名。

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

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

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

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

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

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

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

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

  1. 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://xxx.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

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://xxx.com/km/blogs/details/8578357


   

 [y1]无秘钥

 [y2]需要配置docker代理,密码不支持特殊字符转义,建议改为下划线_。
posted @ 2022-06-10 18:22  易先讯  阅读(808)  评论(4编辑  收藏  举报