kompose

module
v0.0.1-beta.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 4, 2016 License: Apache-2.0

README

Kubernetes compose (Kompose)

Build Status Join us on Slack

kompose is a tool to help users familiar with docker-compose move to Kubernetes. It takes a Docker Compose file and translates it into Kubernetes objects.

kompose is a convenience tool to go from local Docker development to managing your application with Kubernetes. We don't assume that the transformation from docker compose format to Kubernetes API objects will be perfect, but it helps tremendously to start Kubernetizing your application.

Download

Grab the latest release

Usage

Currently Kompose supports to transform either Docker Compose file (both of v1 and v2) and experimental Distributed Application Bundles into Kubernetes objects. There is a couple of sample files in the examples/ directory for testing. You will convert the compose or dab file to K8s objects with kompose convert.

$ cd examples/

$ ls
docker-compose.yml  docker-compose-bundle.dsb  docker-gitlab.yml  docker-voting.yml

$ kompose convert -f docker-gitlab.yml -y
file "redisio-svc.yaml" created
file "gitlab-svc.yaml" created
file "postgresql-svc.yaml" created
file "gitlab-deployment.yaml" created
file "postgresql-deployment.yaml" created
file "redisio-deployment.yaml" created

$ ls *.yaml
gitlab-deployment.yaml  postgresql-deployment.yaml  redis-deployment.yaml    redisio-svc.yaml  web-deployment.yaml
gitlab-svc.yaml         postgresql-svc.yaml         redisio-deployment.yaml  redis-svc.yaml    web-svc.yaml

You can try with a Docker Compose version 2 like this:

$ kompose convert --file docker-voting.yml
WARN[0000]: Unsupported key networks - ignoring
WARN[0000]: Unsupported key build - ignoring
file "worker-svc.json" created
file "db-svc.json" created
file "redis-svc.json" created
file "result-svc.json" created
file "vote-svc.json" created
file "redis-deployment.json" created
file "result-deployment.json" created
file "vote-deployment.json" created
file "worker-deployment.json" created
file "db-deployment.json" created

$ ls
db-deployment.json  docker-compose.yml         docker-gitlab.yml  redis-deployment.json  result-deployment.json  vote-deployment.json  worker-deployment.json
db-svc.json         docker-compose-bundle.dsb  docker-voting.yml  redis-svc.json         result-svc.json         vote-svc.json         worker-svc.json

Using --bundle, --dab to specify a DAB file as below:

$ kompose convert --bundle docker-compose-bundle.dsb
WARN[0000]: Unsupported key networks - ignoring
file "redis-svc.json" created
file "web-svc.json" created
file "web-deployment.json" created
file "redis-deployment.json" created

Alternate formats

The default kompose transformation will generate Kubernetes Deployments and Services, in json format. You have alternative option to generate yaml with -y. Also, you can alternatively generate Replication Controllers objects, Deamon Sets, or Helm charts.

$ kompose convert 
file "redis-svc.json" created
file "web-svc.json" created
file "redis-deployment.json" created
file "web-deployment.json" created

The *-deployment.json files contain the Deployment objects.

$ kompose convert --rc -y
file "redis-svc.yaml" created
file "web-svc.yaml" created
file "redis-rc.yaml" created
file "web-rc.yaml" created

The *-rc.yaml files contain the Replication Controller objects. If you want to specify replicas (default is 1), use --replicas flag: $ kompose convert --rc --replicas 3 -y

$ kompose convert --ds -y
file "redis-svc.yaml" created
file "web-svc.yaml" created
file "redis-daemonset.yaml" created
file "web-daemonset.yaml" created

The *-daemonset.yaml files contain the Daemon Set objects

If you want to generate a Chart to be used with Helm simply do:

$ kompose convert -c -y
file "web-svc.yaml" created
file "redis-svc.yaml" created
file "web-deployment.yaml" created
file "redis-deployment.yaml" created
chart created in "./docker-compose/"

$ tree docker-compose/
docker-compose
├── Chart.yaml
├── README.md
└── templates
    ├── redis-deployment.yaml
    ├── redis-svc.yaml
    ├── web-deployment.yaml
    └── web-svc.yaml

The chart structure is aimed at providing a skeleton for building your Helm charts.

Unsupported docker-compose configuration options

Currently kompose does not support the following Docker Compose options.

"build", "cap_add", "cap_drop", "cpuset", "cpu_shares", "cpu_quota", "cgroup_parent", "devices", "depends_on", "dns",
"dns_search", "domainname", "entrypoint", "env_file", "expose", "extends", "external_links", "extra_hosts", "hostname", "ipc",
"logging", "mac_address", "mem_limit", "memswap_limit", "network_mode", "networks", "pid", "security_opt", "shm_size",
"stop_signal", "volume_driver", "volumes_from", "uts", "read_only", "stdin_open", "tty", "user", "ulimits", "dockerfile",
"net", "args"

For example:

$ cat nginx.yml
nginx:
  image: nginx
  dockerfile: foobar
  build: ./foobar
  cap_add:
    - ALL
  container_name: foobar

$ kompose convert -f nginx.yml
WARN[0000] Unsupported key build - ignoring             
WARN[0000] Unsupported key cap_add - ignoring           
WARN[0000] Unsupported key dockerfile - ignoring

Bash completion

Running this below command in order to benefit from bash completion

$ PROG=kompose source script/bash_autocomplete

Building

Building with go
  • You need go v1.5
  • You need to set export GO15VENDOREXPERIMENT=1 environment variable
  • If your working copy is not in your GOPATH, you need to set it accordingly.
$ go build -tags experimental -o kompose ./cli/main

You need -tags experimental because the current bundlefile package of docker/libcompose is still experimental.

Building multi-platform binaries with make
  • You need make
$ make binary

Contributing and Issues

kompose is a work in progress, we will see how far it takes us. We welcome any pull request to make it even better. If you find any issues, please file it.

Community, discussion, contribution, and support

We follow the Kubernetes community principles.

Learn how to engage with the Kubernetes community on the community page.

You can reach the maintainers of this project at:

Code of conduct

Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.

Directories

Path Synopsis
cli
app

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL