Support Alpine Distro Base Images

Registered by Andre Pollard

Alpine Linux is a Linux distribution built around musl libc and BusyBox. The image is only 5 MB in size and has access to a package repository that is much more complete than other BusyBox based images. This makes Alpine Linux a great image base for utilities and even production applications. This enables each of our base images to be very small compared to the equivalent Ubuntu images which starts around 200 plus MB in size which could give us a 1000% plus savings on container sizes.

Blueprint information

Status:
Complete
Approver:
None
Priority:
Undefined
Drafter:
Andre Pollard
Direction:
Needs approval
Assignee:
None
Definition:
Obsolete
Series goal:
None
Implementation:
Unknown
Milestone target:
None
Completed by
Jeffrey Zhang

Related branches

Sprints

Whiteboard

There are numerous things which are still not supported on Alpine Linux. First of all, only the build type "source" would be possible to implement, since few of the services actually exist as a binary packages for Alpine Linux.

The 3rd party repositories which are being included in the "base" image, such as grafana, influxdb or kibana. None of those are available as packages nor external repositories for Alpine Linux. Docker images incorporating those services do exist on Docker Hub but would need to be carefully layered ontop of each other, which would result in a tedious and error-prone approach - if possible at all.

Secondly, the pip dependencies "python-qpid-proton" and thus "pyngus" of the "openstack-base" image can't be installed via pip on Alpine. This is because the installation of "python-qpid-proton" fails while compiling "proton-c" due to a missing (?) mutex function of musl libc, see [1] for a similar issue.

It was possible to build the "openstack-base" image by omitting the problematic libraries and services. The resulting size difference was 576MB based on Alpine 3.7 vs 716MB based on Ubuntu 16.04. Ontop of this image, it was possible to create simple services (e.g. Barbican) which don't use any of the problematic dependencies.

However, a full support for Alpine Linux as a base distro is still impossible due to crucial libraries being missing or incompatible. Due to the layering nature of the Docker filesystem [2], the size benefit of an Alpine-based "openstack-base" image is lost as soon as any other service on the same host still depends on another "openstack-base" image (e.g. based on Ubuntu) because it is not compatible with the Alpine base. In conclusion, there is little to no benefit of providing an Alpine base option for just a small subset of OpenStack services in Kolla.

[1] http://qpid.2158936.n2.nabble.com/Compiling-proton-c-for-Linux-Alpine-td7669810.html
[2] https://www.eknori.de/2017-08-21/what-is-the-size-of-a-docker-container/

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.