部署kubeedge-temperature-demo 示例亲测成功

如果你成功运行过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的版本也相对较老

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值