Рубрики
Uncategorized

Оркестратор контейнеров -контейнер — оркестровка контейнеров для устройств IoT и распределенных систем

Допустим, например, вы начали новую работу в качестве DevOps/Dev/SRE/ETC в компании, которая создала новый S … Tagged с DevOps, Docker.

Допустим, например, вы начали новую работу в качестве 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, который создает:
  1. Контейнер MongoDB — бэкэнд DB, где сохраняется текущее состояние туманности.

  2. Контейнер для менеджера — конечная точка RESTFUL API, именно здесь администратор управляет туманностью и где устройства вытаскивают последнее состояние конфигурации, чтобы соответствовать своему текущему состоянию

  3. Рабочий контейнер — это обычно работает на устройствах 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»