Nebula container orchestrator aims to help devs and ops treat IoT devices just like distributed Dockerized apps. It aim is to act as Docker orchestrator for IoT devices as well as for distributed services such as CDN or edge computing that can span thousands (possibly even millions) of devices worldwide and it does it all while being open-source and completely free.
More info can be found at the project website at https://nebula-orchestrator.github.io/
2. IoT orchestration difficulties
• IoT devices are often distributed
• IoT are often low powered
• Code is copled to hardware - no packing multiple apps to same device
• Network uptimespeed is often not guaranteed
• Huge scale is common - deployments of tens of thousands of devices
is considerd common
3. Nebula features
• Designed to scale out on all of it's components (IoT devices, API layer, RabbitMQ & Mongo all
scale out)
• Able to manage tens of thousands of IoT devices
• Latency tolerant - even if a device goes offline he will be resynced when he gets back online
• Dynamically add/remove managed devices
• Fast & easy code deployments, single API call with the new container image tag and it will be
pushed to all devices of that app.
• Simple install - RabbitMQ, MongoDB, a stateless API is all it takes for the mangment layer & a
single container with some envvars on each IoT device you want to manage takes care of the
worker layer
• Single API endpoint to manage all devices
• Allows control of multiple devices with the same Nebula orchestrator (multiple apps)
• Not limited to IoT, also useful for other types of distributed systems
• API, Python SDK & CLI control available
5. Installing nebula
1. Install RabbitMQ - any configuration works
2. Install MongoDB - any configuration works
3. Install the stateless API by running a container of it with the
following envvars:
• BASIC_AUTH_USER
• BASIC_AUTH_PASSWORD
• RABBIT_HOST
• RABBIT_PORT
• RABBIT_USER
• RABBIT_PASSWORD
• RABBIT_VHOST
• MONGO_URL
• ... any other config option you need
6. Nebula - adding devices
Run the nebula worker container with the following envvarsconfig file
variables (make sure to set it with the --restart flag):
• APP_NAME - comma sperated list what apps (services) run on said workers
• RABBIT_HOST - the RabbitMQ host
• RABBIT_PORT - the RabbitMQ port
• RABBIT_USER - the RabbitMQ user
• RABBIT_PASSWORD - the RabbitMQ pass
• RABBIT_VHOST - the RabbitMQ vhost
• MONGO_URL - mongo URI string
• ... any other config option you need
7. Nebula - API examples
create a new app:
Update app:
Releasing a new version is just a matter of an Update API call with the new
"docker_image" param & all devices will be updated