Допустим, например, вы начали новую работу в качестве DevOps/Dev/SRE/ETC в компании, которая создала новый интеллектуальный динамик (подумайте Amazon Echo или Google Home), сказал, что устройство добилось большого успеха, и вы быстро окажетесь с Миллион клиентов, каждый с одним устройством в его доме, звучит великолепно, верно? Теперь единственная проблема, которую у вас есть, это то, как вы обрабатываете развертывания до миллиона устройств, расположенных по всему миру?
- Вы можете пойти так, как большинство старых школьных поставщиков делают это, выпустив пакет для конечного пользователя, чтобы загрузить и установить себя на веб -сайте компании, но в этот день это быстро потеряет вас с клиентами на конкуренцию, у которых нет такого высокого уровня потребности в обслуживании.
- Вы можете создать систему самостоятельного обновления, встроенную в вашу кодовую базу, но это потребует большого количества технического обслуживания, и от команды разработчиков, и даже тогда, вероятно, приведет к проблемам и неудачам в будущем.
- Вы можете контейнерировать кодовую базу, создать на каждом интеллектуальном динамике одно серверное кластер Kubernetes и создать из них огромный федеративный кластер (поскольку Kubernetes не поддерживает ни та, не допускающие задержки, это требуется), но это приведет к огромному Затраты на все ресурсы потрачены впустую только для того, чтобы запустить все упомянутые кластеры.
- Вы можете использовать контейнерный оркестратор туманности, который был разработан для решения именно такого рода распределенных потребностей оркестровки.
Как вы, возможно, догадались из названия, я хочу обсудить о последнем варианте из списка.
Контейнерный оркестратор туманности стремится помочь разработчикам и OPS относиться к устройствам IoT, как распределенные приложения. Целью является выступить в качестве оркестратора Docker для устройств IoT, а также для распределенных услуг, таких как CDN или Edge Computing, которые могут охватывать тысячи (или даже миллионы) устройств по всему миру, и это делает все это, будучи открытым исходным кодом и совершенно свободным.
Когда вы думаете об этом, распределенный оркестратор имеет следующие требования:
- Это должно быть устойчивым к задержке — Если устройства IoT распределены, каждый из них будет подключаться к оркестратору через Интернет в соединении, которое не всегда может быть стабильным или быстрым.
- Необходимо масштабироваться, чтобы справиться с тысячами (и даже сотнями тысяч) устройств IoT — массовые развертывания быстро становятся все более и более распространенными.
- Он должен работать на нескольких архитектурах — многие устройства IoT используют доски для рук.
- Это должно быть самолетом — вы не хотите бегать по городу, чтобы сбросить устройство каждый раз, когда есть небольшой сбой?
- Код должен быть связан с аппаратным обеспечением — если ваша компания производит умный динамик в примере, упомянутом выше, и интеллектуального холодильника, вам необходимо обеспечить связь кода с устройством, на котором он предназначен для запуска (без различных приложений в одинаковые устройства в варианте использования IoT).
Это сильно отличается от оркестраторов Большой тройки (Kubernetes, Mesos & Swarm), которые предназначены для упаковки столько различных приложений \ microservices на одни и те же серверы в одном (или относительно немногих) центрах обработки данных, и в результате они не обеспечивают действительно Задержка, толерантная связь и масштабируемость Swarm & Kubernetes ограничены несколькими тысячами работников.
Туманность была разработана с помощью микросервиса Restful Manger Restful, чтобы предоставить одну точку для управления кластерами, а также для предоставления одной точки, которую все контейнеры проверяют для обновлений с обновлениями конфигурации монотонного идентификатора, вдохновленного KAFKA, в методологии, основанной Из приложений, управляемых туманностью, одновременно тянутся на все управляемые устройства, а также гарантирует, что все устройства всегда будут иметь последнюю версию конфигурации (благодаря монотонному идентификатору), все данные хранятся в MongoDB, которая является единственной точкой. Истины для системы, на стороне работников она основана на рабочем контейнере на каждой устройствах, которые отвечают за запуск \ остановки \ Изменение других контейнеров, работающих на этом устройстве, из -за конструкции каждый компонент может быть масштабирован и как таковой Туманность может расти столько, сколько вам требуется.
Вы можете прочитать больше об архитектуре туманности в https://nebula.readthedocs.io/en/latest/architecture/
Поскольку он был разработан с нуля, чтобы поддержать распределенные системы туманность имеет несколько аккуратных функций, которые позволяют им управлять распределенными системами IoT:
- Разработано для масштабирования всех его компонентов (IoT -устройства, API -слой и Mongo All Scale Out)
- Способен управлять миллионами устройств IoT
- Задержка, даже если устройство выйдет в автономном режиме.
- Динамически Добавить/удалить управляемые устройства
- Быстрое и простое развертывание кода, один вызов API с новым тегом изображения контейнера (или другими изменениями конфигурации), и оно будет направлено на все устройства этого приложения.
- Простая установка — Mongodb и API без сохранения состояния — это все, что нужно для уровня управления и одного контейнера с некоторыми Envvars на каждом устройстве IoT, которым вы хотите управлять, заботится о рабочем уровне
- Одиночная конечная точка API для управления всеми устройствами
- Позволяет управлять несколькими устройствами с одним и тем же оркестратором туманности (несколько приложений и device_groups)
- Не ограничивается IoT, также полезно для других типов распределенных систем
- API, Python SDK и CLI Control доступен
Следующая команда установит кластер туманности для игры, а также создаст пример приложения, требует установки Docker, Curl & Docker-Compose:
curl -L "https://raw.githubusercontent.com/nebula-orchestrator/docs/master/examples/hello-world/start_example_nebula_cluster.sh" -o start_example_nebula_cluster.sh && sudo sh start_example_nebula_cluster.sh
Но давайте рассмотрим, что делает эта команда, чтобы лучше понять процесс:
- Сценарии загружают и запускают файл docker-compose.yml, который создает:
Контейнер MongoDB — бэкэнд DB, где сохраняется текущее состояние туманности.
Контейнер для менеджера — конечная точка RESTFUL API, именно здесь администратор управляет туманностью и где устройства вытаскивают последнее состояние конфигурации, чтобы соответствовать своему текущему состоянию
Рабочий контейнер — это обычно работает на устройствах IoT, на каждом устройстве требуется только один, но, поскольку это всего лишь пример, он работает на том же сервере, что и компоненты уровня управления.
Стоит упомянуть «переменную среды, установленную на контейнере работника, эта переменная Device_group контролирует то, что приложения туманности будут подключены к устройству (аналогично концепции POD в других оркестраторах).
Затем сценарий ждет, пока API станет доступным.
Как только API доступен, сценарии отправляют следующие 2 команды:
curl -X POST \ http://127.0.0.1/api/v2/apps/example \ -H 'authorization: Basic bmVidWxhOm5lYnVsYQ==' \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -d '{ "starting_ports": [{"81":"80"}], "containers_per": {"server": 1}, "env_vars": {}, "docker_image" : "nginx", "running": true, "volumes": [], "networks": ["nebula"], "privileged": false, "devices": [], "rolling_restart": false }'
Эта команда создает приложение с именем «пример» и настраивает его для запуска контейнера Nginx для прослушивания на порту 81, поскольку вы можете видеть, что он также может управлять другими параметрами, обычно передаваемыми в команду Docker Run, такую как Envvars, сети или монтажные монтиры.
curl -X POST \ http://127.0.0.1/api/v2/device_groups/example \ -H 'authorization: Basic bmVidWxhOm5lYnVsYQ==' \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -d '{ "apps": ["example"] }'
Эта команда создает Device_Group, который также называется «Пример» и прикрепляет к нему приложение «Пример».
- После того, как App & Device_Groups повреждено на API туманности, контейнер работников поднимет изменения в Device_Group, которая была бы заключена как часть («пример» в данном случае) и запустит контейнер Nginx на сервере, вы можете Запустите «Docker Logs Worker», чтобы увидеть загружаемый контейнер Nginx до его начала (это может занять немного, если вы находитесь на медленном соединении). и после его завершения вы можете получить доступ к http://: 81/в браузере, чтобы увидеть, как он работает
Теперь, когда у нас работает работающая система туманности, мы можем начать играть с ней, чтобы увидеть, что это истинные сильные стороны:
- Мы можем добавить больше удаленных работников, запустив на них рабочую контейнер:
sudo docker run -d --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock --env DEVICE_GROUP=example --env REGISTRY_HOST=https://index.docker.io/v1/ --env MAX_RESTART_WAIT_IN_SECONDS=0 --env NEBULA_MANAGER_AUTH_USER=nebula --env NEBULA_MANAGER_AUTH_PASSWORD=nebula --env NEBULA_MANAGER_HOST=--env NEBULA_MANAGER_PORT=80 --env nebula_manager_protocol=http --env NEBULA_MANAGER_CHECK_IN_TIME=5 --name nebula-worker nebulaorchestrator/worker
Стоит отметить, что многие из энвор, проходящих вышеуказанную команду, являются необязательными (с по умолчанию по умолчанию), и что нет ограничений на то, сколько устройств мы можем запустить эту команду, в какой -то момент вам, возможно, придется масштабировать менеджеров и и \ или бэкэнд DB, но они также не ограничены.
- Мы можем изменить изображение контейнера на всех устройствах одним вызовом API, давайте, например, заменим изображение контейнера на Apache, чтобы моделировать тот
curl -X PUT \http://127.0.0.1/api/v2/apps/example/update \-H 'authorization: Basic bmVidWxhOm5lYnVsYQ==' \-H 'cache-control: no-cache' \-H 'content-type: application/json' \-d '{"docker_image": "httpd:alpine"}'
- Точно так же мы также можем обновить любой параметр приложения, такой как env_vars, привилегированные разрешения, тома и т. Д., — полный список конечных точек API, а также Python SDK и CLI доступны на странице документации на https://nebula.readthedocs.io/en/latest/
Надеемся, что это маленькое руководство позволило вам увидеть потребность в оркестраторе Docker IoT и его вариант использования, и если вы заинтересованы в прочтении больше об этом, вы можете посетить сайт оркестратора туманности по адресу https://nebula-orchestrator.github.io/ или пропустите прямо к документации в https://nebula.readthedocs.io
Оригинал: «https://dev.to/naorlivne/nebula-container-orchestrator-container-orchestration-for-iot-devices-distributed-systems-48f7»