关于适配器
#
适配器设计Octopus 诞生时就考虑到了可伸缩性的必要,这种能力体现在设备模型和适配器的设计中。
由于可以通过 CRD 定义设备模型,因此设备模型可以是专用设备(例如风扇,LED 等),也可以是通用协议设备(例如 BLE,ModBus,OPC-UA 设备等)。
同时,适配器的实现可以连接到单个设备或多个设备:
请在此处查看有关开发适配器的更多详细信息。
#
适配器 APIs适配器的访问管理借鉴了Kubernetes 设备插件管理。 当前访问管理 API 的可用版本为v1alpha1
。
Versions | Available | Current |
---|---|---|
v1alpha1 | * | * |
使用以下步骤使适配器与limb
交互:
limb
在主机路径上启动带有 Unix socket 的 gRPC 服务,以接收来自适配器的注册请求:适配器使用主机路径
/var/lib/octopus/adaptors
下的 Unix socket 启动 gRPC 服务,该服务实现以下接口:适配器通过 Unix socket 旨在主机路径
/var/lib/octopus/adaptors/limb.sock
处向limb
注册。成功注册后,适配器以服务模式运行,在此模式下,适配器将保持连接设备的状态,并在设备状态发生任何变化时向
limb
报告。
#
关于注册注册 可以让limb
发现适配器的存在,在这一阶段,limb
充当服务器,而适配器充当客户端。适配器使用其名称,版本和访问端点构造一个注册请求,然后请求肢体。成功注册后,limb
将继续监视适配器并通知与已注册适配器相关的那些 DeviceLink。
- 名称是适配器的名称,强烈建议使用此模式
adaptor-vendor.com/adaptor-name
来命名适配器,每个适配器必须具有一个唯一的名称
。如果两个适配器具有相同名称
,新创建的适配器将覆盖已有的适配器。 - 版本是访问管理的 API 版本,目前已在 v1alpha1 中修复。
- 访问的“端点”是 UNIX 套接字的名称,每个适配器必须具有一个唯一的“端点”。如果两个适配器具有相同注册端点,在退出前一个适配器之前,第二个适配器不会成功注册。
#
关于链接链接可以让limb
连接到适配器,在此阶段,适配器充当服务器,而limb
充当客户端。 limb
使用 model
、device
和 references
构造连接请求,然后向目标适配器发出请求。
model
是设备的模型,有助于适配器区分多个模型,或者在一个模型中存在不同版本时保持兼容性非常有用。device
是设备的实例,格式为 JSON 字节,是完整的model
实例的JSON
字节,并包含spec
和status
数据。适配器应根据
model
选择相应的反序列化接收对象,以接收该字段的数据。 由于接收对象(设备实例)是合法的 CRD 实例,因此它严格遵守 Kubernetes 的资源管理约定,因此可以通过命名空间和名称唯一地标识设备。references
是设备的参考源,它允许设备在相同的名称空间或父DeviceLink
实例的向下API
下使用ConfigMap
和Secret
。