我想根据 udev 规则在 akri 中启动自定义 Brokerpod,并希望为 BrokerPod 提供启动 udev 规则的附加信息。我尝试了这样的方法,但这似乎不起作用。
helm repo add akri-helm-charts https://project-akri.github.io/akri/
helm install akri akri-helm-charts/akri \
$AKRI_HELM_CRICTL_CONFIGURATION \
--set udev.discovery.enabled=true \
--set udev.configuration.enabled=true \
--set udev.configuration.name=akri-udev-video \
--set udev.configuration.discoveryDetails.udevRules[0]='ATTR{product}=="AAAA"' \
--set udev.configuration.brokerPod.image.repository[0]=nginx \
--set udev.configuration.discoveryDetails.udevRules[1]='ATTR{product}=="BBBB"' \
--set udev.configuration.brokerPod.image.repository[1]=nginx:1.24
这会启动两个 akri 实例,我可以使用 kubectl get akrii 看到它,但作为示例的 nginx 似乎没有正确运行。如果我只启动一条规则,我就可以进入 nginx 容器。
helm repo add akri-helm-charts https://project-akri.github.io/akri/
helm install akri akri-helm-charts/akri \
$AKRI_HELM_CRICTL_CONFIGURATION \
--set udev.discovery.enabled=true \
--set udev.configuration.enabled=true \
--set udev.configuration.name=akri-udev-video \
--set udev.configuration.discoveryDetails.udevRules='ATTR{manufacturer}=="manufacturer_of_AAAA_and_BBBB"' \
--set udev.configuration.brokerPod.image.repository=nginx
但目标是启动不同的容器,并根据 udev 规则赋予brokerProperties。
要实现在 Akri 中启动不同自定义 BrokerPod 的目标(根据 udev 规则)并向这些 BrokerPod 传递附加信息,您将需要修改您的 Helm Chart 配置。
关键是在 Akri 中正确设置 udev 配置,以根据 udev 规则 匹配特定设备,并相应地自定义 brokerPod 配置。
+---------------------------------------------------------------+
| Kubernetes Cluster |
| |
| +-------------------+ +----------------------+ |
| | Akri Controller |<----------| Broker Pods | |
| +-------------------+ +----------------------+ |
| | | |
| | Discovers Devices | |
| | Matching udev Rules /----+----\ |
| | | | |
| +-------------------+ +-----------+ +------------+ |
| | udev Discovery |----->| Broker A | | Broker B | |
| | Configuration | +-----------+ +------------+ |
| +-------------------+ | | |
| | | | |
| | Matches Devices | | |
| | Based on Rules | | |
| +-------------------+ | | |
| | udev Rule 1 |-------------+ | |
| | udev Rule 2 |------------------------------+ |
| +-------------------+ |
+---------------------------------------------------------------+
首先,定义多个 udev 配置,每个配置根据您的 udev 规则针对一组特定的设备。每个配置都应指定在发现与其 udev 规则匹配的设备时要部署的不同的brokerPod。
然后,为每个udev规则定制brokerpod:对于每个udev配置,指定不同的brokerPod镜像或配置。这确保了不同的brokerpod根据它们对应的设备启动。
要将附加信息传递给brokerpod,例如哪个udev规则触发了它的启动,您可以使用环境变量或Kubernetes和Akri支持的其他配置方法。
首先,定义多个 udev 配置,每个配置根据您的 udev 规则针对一组特定的设备。每个配置都应指定在发现与其 udev 规则匹配的设备时要部署的不同的brokerPod。
然后,为每个udev规则定制brokerpod:对于每个udev配置,指定不同的brokerPod镜像或配置。这确保了不同的brokerpod根据它们对应的设备启动。
要将附加信息传递给brokerpod,例如哪个udev规则触发了它的启动,您可以使用环境变量或Kubernetes和Akri支持的其他配置方法。
您的 Helm 图表需要进行调整以反映这些多种配置。这可能看起来像下面这样(为了说明而简化):
udev:
discovery:
enabled: true
configuration:
- name: akri-udev-rule1
discoveryDetails:
udevRules: ['ATTR{product}=="AAAA"']
brokerPod:
image:
repository: custom-image-for-rule1
- name: akri-udev-rule2
discoveryDetails:
udevRules: ['ATTR{product}=="BBBB"']
brokerPod:
image:
repository: custom-image-for-rule2
将此修改后的 Helm 图表部署到您的 Kubernetes 集群。然后,Akri 将根据其发现的符合指定 udev 规则的设备部署不同的 BrokerPod。
如果 BrokerPod 未按预期运行,请检查 Akri 控制器和 BrokerPod 的日志中是否有任何错误消息。 (
kubectl get pods
、kubectl logs <broker-pod-name>
、kubectl describe pod <broker-pod-name>
)