Application Deployment in Distributed IoT Infrastructures
Internet of Things (IoT) applications have been gaining more popularity in the last years, and their use is becoming more common in different segments like smart cities, smart agriculture, smart home, and industry (also known as industrial IoT). To follow this evolution, a diverse set of tools and technologies have been created to simplify the configuration and development of IoT applications. Despite that, a consolidated technology that permits the adoption of deployment techniques, used with success in web systems, like continuous integration and continuous delivery (CI/CD), does not exist yet. Another common characteristic in IoT systems is that many applications are constituted of services executed in heterogeneous environments like Cloud, Fog, and Mist, and the deployment of these services, in general, is made in a different way for each environment and is static (a service running in Fog can't be moved to Cloud for example).
This work aims to propose a solution to make static and dynamic deployment of services that compound IoT systems through the use of containers and a containers orchestrator, to control and coordinate all services. To extend the container orchestration to the edge, we added a new component to be responsible for handling communication and management of containers that run outside the Cloud. To deploy and assure that services are running in the correct environment, we present a plugin created to be added to a CI/CD tool, enabling communication to containers orchestrator by API, following a pre-defined configuration. The experiment shows interesting results, demonstrating that deployment in distributed environments is reliable and resilient, even in scenarios when it is needed to migrate data without interrupting the application.