A docker orchestrator designed to manage IoT devices.
Nebula is a open source project created for Docker orchestration and designed to manage massive clusters at scale, it achieves this by scaling each project component out as far as required. The project’s aim is to act as Docker orchestrator for IoT devices as well as for distributed services such as CDN or edge computing. Nebula is capable of simultaneously updating tens of thousands of IoT devices worldwide with a single API call in an effort to help devs and ops treat IoT devices just like distributed Dockerized apps.
Among other things Nebula allows to:
Stop\start\restart\rolling restart containers.
Force pull updated containers.
Change # of containers running per core/memory/instance.
Change image used.
Manage multiple apps over different worker servers, each server “device_group” can have an unlimited amount of apps added\removed from it which will then be picked up by all devices that are part of that “device_group”.
Set containers with privileged permissions.
Mount devices .
Control containers network affiliation.
Auto integrate with Dockerfile healthchecks to restart unhealthy containers.
There are 2 custom created services that are mandatory:
manager – a REST API endpoint to control nebula, fully stateless (all data stored in DB only).
worker – a container which periodically checks in with the manager and manages the worker server it runs on, one has to run on each worker, fully stateless.
There is also an optional third component (the reporter) which can be added to allow managed devices be quried about their state (this also requires adding a Kafka cluster to the design).
Due to clever use of TTL based memoization it’s possible to manage millions of devices with a single Nebula cluster without overloading the backend DB (or having it ridiculously large) & due to Kafka inspired monotonic ID you can rest easy knowing that the managed devices will always match the most recent configuration.
Example use cases
Apps with resource and\or traffic requirements so massive other orchestrators can’t handle (thousands of servers and\or tens or even hundreds of millions of requests per minute)
Managing apps that spans multiple regions and\or clouds from a single source with a single API call
IOT\POS\client deployments – a rather inventive use case which can allow you to deploy a new version to all of your clients (even if they range in the thousands) appliances with a single API call in minutes
SAAS providers – if you have a cluster per client (as you provide them with managed “private” instances) or such Nebula allows you to push new versions all your clients managed instances at once
A form of docker configuration management, think of it as a cross between Docker-Compose to Puppet\Chef only it also pushes changes in configurations to all managed servers.
Repo folder structure
manager – the api endpoint through which Nebula is controlled, includes manager Dockerfile & entire code structure
docs – docs (schematics, wishlist\todo’s, and API doc)
worker – the worker manager that manages individual Nebula workers, includes worker Dockerfile & entire code structure