如何在Akri中根据udev规则启动不同BrokerPod并传递额外信息
解决Akri多udev规则对应不同BrokerPod的配置问题
问题根源
你当前的配置逻辑有误:Akri的单个UdevConfiguration资源中,udevRules数组是用来定义多个匹配规则(逻辑或关系,满足任意一个规则即触发匹配),而非绑定多套不同的BrokerPod模板。你试图在同一个Configuration里用数组关联不同规则与镜像,会导致BrokerPod配置冲突,进而引发容器启动异常。
要实现不同udev规则对应不同容器,需创建多个独立的UdevConfiguration资源,每个资源对应一套规则、一个BrokerPod模板,以及专属的brokerProperties。
正确配置示例
方式1:通过Helm--set参数创建多Configuration
helm repo add akri-helm-charts https://project-akri.github.io/akri/ helm install akri akri-helm-charts/akri \ $AKRI_HELM_CRICTL_CONFIGURATION \ # 第一个Configuration:匹配product=AAAA,使用默认nginx镜像 --set udev.configurations[0].enabled=true \ --set udev.configurations[0].name=akri-udev-aaaa \ --set udev.configurations[0].discoveryDetails.udevRules='ATTR{product}==\"AAAA\"' \ --set udev.configurations[0].brokerPod.image.repository=nginx \ --set udev.configurations[0].brokerProperties.ruleTag="aaaa-device" \ --set udev.configurations[0].brokerProperties.deviceType="video" \ # 第二个Configuration:匹配product=BBBB,使用nginx:1.24镜像 --set udev.configurations[1].enabled=true \ --set udev.configurations[1].name=akri-udev-bbbb \ --set udev.configurations[1].discoveryDetails.udevRules='ATTR{product}==\"BBBB\"' \ --set udev.configurations[1].brokerPod.image.repository=nginx \ --set udev.configurations[1].brokerPod.image.tag=1.24 \ --set udev.configurations[1].brokerProperties.ruleTag="bbbb-device" \ --set udev.configurations[1].brokerProperties.deviceType="video"
方式2:使用values.yaml文件(更易维护)
创建akri-custom-values.yaml:
udev: discovery: enabled: true configurations: - enabled: true name: akri-udev-aaaa discoveryDetails: udevRules: 'ATTR{product}==\"AAAA\"' brokerPod: image: repository: nginx tag: latest brokerProperties: ruleTag: "aaaa-device" customAttr: "aaaa-specific" - enabled: true name: akri-udev-bbbb discoveryDetails: udevRules: 'ATTR{product}==\"BBBB\"' brokerPod: image: repository: nginx tag: 1.24 brokerProperties: ruleTag: "bbbb-device" customAttr: "bbbb-specific"
执行安装命令:
helm install akri akri-helm-charts/akri \ $AKRI_HELM_CRICTL_CONFIGURATION \ -f akri-custom-values.yaml
让BrokerPod获取对应规则信息
配置的brokerProperties会自动注入到BrokerPod的环境变量中,变量名格式为AKRI_BROKER_PROPERTY_<KEY>(大写,下划线替换特殊字符)。例如配置的ruleTag会变成环境变量AKRI_BROKER_PROPERTY_RULETAG,容器内可直接读取这些变量识别对应的udev规则。
验证配置
- 查看创建的UdevConfiguration:
kubectl get udevconfigurations
- 查看发现的设备实例:
kubectl get akrii
- 验证BrokerPod的环境变量:
kubectl exec -it <目标BrokerPod名称> -- env | grep AKRI_BROKER_PROPERTY
内容的提问来源于stack exchange,提问作者Klaus
相关产品推荐
相关产品推荐

