Katenary is a tool to help transforming docker-compose files to a working Helm Chart for Kubernetes.
Install
If you've got podman or docker, you can build katenary by using:
make build
You can then install it with:
make install
It will use the default PREFIX (~/.local/) to install the binary in the bin subdirectory. You can force the PREFIX value at install time, but maybe you need to use "sudo":
sudo make install PREFIX=/usr/local
Usage
Usage of katenary:
-appname string
Give the helm chart app name (default "MyApp")
-appversion string
Set the chart appVersion (default "0.1.1")
-compose string
set the compose file to parse (default "docker-compose.yaml")
-version
Show version and exist
Katenary will try to find a docker-compose.yaml file inside the current directory. It will then delete the chart directory to create a new Helm Chart.
It's important that you keep in mind that katenary will not alert you (for now) that it will remove the
chartdirectory !
It creates a subdirectory inside chart that is named with the appname option (default is MyApp)
What can be interpreted by Katenary:
- Services with "image" section (cannot work with "build" section)
- Named Volumes are transformed to persistent volume claims - note that local volume will break the transformation to Helm Chart because there is (for now) no way to make it working (see below for resolution)
- if
portsand/orexposesection, katenary will create Services and bind the port to the corresponding container port depends_onwill add init containers to wait for the depending service (using the first port)- some labels can help to bind values:
katernay.io/expose-ingress: truewill expose the first port or expose to an ingresskaternay.io/to-service: VARNAMEwill convert the value to a variable{{ .Release.Name }}-VARNAME- it's usefull when you want to pass the name of a service as a variable (think about the service name for mysql to pass to a container that wants to connect to this)
Exemple of a possible docker-compose.yaml file:
version: "3"
services:
webapp:
image: php:7-apache
environment:
# note that "database" is a service name
DB_HOST: database
expose:
- 80
depends_on:
# this will create a init container waiting for 3306 port
# because it's the "exposed" port
- database
labels:
# explain to katenary that "DB_HOST" value is variable (using release name)
katernay.io/to-servie: DB_HOST
database:
image: mariabd:10
environment:
MARIADB_ROOT_PASSWORD: foobar
expose:
# required to make katenary able to create the init container
- 3306