利用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
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 |
2 |
边缘端 |
A500 |
3 |
云端操作系统 |
Ubuntu |
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 deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main #deb http://repo.huaweicloud.com/ubuntu/ bionic main multiverse #deb http://repo.huaweicloud.com/ubuntu/ bionic-backports main #deb http://repo.huaweicloud.com/ubuntu/ bionic-proposed main multiverse #deb http://repo.huaweicloud.com/ubuntu/ bionic-security main multiverse #deb http://repo.huaweicloud.com/ubuntu/ bionic-updates main multiverse #deb-src http://repo.huaweicloud.com/ubuntu/ bionic main multiverse #deb-src http://repo.huaweicloud.com/ubuntu/ bionic-backports main #deb-src http://repo.huaweicloud.com/ubuntu/ bionic-proposed main #deb-src http://repo.huaweicloud.com/ubuntu/ bionic-security main #deb-src http://repo.huaweicloud.com/ubuntu/ bionic-updates main |
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插件。
- 离线部署
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://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
将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定义
由于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://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
],
"insecure-registries":
[
"rnd-dockerhub.huawei.com",
"docker-hub.tools.huawei.com",
"registry.me:5000",
"http://docker.mirrors.ustc.edu.cn" ,
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的时候,提示网址不可信
--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
利用KubeEdge在A500部署边缘推理任务的更多相关文章
- CentOS 6.7下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器
一.简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取 ...
- CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器
一.简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取 ...
- 烂泥:KVM利用LVM快照快速部署虚拟机
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章介绍了有关KVM利用LVM快照备份和恢复虚拟机的功能,这篇文章我们来介绍,如何利用LVM快照功能为KVM快速部署虚拟机. 部署虚拟机需要以下几 ...
- 如何优雅的利用Windows服务来部署ASP.NET Core程序
上一篇文章中我给大家讲述了五种部署ASP.NET Core网站的方法,其中有一种方式是通过Windows服务来进行部署,这样既可以做到开启自启动,又不会因为iis的反向代理而损失部分性能.但是美中不足 ...
- 利用shell编程,部署项目到服务器
现在在前后端分离的开发形式中,每次前端将VUE项目打包之后,需要后端程序员部署到服务器上.这过程为何没有用git,因为每次vue打包后的文件都不相同与前一次打包,git为何的话,会包含过大迭代版本,同 ...
- 4. 利用MySQL Shell安装部署MGR集群 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 安装准备 2. 利用MySQL Shell构建MGR集群 3. MySQL Shell接管现存的MGR集群 4 ...
- 利用Oracle VM VirtualBox部署自己的owncloud存储服务器
最近在弄文档方面的工作,所以想找个能够自动备份且带历史版本的网盘,找了很久没找到,所以决定自己部署一个私人服务器. 找了很久.试了很久终于确定owncloud能够满足自己的要求,而且还是开源免费的. ...
- IntelliJ IDEA 14 利用JRebel实现热部署 二
前言:今天下午和一个qq群里讨论JRebel时,忽然得到“自动部署”的奥秘--真有听君一席话,胜读十年书的感悟. 这是此群友的热部署博客:http://blog.csdn.net/martinkey/ ...
- 如何利用VS2010安装和部署应用程序
转自:http://jingyan.baidu.com/article/4b52d70255d7f0fc5d774b4d.html 1.假设你当前的winform已经okay了 2.解决方案中新建&q ...
- springboot项目利用devtools实现热部署,改动代码自动生效
一.前言 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后 ...
随机推荐
- KingbaseES V8R6集群维护案例之---停用集群node_export进程
案例说明: 在KingbaseES V8R6集群启动时,会启动node_exporter进程,此进程主要用于向kmonitor监控服务输出节点状态信息.在系统安全漏洞扫描中,提示出现以下安全漏洞: 对 ...
- spark 写入数据到Geomesa(Hbase)
package com.grady.geomesa import org.apache.spark.sql.jts.PointUDT import org.apache.spark.sql.types ...
- spring native 初体验实现 小米控制美的空调
目前关于 spring native 分享的文章还比较少 写这篇文章的主要目前是分享一下自己写的一个 小米控制美的空调 的程序 集成 spring native 过程中碰到的一些问题和解决方法 先放地 ...
- Exchange 2019中启用自动转发到外部域
今天遇到一个用户反映自动转发的邮件规则没有生效.检查了一下,邮件规则配置没有问题.用户邮箱也能正常收到邮件,但是就是没有转发出去.仔细检查邮件规则,转发的收件人是外部邮箱.Exchange出于安全考虑 ...
- 使用 Loki 进行日志报警(一)
转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492352&idx=1&sn=9c0cc7927b ...
- Elasticsearch 快照生命周期管理 (SLM) 实战指南
文章转载自:https://mp.weixin.qq.com/s/PSfgPJc4dKN2pOZd0Y02wA 1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群 ...
- Docker 部署 RocketMQ 双主双从模式( 版本v4.7.0)
文章转载自:http://www.mydlq.club/article/96/ 系统环境: 系统版本:CentOS 7.8 RocketMQ 版本:4.7.0 Docker 版本:19.03.13 一 ...
- 关于使用kuboard安装其自带的监控应用授权普通用户使用
官方文档地址:https://www.kuboard.cn/guide/example/monitor-v2.html#授权用户访问套件
- logstash知识点
Logstash是位于Data和Elasticsearch之间的一个中间件.Logstash是一个功能强大的工具,可与各种部署集成. 它提供了大量插件. 它从数据源实时地把数据进行采集,可帮助您解析, ...
- 解决inode满
登陆服务器运行df -i 然后运行 for i in /*; do echo $i; find $i |wc -l|sort -nr; done 看看每个文件夹下面的数量 最后发现是/var/spoo ...