Device CRDs

KubeEdge 借助 Kubernetes CRD 和与设备对应的 Device Mapper 来支持设备管理。 目前我们使用Device Model和Device Instance来定义设备。

注意

在 v1.15 版本中,设备 CRD 从 v1alpha2 更新为 v1beta1,它与 v1alpha1 和 v1alpha2 兼容。 详细信息可以参见device-crd-v1beta1

设备模型

设备模型(Device Model)描述了一类设备公开的设备属性。设备模型是一种“物理模型”,它约束物理设备的属性和参数。

设备模型示例

如下所示是设备模型的示例。完整的设备模型定义,可以参考device-model

  1. apiVersion: devices.kubeedge.io/v1beta1
  2. kind: DeviceModel
  3. metadata:
  4. name: beta1-model
  5. spec:
  6. properties:
  7. - name: temp
  8. description: beta1-model
  9. type: INT
  10. accessMode: ReadWrite
  11. maximum: "100"
  12. minimum: "1"
  13. unit: "Celsius"
  14. protocol: modbus

在上面的例子中,定义了一个名为 beta1-model 的设备模型,该模型使用 modbus 协议,定义了一个名为temp的设备属性,其数据类型为int。 此外,还定义了设备属性的访问方式、取值范围和单位。

设备实例

设备实例(Device Instance)代表一个实际的设备对象。

设备实例的spec字段是静态的,包括设备属性列表,它描述了每个属性的详细信息,包括其名称、类型、访问方法。

设备实例示例

如下所示为设备实例的一个示例,有关完整的设备实例定义,您可以参考 device-instance

  1. apiVersion: devices.kubeedge.io/v1beta1
  2. kind: Device
  3. metadata:
  4. name: beta1-device
  5. spec:
  6. deviceModelRef:
  7. name: beta1-model
  8. nodeName: worker-node1
  9. properties:
  10. - name: temp
  11. collectCycle: 10000000000 # The frequency of reporting data to the cloud, once every 10 seconds
  12. reportCycle: 10000000000 # The frequency of data push to user applications or databases, once every 10 seconds
  13. reportToCloud: true
  14. desired:
  15. value: "30"
  16. pushMethod:
  17. mqtt:
  18. address: tcp://127.0.0.1:1883
  19. topic: temp
  20. qos: 0
  21. retained: false
  22. dbMethod:
  23. influxdb2:
  24. influxdb2ClientConfig:
  25. url: http://127.0.0.1:8086
  26. org: test-org
  27. bucket: test-bucket
  28. influxdb2DataConfig:
  29. measurement: stat
  30. tag:
  31. unit: temperature
  32. fieldKey: beta1test
  33. visitors:
  34. protocolName: modbus
  35. configData:
  36. register: "HoldingRegister"
  37. offset: 2
  38. limit: 1
  39. scale: 1
  40. isSwap: true
  41. isRegisterSwap: true
  42. protocol:
  43. protocolName: modbus
  44. configData:
  45. ip: 172.17.0.3
  46. port: 1502

上面的例子中,定义了一个名为 beta1-device 的设备,与之关联的设备模型为beta1-model,设备运行的节点为worker-node1。

示例文件在spec.properties字段中定义设备属性,包括消息上报频率、消息推送方式(spec.properties.pushMethod)、以及访问设备所需的参数(spec.properties.visitors)。此外,设备使用的协议在spec.protocol字段中定义。

设备CRD的使用

步骤如下:

  1. 创建设备模型,在云端节点执行。

    1. kubectl apply -f <path to device model yaml>
  2. 创建设备实例,在云端节点执行。

    1. kubectl apply -f <path to device instance yaml>