Kompos - k8s cloud automation


License
Apache-2.0
Install
pip install kompos==0.4.2

Documentation

kompos

Build Status Docker pull License PyPI pyversions

kompos

Kompos is a configuration driven tool for provisioning and managing Kubernetes infrastructure across AWS and Azure. It uses a hierarchical folder structure and yaml files to store and generate configurations, with pluggable compositions that encapsulates the infrastructure code and state. Terraform and helmfile are supported as provisioners.

Below is a graphical representation of the data flow.

kompos-data-flow

Installation

NOTE: Only Python 3 is supported.

PyPI

pip install kompos

Locally for development

Using virtualenv

pip install virtualenv
virtualenv .env
source .env/bin/activate
(env) cd kompos/
(env) pip install --editable .

Hierarchical configuration

Kompos leverages himl to provide a hiera-like configuration structure.

Checkout the examples for more information.

Nix integration

With kompos you can leverage nix to pin your infrastructure code (i.e terraform & helmfile releases) on a specific version. This enables you to finely control your deployments and use different infrastructure versions per environment, cluster etc.

Prerequisites

Install nix and nix-prefetch-git.

$ curl -L https://nixos.org/nix/install | bash

$ nix-env -f '<nixpkgs>' -iA nix-prefetch-git

Configuration

The integration can be globally enabled or diabled with the flag nix: [true|false] and a disable overwrite with --no-nix argument. Below are the necessary parts of komposconfig regarding nix & versioning:

terraform:
  # This is the place to look for the terraform repo locally.
  # Used as the default if nix is not enabled.
  local_path: '/home/user/terraform-stack'

  # This is needed in case the modules are not in the root of the repo.
  root_path: 'src/terraform'

  repo:
    # This will be the name of the nix derivation for terraform.
    name: 'terraform-stack'

    # The repo we would like to version.
    url: "git@github.com:my-org/terraform-stack.git"

# Likewise for helmfile.
helmfile:
  local_path: '/home/user/helmfile-releases'
  root_path: 'src/helmfiles'

  repo:
    name: 'helmfile-releases'
    url: "git@github.com:my-org/helmfile-releases.git"

nix: true

And in the hierarchical configuration you'll need the following keys:

infrastructure:
  terraform:
    version: "0.1.0" # A git tag or a commit sha.

    # This is an optional field.
    # The sha256 hash of the repo provides data integrity and ensures that we
    # always get the same input.
    #
    # It can be omitted when you're using a tag that is periodically updated.
    # (e.g in a dev/nightly environment). Since this is a mandatory field for nix,
    # nix-prefetch-git will be used as a fallback to caclulate it.
    sha256: "ab9190b0ecc8060a54f1fac7de606e6b2c4757c227f2ce529668eb145d9a9516"

  # Likewise for helmfile.
  helmfile:
    version: "0.1.0"
    sha256: "139cd5119d398d06f6535f42d775986a683a90e16ce129a5fb7f48870613a1a5"

Docker Image

License

Apache License 2.0