Не могу понять, почему Azure IoT не может запустить мои (docker) модули на моем RasPi.

Вопрос или проблема

Я настроил свой RasPi 4 на портале Azure IoT. Я собрал и отправил два контейнера в свой ACR: Я собрал их на своем хосте x86 с командой, как:

docker build  --rm -f "/home/ron/src/azure_templates/modules/BlobStorage/Dockerfile.arm64v8" -t mh18containers.azurecr.io/blobstorage:1.0-arm/v8 --platform linux/arm64 "/home/ron/src/azure_templates/"

и затем отправил их в ACR. Я добавил модули к своему IoT-устройству, и похоже, что они были загружены, как и ожидалось, и отображаются как:

iotedge list
NAME               STATUS           DESCRIPTION                 CONFIG
BlobStorage        failed           Failed (159) 8 minutes ago  mh18containers.azurecr.io/blobstorage:1.0-arm64v8
ImageCapture       failed           Failed (159) 8 minutes ago  mh18containers.azurecr.io/imagecapture:1.0-arm64v8
edgeAgent          running          Up an hour                  mcr.microsoft.com/azureiotedge-agent:1.4
edgeHub            running          Up an hour                  mcr.microsoft.com/azureiotedge-hub:1.4
metrics-collector  running          Up 41 minutes               mcr.microsoft.com/azureiotedge-metrics-collector:1.0

только я не могу заставить их работать, и я не знаю, почему. Они также не создают никаких логов:

$ iotedge logs ImageCapture
$ iotedge logs BlobStorage

и когда я пытаюсь запустить их вручную, я получаю:

$ sudo docker run mh18containers.azurecr.io/blobstorage:1.0-arm64v8
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/arm/v8) and no specific platform was requested
$ sudo docker run mh18containers.azurecr.io/imagecapture:1.0-arm64v8
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/arm/v8) and no specific platform was requested

Я читал, что может быть проблема и путаница между 64-битными контейнерами, работающими на 32-битной системе (на aarch64), но я запускаю:

$ uname -a
Linux mh18pi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye

Есть ли кто-то, кто может мне помочь с этим?

iotedge logs edgeAgent показывает следующее:

<6> 2024-10-11 20:56:12.235 +00:00 [INF] - Выполнение команды: "Остановить модуль BlobStorage"
<6> 2024-10-11 20:56:12.241 +00:00 [INF] - Выполнение команды: "Запустить модуль BlobStorage"
<6> 2024-10-11 20:56:12.814 +00:00 [INF] - Выполнение команды: "Сохранение BlobStorage в хранилище"
<6> 2024-10-11 20:56:12.814 +00:00 [INF] - Выполнение плана завершено для развертывания 23
<6> 2024-10-11 20:56:17.934 +00:00 [INF] - Начато выполнение плана для развертывания 23
<6> 2024-10-11 20:56:17.935 +00:00 [INF] - Выполнение команды: "Групповая команда: (\n  [Остановить модуль ImageCapture]\n  [Запустить модуль ImageCapture]\n  [Сохранение ImageCapture в хранилище]\n)"
<6> 2024-10-11 20:56:17.935 +00:00 [INF] - Выполнение команды: "Остановить модуль ImageCapture"
<6> 2024-10-11 20:56:17.944 +00:00 [INF] - Выполнение команды: "Запустить модуль ImageCapture"
<6> 2024-10-11 20:56:18.502 +00:00 [INF] - Выполнение команды: "Сохранение ImageCapture в хранилище"
<6> 2024-10-11 20:56:18.503 +00:00 [INF] - Выполнение плана завершено для развертывания 23
<6> 2024-10-11 20:56:18.713 +00:00 [INF] - Обновлены отчетные свойства

.

Ответ или решение

Когда речь идет о запуске модулей Azure IoT на Raspberry Pi (RasPi), важно учитывать ряд аспектов, которые могли привести к проблеме, с которой вы столкнулись. Ниже приведены шаги и рекомендации по решению вашей ситуации.

1. Проверка архитектуры системы

Согласно команде uname -a, ваша система работает на архитектуре aarch64 (ARM 64-бит), что соответствует вашим контейнерам, которые вы собираете с флагом --platform linux/arm64. Однако предупреждение, которое вы получаете при попытке запуска контейнеров через docker run, говорит о том, что запрашиваемая платформа (linux/arm64) не совпадает с обнаруженной платформой (linux/arm/v8). Это может указывать на конфликт в версиях Docker или недостаточную поддержку платформы.

2. Проверьте версию Docker

Убедитесь, что вы используете последнюю версию Docker, которая поддерживает архитектуру arm64. Запустите следующую команду, чтобы узнать, какую версию Docker вы используете:

docker --version

Если версия устарела, обновите Docker с помощью следующей команды:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

3. Оцените конфигурацию IoT Edge

Далее проверьте конфигурацию модуля IoT Edge. Конфигурационные файлы могут содержать неверно указанные образы контейнеров. Убедитесь, что в вашем deployment.json заданы правильные имена образов, которые соответствуют тегам, которые вы используете:

"modules": {
    "BlobStorage": {
        "type": "docker",
        "settings": {
            "image": "mh18containers.azurecr.io/blobstorage:1.0-arm64v8",
            ...
        }
    },
    "ImageCapture": {
        "type": "docker",
        "settings": {
            "image": "mh18containers.azurecr.io/imagecapture:1.0-arm64v8",
            ...
        }
    }
}

4. Логи модулей

Отсутствие логов при выполнении команд iotedge logs может указывать на то, что модули не запускаются должным образом. Проверьте конфигурационный файл config.yaml вашего IoT Edge на наличие ошибок или некорректных параметров. Также стоит оценить статус IoT Hub, соединение с ним и наличие возможных блокировок.

5. Проблемы с сетью и хранилищем

Проверьте, доступен ли ваш Azure Container Registry (ACR) для вашего устройства. Убедитесь, что Raspberry Pi имеет доступ в интернет и может извлекать образы с ACR. Это можно проверить с помощью команды:

sudo docker pull mh18containers.azurecr.io/blobstorage:1.0-arm64v8

Если происходит ошибка, возможно, вам нужно настроить аутентификацию вашего устройства для доступа к ACR.

6. Тестирование модулей локально

Для более глубокого анализа попробуйте запустить модули на вашем Raspberry Pi вручную, указав флаг платформы:

sudo docker run --platform linux/arm64 mh18containers.azurecr.io/blobstorage:1.0-arm64v8

Это поможет вам выявить возможные проблемы, касающиеся самих контейнеров.

Заключение

Если после выполнения вышеуказанных шагов проблема не будет решена, рассмотрите возможность обращения в службу поддержки Azure с описанием вашей проблемы и полученными логами. В некоторых случаях проблемы могут быть связаны с конфигурацией самой системы или специфическими ошибками в пакетах, которые требуют глубокого анализа.

С учетом всех этих шагов, у вас есть шанс на успешный запуск ваших модулей на Raspberry Pi.

Оцените материал
Добавить комментарий

Капча загружается...