Report on the research done in July 2018
The first week of July was dedicated to designing the structure of OpenAppStack. More specifically, we focused on how applications can be built, configured and delivered to people’s own OpenAppStack instance automatically and withouth breaking running systems. We quickly arrived at the conclusion that by using Docker containers it should be possible to have a general approach for application building, configuring and deployment which is at the same time widely adopted by many application developers already.
For that reason, the rest of the month was dedicated to familiarising our team with Docker and the many orchestration tools that exist around it. We have mainly looked at the possibility of using Kubernetes, Docker’s built in ‘Swarm’ mode and where other server management tools like Ansible might come in. Furthermore, a part of the team dedicated their time to a well deserved holiday.
This report shows some of our recent findings. Because our team had limited Docker experience at the start of this project, some of this might come as no surprise to more experienced readers. If we are missing something, please let us know!
Some configuration details (like which port gets used for specific connections) can be set up before a Docker container is built, because they can be set to a fixed value for any deployment. Part of the configuration, like a hostname for example, needs to be configured upon deployment.
Many existing docker containers allow configuring the container when you start it, for example by providing environment variables. These variables can also be provided with
docker config when you use Swarm, or with
ConfigMaps when you use Kubernetes.
We are still looking for the best method for OAS users to supply these configuration details. We will probably have to find a balance between which things can be configured by a user and keeping OAS a simple platform that can be installed without any system engineers present.
OpenAppStack strives to automatically update the applications it supplies its users with. This can be achieved by periodically automatically re-building application containers. Depending on the application, new installation packages or source code can be used to build these new containers, often without changing the Dockerfile or configuration details. After building the new container, it can be tested automatically as well.
After a container has been rebuilt and tested, the new containers can be downloaded and used to replace the old containers on the VPSs that run OpenAppStack. This will happen on a time-interval specified by the person managing OpenAppStack.
For making a proof of concept, we have selected some guinea pig applications. They range from a mostly stateless video conferencing application to a cloud storage application, so we can test different features and dependency integrations on the different docker extensions we are researching.
We are currently in the process of making Docker containers for these applications. We are investigating if ansible-container can be used to re-use our already existing Ansible playbooks. Furthermore, we are integrating and configuring them with Kubernetes and Docker Swarm to test the capabilities of both these systems and see what is the best option for OpenAppStack.