如果你成功运行过KubeEdge计数器的demo,那么看完这篇文章,你也可以跑通下面这个demo!
本文是基于github上提供的kubeedge-temperature-demo进行的。
由于没有硬件设备,所以本示例中注释了硬件相关的代码,并通过随机生成数字的方式来实现温度的变化。
1、环境准备
第一次部署的,可以参考链接(KubeEdge官方示例运行成功_Counter Demo 计数器)
- 本示例在unbuntu 上运行 , go1.15.6, k8s-v1.19.5 , kubeedge v1.6.2版本安装成功,并正常运行。
- 在云端操作
1, 输入命令 kubectl get node 查看版本信息
2,从github上clone示例代码
git clone https://github.com/kubeedge/examples.git
备注:我的是放在/root/go/src/github.com/kubeedge/examples/temperature-demo 目录下
如果运行了计数器项目,可以直接在计数器上级目录直接找到这个demo来运行
3,
2、修改temperature-mapper下的main.go方法
## 以下只附上修改的片段
#导包部分
import (
"context"
"encoding/json"
"fmt"
"math/rand"
"os"
"strconv"
"syscall"
"time"
"github.com/d2r2/go-dht"
"github.com/d2r2/go-shell"
"github.com/yosssi/gmq/mqtt"
"github.com/yosssi/gmq/mqtt/client"
logger "github.com/d2r2/go-logger"
)
#代码部分一
// run goroutine waiting for OS termination events, including keyboard Ctrl+C
shell.CloseContextOnSignals(cancel, done, signals...)
sensorType := dht.DHT11
// sensorType := dht.AM2302
//sensorType := dht.DHT12
// /从这里开始修改///
//pin := 11
totalRetried := 0
totalMeasured := 0
totalFailed := 0
term := false
// connect to Mqtt broker
cli := connectToMqtt()
rand.Seed(time.Now().Unix())
for {
// Read DHT11 sensor data from specific pin, retrying 10 times in case of failure.
// 注释硬件相关的代码
//temperature, humidity, retried, err :=
// dht.ReadDHTxxWithContextAndRetry(ctx, sensorType, pin, false, 10)
temperature := float32(rand.Intn(100))
humidity := 0
retried :=1
var err error = nil
totalMeasured++
totalRetried += retried
if err != nil && ctx.Err() == nil {
totalFailed++
lg.Error(err)
continue
}
// print temperature and humidity
if ctx.Err() == nil {
lg.Infof("Sensor = %v: Temperature = %v*C, Humidity = %v%% (retried %d times)",
sensorType, temperature, humidity, retried)
}
// publish temperature status to mqtt broker
publishToMqtt(cli, temperature)
///**#代码部分二,再修改mqtt地址为边缘端mqtt地址,请确保边缘段开放了1883端口并且可访问**
// Connect to the MQTT Server.
err := cli.Connect(&client.ConnectOptions{
Network: "tcp",
Address: "192.168.100.186:1883",
ClientID: []byte("receive-client"),
})
if err != nil {
panic(err)
}
return cli
}
}
3、部署模拟的温度设备instance.yaml 和 model.yaml
##第一步部署model
cd /root/go/src/github.com/kubeedge/examples/temperature-demo/crds
kubectl apply -f model.yaml
## 第二步修改instance.yaml文件的边缘节点名称
apiVersion: devices.kubeedge.io/v1alpha2
kind: Device
metadata:
name: temperature
labels:
description: 'temperature'
manufacturer: 'test'
spec:
deviceModelRef:
name: temperature-model
nodeSelector:
nodeSelectorTerms:
- matchExpressions:
- key: 'name'
operator: In
values:
- edge-node ##修改这个名字为边缘节点名称
status:
twins:
- propertyName: temperature-status
desired:
metadata:
type: string
value: ''
##第三步部署设备
kubectl apply -f instance.yaml
备注:如果跑错了或则想重新跑,均可以使用kubectl delete -f xxxx.yaml 命令删除
4、构建temperature-mapper镜像
##在云端操作
cd /root/go/src/github.com/kubeedge/examples/temperature-demo/
方法一,上传镜像到docker hub 库
#先打包镜像, 14981343333 为docker hub账号
docker build -t 14981343333/temperature-mapper:test-1234 .
#登陆docker hub 账号14981343333
docker login --username 14981343333
#上传共有库或者在生产环境可以搭自己的私有库
docker push 14981343333/temperature-mapper:test-1234
方法二,通过scp发送镜像到边缘侧启动
##先打包镜像,执行,注意命令后面有个点
docker build -t temperature-mapper:test-1234 .
docker save -o temperature-mapper.tar temperature-mapper:test-1234
##scp到边缘侧,边缘在根目录下新建data目录
scp temperature-mapper.tar root@192.168.100.134:/data/
## 在边缘侧 load temperature-mapper镜像(edge节点)
docker load -i temperature-mapper.tar
5、部署temperature mapper(master节点)
cd /root/go/src/github.com/kubeedge/examples/temperature-demo
vim deployment.yaml
######################
apiVersion: apps/v1
kind: Deployment
metadata:
name: temperature-mapper
labels:
app: temperature
spec:
replicas: 1
selector:
matchLabels:
app: temperature
template:
metadata:
labels:
app: temperature
spec:
hostNetwork: true
nodeSelector:
kubernetes.io/hostname: "edge-node" ## 注意这里有坑,需要把源码的name改为你的边缘节点标签名(我的叫这个kubernetes.io/hostname)
containers:
- name: temperature
image: temperature-mapper:test-1234 ##这里改为构建的镜像名,如果上面是用的方法一,前面加上docker hub 库名 migua/
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
##################
#运行deployment.yaml
kubectl apply -f deployment.yaml
注意:上面修改边缘节点名称的问题,之前配置的是name:“edge-node” ,会一直pending
6、在云端观察temperature的变化情况
#重复输入下面的命令
kubectl get device temperature -o yaml
恭喜,你已经跑通了此demo!
参考链接:(https://blog.csdn.net/weixin_44738411/article/details/107049358)这个链接的内容比较老,k8s和kubeedge的版本也相对较老