Containerisation

ASAB is designed for deployment into containers such as LXC/LXD or Docker. It allows to build e.g. microservices that provides REST interface or consume MQ messages while being deployed into a container for a sake of the infrastructure flexibility.

ASAB in a LXC/LXD container

  1. Prepare LXC/LXD container based on Alpine Linux
$ lxc launch images:alpine/3.10 asab
  1. Swich into a container
$ lxc exec asab -- /bin/ash
  1. Prepare Python3 environment
$ apk update
$ apk upgrade
$ apk add --no-cache python3

$ python3 -m ensurepip
  1. Deploy ASAB
$ apk add --virtual .buildenv python3-dev gcc musl-dev git
$ pip3 install git+https://github.com/TeskaLabs/asab
$ apk del .buildenv
  1. Deploy dependencies
$ pip3 install python-daemon
  1. Use OpenRC to automatically start/stop ASAB application
$ vi /etc/init.d/asab-app

Adjust the example of OpenRC init file.

$ chmod a+x /etc/init.d/asab-app
$ rc-update add asab-app

Note: If you need to install python packages that require compilation using C compiler, you have to add following dependencies:

$ apk add --virtual .buildenv python3-dev
$ apk add --virtual .buildenv gcc
$ apk add --virtual .buildenv musl-dev

And removal of the build tools after pip install:

$ apk del .buildenv

Docker Remote API

In order for ASAB applications to read the Docker container name as well as other information related to the container to be used in logs, metrics and other analysis, the Docker Remote API must be enabled.

To do so:

  1. Open the docker service file
vi /lib/systemd/system/docker.service
  1. Find the line which starts with ExecStart and add -H=tcp://0.0.0.0:2375
  2. Save the file
  3. Reload the docker daemon and restart the Docker service
sudo systemctl daemon-reload && sudo service docker restart

Then in the ASAB application’s configuration, provide the Docker Remote API URL in docker_remote_api configuration option:

[general]
docker_remote_api=http://<YOUR_HOST_COMPUTER>:2375

Thus, the metric service as well as log manager can use the container name as hostname instead of container ID, which provides better readability when analyzing the logs and metrics, typically using InfluxDB and Grafana.