前言
之前把kubeedge 云边环境搭建好了,现在开始做mappers开发。包括以下几个步骤
1、基于标准sdk 开发mappers(边端、云端都行,因为测试的时候需要mqtt环境,我用的边端)
2、将mappers 打包镜像,上传docker hub
3、云端使用deployment,将pod下发到边端
系统:ubuntu20
需要用到golangci-lint
我直接用命令snap install golangci-lint
1、开发mappers
下载mappers-go-main
根目录下运行 make template Testtcpserver
可以看到
mappers-go-main/mappers 多了个项目 Testtcpserver
Testtcpserver/driver/client.go 里面有个Get方法,定时调用这个get方法,做设备采集,然后基于mqtt topic 做定时发布
采集项目一般分server、client,如果你写的是server端,那么你要重新写server方法,被动接收client数据,并缓存数据,mapper定时调用get方法的时候,就把缓存的数据,发布到mqtt
这个项目用klog做调试,运行的命令跟klog 等级相关,比如
klog.V(4).Info("Set result:", err, results) 对应的命令就是
go run main.go --v 4
goland 的对应的参数可以设置
mappers 有个configmap
对应到testtcpserver/configmap 路径下的 configmap_test.json,这个文件的路径需要配置到testtcpserver下的 config.xml 的configmap
2、打包并上传镜像
我的本地docker hub 地址、端口是192.168.21.12:5000
注:docker 添加本地仓库,还要配置参数
Testtcpserver目录下运行以下命令
maker mapper Testtcpserver // 打包二进制文件
docker build -t testtcpserver /usr/local/software/edgex/mappers-go-main/mappers/testtcpserver/
docker tag testtcpserver:latest 192.168.21.12:5000/testtcpserver:v1.0
docker push 192.168.21.12:5000/testtcpserver:v1.0 //打包镜像并上传到本地docker hub
3、云端下发镜像到边端pod
云端新建deploymentTesttcpserver.yaml 文件如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: testtcpserver
labels:
app: testtcpserver
spec:
replicas: 1
selector:
matchLabels:
app: testtcpserver
template:
metadata:
labels:
app: testtcpserver
spec:
hostNetwork: true
containers:
- name: testtcpserver
image: 192.168.21.12:5000/testtcpserver :v1.0 (本地docker hub镜像地址)
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
# 指定节点运行
nodeName: k8s-node2 (边端hostname)
···
kubectl create -f deploymentTesttcpserver.yaml
···
注意
打包镜像的时候,会有个k8s 授权的问题,需要把master 的 $HOME/.kube/config 文件拷贝到 镜像里面,不然的话,镜像无法获取授权,就连不到master
1、把 master的$HOME/.kube/config文件拷贝到边端
2、在testtcpserver/config 文件夹下
3、修改Dockerfile
4、包括configmap_negtest.json 文件,也要拷贝到镜像中