Kurma is a container runtime built with extensibility and flexibility in mind. It focuses on "everything is a container" and uses this to enable plugins that run within Kurma, leaving Kurma easy and simple to deploy and manage. Configuring networking plugins or customizing how containers are instrumented is easily extensible.
Building Kurma is made possible by leveraging Docker. You may say "your container engine is built with another container?" Yep. Docker has great tooling for augmenting a developer workflow, such as Docker Toolbox. We leverage that rather than reinventing.
To develop and build against Kurma, all you will need is the following:
- Docker (if not on Linux, we recommend using Docker Toolbox)
- Go 1.6
Most compilation is done through Docker to ensure all compiling is done through our pre-built build environment images. This allows you to easily build Kurma on Linux even if you're running OS X. The CLI is still natively compiled, so if you're on OS X, you get a CLI built for OS X.
Makefile will automatically ensure you're running within Docker and map in
the code at the necessary location, set the GOPATH, and ensure users match.
For a list of some of the most common tasks, you can run
make help to see a
list and description of some of the tasks.
For local development, you should check out the
kurma repository within your
$GOPATH so that it is at
$GOPATH/src/github.com/kurma. You'll typically
need to run
make download to fetch some of the pre-compiled assets (busybox
image, CNI networking image), then run
make local to compile local binaries
make run to run the daemon mode. If on OS X, this will start the daemon in
Docker and print out how to connect. To shut down the server, simply press
Control-C and it will tear down all pods and exit.
$ git clone email@example.com:apcera/kurma.git $GOPATH/src/github.com/apcera/kurma $ cd $GOPATH/src/github.com/apcera/kurma $ make download ... $ make local ... $ make run Running kurmad ============================================================== Kurma remote API will be available at 172.17.0.2:12312 To connect with kurma-cli, please run: export KURMA_HOST=172.17.0.2 ============================================================== ...
The latest release images can be found on our website.
Kurma has both unit tests and integration tests. The unit tests are implemented in Go and can be ran using normal Go tooling.
The easiest way to run full unit tests would be to run
make test. This will
run the tests within a Docker image so that it can test on Linux and in the
proper build environment.
The integration tests focus on testing Kurma from the outside in. They are implemented in Ruby using the well known RSpec framework. The integration tests are focused on testing the daemon functionality via the API and CLI. It focuses on verifying the end-to-end functionality works as expected. Integration tests are ran on every pull request and master change, and test compatibility across each distribution that is officially supported.
The integration tests live under
testing/integration directory. They should
generally work on any recent version of Ruby, Rubygems, and Bundler. Our own
testing process involves using Ruby 2.2.4, Rubygems 2.6.1, and Bundler 1.11.2.
To run the integration tests, can run the following:
$ cd testing/integration $ bundle install $ bundle exec rake spec
The integration tests handle launching the currently compiled Kurma binaries
bin directory. It is necessary to run the tests from a Linux host, as
it does actively launch the daemon rather than connect to an outside one.