The CLARIN sysops team visited Eurac Research on the 4th and 5th of April 2018 in Bolzano, Italy, in order to exchange experiences on best practices in software deployment and containerization, including the use of, Docker, Kubernetes and on-premise GitLab installations.
CLARIN - Eurac Research Docker Kubernetes meeting
The first day we focussed on knowledge exchange. The Eurac Research team started by presenting their on-premise GitLab installation and continued with discussing kubernetes in general and the Eurac Research kubernetes setup specifically. The CLARIN team continued for the afternoon session, presenting their docker best practices, build workflow, deploy workflow and gitlab CI integration.
In the evening we went into town for dinner. We had a nice stroll throughout the center of town and enjoyed the scenery. Eventually we ended up at a restaurant where we enjoyed a nice pizza.
On the second day we started with a more in-depth look at how helm was used at Eurac Research to provide a templating solution, to allow for easy switching between different kubernetes clusters. E.g. simplify the workflow to deploy to a development and production cluster. We continued the day with a more hands-on approach where we installed a minicube cluster locally. In this local cluster we were able to experiment with the kubernetes basics, as discussed on the first day.
After getting comfortable with the basics we set out to make a demonstrator of a typical deployment workflow we encounter in the CLARIN infrastructure. A service is deployed with multiple instances on different hosts and updating such a service currently is a manual process. With kubernets deploying and managing multiple instance is fully automated. There is also support for rolling updates, but for our update process we typically want to be able to perform processing, such as restoring a backup, before starting the actual service when performing updates.
We ended up experimenting with the kubernetes rolling updates feature together with readiness and liveness probes to control when updated services where started and old services where killed. In the end we managed to create a workflow where we could issue a single command to update the docker image of a service and then kubernetes would take care of starting an additional container, or pod in kubernetes terminology, made sure it fully finished any processing before killing an old pod. This process would be automatically repeated until all pods would be updated, enabling us to perform a rolling update of multiple service instances with a single command.
The concrete outcomes of this exchange are the update workflow demonstrator mentioned above but we also decided to write a short paper, together with the Eurac Research colleagues, based on the discussions we had during these two days. For us, at the CLARIN ERIC, we will also use the knowledge in our evaluation of kubernetes to manage our infrastructure.