KubeEdge temperature 部署

本文對官方示例 temperature 進行實驗。

功能說明

本示例主要是演示在雲端獲取邊緣端的設備狀態。

編譯

本文對官方示例進行了修改。此處給出修改描述,詳情參考修改後的源碼。
1、參考 led 示例,新加 Makefile,修改 Dockerfile。
2、修改源碼,去掉與硬件操作相關的函數,將採集的溫度值 temperature 累加以觀察其變化。
3、製作鏡像,提交鏡像。
3、修改 crds 和 deployment.yaml 文件,指定調度節點名稱。

實驗

部署:

kubectl apply -f crds/
kubectl apply -f  deployment.yaml 

查看pod:

# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
temperature-mapper-77fb74f5-vzztl   1/1     Running   0          5m10s

在邊緣商查看日誌:

# docker logs ecc3ba6a29dc
2020-03-22T09:11:51.777 [    main] INFO  Sensor = DHT11: Temperature = 74*C, Humidity = 85% (retried 1 times)
2020-03-22T09:11:56.778 [    main] INFO  Sensor = DHT11: Temperature = 75*C, Humidity = 85% (retried 1 times)
2020-03-22T09:12:01.778 [    main] INFO  Sensor = DHT11: Temperature = 76*C, Humidity = 85% (retried 1 times)

在雲端觀察:

kubectl get device temperature1 -oyaml -w

輸出示例:
apiVersion: devices.kubeedge.io/v1alpha1
kind: Device
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"devices.kubeedge.io/v1alpha1","kind":"Device","metadata":{"annotations":{},"labels":{"description":"temperature","manufacturer":"test"},"name":"temperature1","namespace":"default"},"spec":{"deviceModelRef":{"name":"temperature-model"},"nodeSelector":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"","operator":"In","values":["latelee1"]}]}]}},"status":{"twins":[{"desired":{"metadata":{"type":"string"},"value":""},"propertyName":"temperature-status"}]}}
  creationTimestamp: "2020-03-22T09:04:18Z"
  generation: 77
  labels:
    description: temperature
    manufacturer: test
  name: temperature1
  namespace: default
  resourceVersion: "29280"
  selfLink: /apis/devices.kubeedge.io/v1alpha1/namespaces/default/devices/temperature1
  uid: e9869339-6d9b-4bf3-bf9f-c6191efeedc7
spec:
  deviceModelRef:
    name: temperature-model
  nodeSelector:
    nodeSelectorTerms:
    - matchExpressions:
      - key: ""
        operator: In
        values:
        - latelee1
status:
  twins:
  - desired:
      metadata:
        type: string
      value: ""
    propertyName: temperature-status
    reported:
      metadata:
        timestamp: "1584868316781"
        type: string
      value: 75C   // !!!! 此值會變化

源碼研究

流程:
1、連接 mqtt:connectToMqtt,故需要邊緣端開啓 mqtt 服務,並監聽 1883 端口。
2、採集溫度:ReadDHTxxWithContextAndRetry,本例註釋。
3、將溫度值發佈到mqtt:publishToMqtt。
4、之後進入 KubeEdge 系統,在雲端可查看狀態。

其它說明:
發佈主題指定如下

deviceTwinUpdate := "$hw/events/device/" + "temperature" + "/twin/update"

temperature 爲設備名稱。需要與 Device 中的 metadata.name 保持一致。此名稱也是 kubectl get device 查看到的名稱。可修改使其不一致,觀察效果。

發佈消息前先創建消息體:createActualUpdateMessage,結構體爲 DeviceTwinUpdate,具體如下:

map[string]*MsgTwin{"temperature-status": {Actual: &TwinValue{Value: &actualValue}, Metadata: &TypeMetadata{Type: "Updated"}}}

查看device.yaml:

status:
  twins:
    - propertyName: temperature-status
      desired:
        metadata:
          type: string
        value: ''

目前看,部分對應起來,深層理論待研究。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章