Есть ли способ обеспечить межмодульные зависимости / порядок инициализации? - PullRequest
0 голосов
/ 08 мая 2019

Используя Azure IoT Edge, я не нашел способа гарантировать порядок инициализации контейнеров / модулей в развертывании.Предположим, например, что у меня есть 2 модуля, A и B. A - это сервер, а B - это клиент, который зависит от A. Насколько я знаю, нет способа гарантировать, что A запускается раньше, чем B.

Шаблоны развертывания Azure IoT Edge соответствуют API-интерфейсу Docker Engine, и я не смог найти какой-либо способ применения зависимостей через этот API-интерфейс.В качестве обходного пути я не делаю предположений о том, какие контейнеры выполняются в коде каждого контейнера.Это работает, хотя накладные расходы на дополнительный код не идеальны, особенно если учесть, что такой инструмент, как docker-compose, сделал бы принудительный порядок инициализации довольно тривиальным.

Я хочу сделать что-то вроде этого (src: https://docs.docker.com/compose/compose-file/):

version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

В качестве обходного пути и следуя приведенному выше примеру, в контейнере web я выполнял следующие действия, чтобы убедиться, что postgres запущен и работает до того, как web выполняет postgres зависимуюдействия:

postgresIsUp = False
while not postgresIsUp:
    try:
        pingPostgres()
        postgresIsUp = True
    except PingError:
        print("postgres is not yet running")

Это, конечно, надуманный пример с явными недостатками, но он демонстрирует суть обходного пути.

1 Ответ

0 голосов
/ 09 мая 2019

Нет, IotEdge не поддерживает инициализацию модулей в определенном порядке.Имейте в виду, что даже если бы можно было запустить их в определенном порядке для разрешения зависимостей, вы все равно столкнетесь с проблемами в случае сбоя одного из модулей.Он будет перезапущен EdgeHub, но вы потеряете порядок инициализации.

Майк Ягли (один из авторов, работающих над IotEdge) дает объяснение по этому вопросу на github .

...