All Projects → kapicorp → Kapitan

kapicorp / Kapitan

Licence: apache-2.0
Generic templated configuration management for Kubernetes, Terraform and other things

Programming Languages

python
139335 projects - #7 most used programming language
python3
1442 projects
declarative
70 projects

Projects that are alternatives of or similar to Kapitan

Terrahub
Terraform Automation and Orchestration Tool (Open Source)
Stars: ✭ 148 (-89.3%)
Mutual labels:  terraform, devops, orchestration
Config Lint
Command line tool to validate configuration files
Stars: ✭ 118 (-91.47%)
Mutual labels:  terraform, yaml, devops
Terraboard
🌍 📋 A web dashboard to inspect Terraform States
Stars: ✭ 1,192 (-13.81%)
Mutual labels:  terraform, devops, devops-tools
Terracognita
Reads from existing Cloud Providers (reverse Terraform) and generates your infrastructure as code on Terraform configuration
Stars: ✭ 452 (-67.32%)
Mutual labels:  terraform, devops, devops-tools
Automatron
Infrastructure monitoring framework turning DevOps runbooks into automated actions
Stars: ✭ 381 (-72.45%)
Mutual labels:  devops, devops-tools, jinja2
Ops Cli
Ops - cli wrapper for Terraform, Ansible, Helmfile and SSH for cloud automation
Stars: ✭ 152 (-89.01%)
Mutual labels:  terraform, helm, jinja2
Devspace
DevSpace - The Fastest Developer Tool for Kubernetes ⚡ Automate your deployment workflow with DevSpace and develop software directly inside Kubernetes.
Stars: ✭ 2,559 (+85.03%)
Mutual labels:  devops, devops-tools, helm
Lxdock
Build and orchestrate your development environments with LXD - a.k.a. Vagrant is Too Heavy™
Stars: ✭ 350 (-74.69%)
Mutual labels:  devops, devops-tools, orchestration
Rundeck
Enable Self-Service Operations: Give specific users access to your existing tools, services, and scripts
Stars: ✭ 4,426 (+220.03%)
Mutual labels:  devops, devops-tools, orchestration
Runbook
A framework for gradual system automation
Stars: ✭ 531 (-61.61%)
Mutual labels:  devops, devops-tools, orchestration
Pynms
A vendor-agnostic NMS for carrier-grade network simulation and automation
Stars: ✭ 73 (-94.72%)
Mutual labels:  yaml, jinja2
Terraform Aws Couchbase
Reusable infrastructure modules for running Couchbase on AWS
Stars: ✭ 73 (-94.72%)
Mutual labels:  terraform, devops
Module Security Public
The public documentation for the gruntwork-io/module-security repo, which contains packages for setting up best practices for managing secrets, credentials, and servers
Stars: ✭ 67 (-95.16%)
Mutual labels:  terraform, devops
Cintodeutilidadesdocker
My Docker templates repository 🐳 ☁️ 🐳
Stars: ✭ 74 (-94.65%)
Mutual labels:  devops, devops-tools
Azure
Azure-related repository
Stars: ✭ 78 (-94.36%)
Mutual labels:  devops, devops-tools
Lynis
Lynis - Security auditing tool for Linux, macOS, and UNIX-based systems. Assists with compliance testing (HIPAA/ISO27001/PCI DSS) and system hardening. Agentless, and installation optional.
Stars: ✭ 9,137 (+560.67%)
Mutual labels:  devops, devops-tools
Terraform Eks
Terraform for AWS EKS
Stars: ✭ 82 (-94.07%)
Mutual labels:  terraform, devops
Envkey App
Secure, human-friendly, cross-platform secrets and config.
Stars: ✭ 83 (-94%)
Mutual labels:  devops, devops-tools
Roll
AWS Blue/Green deployment using Clojure flavoured devops
Stars: ✭ 66 (-95.23%)
Mutual labels:  terraform, devops
Devops Kompose
[DEPRECATED] DevOps tools on Kubernetes with Helm charts
Stars: ✭ 78 (-94.36%)
Mutual labels:  devops, helm

Kapitan: Generic templated configuration management for Kubernetes, Terraform and other things

Build Status Docker Releases Docker Image Size

Kapitan is the tool to help you manage the complexity of your configuration using an inventory and a choice of templates like generators, jsonnet, kadet, jinja2 and helm.

Use Kapitan to build an inventory which you can then use to drive templates for your Kubernetes manifests, your documentation, your Terraform configuration or even simplify your scripts.

Community

How is it different from helm and kustomize? Please look at our FAQ!

Key Concepts

Inventory

The inventory is the heart of Kapitan. Using simple reusable yaml files (classes), you can represent as a single source of truth everything that matters in your setup, for instance:

  • kubernetes components definitions
  • terraform resources
  • business concepts
  • documentation and tooling
  • ...anything else you want!

Once you have it defined, you can reuse this data to feed into any of the many templating backends available to Kapitan.

Generators

The simplest way to get started with Kapitan. Generators are universal templates that are a simplified way to generate configuration files (for instance, Kubernetes manifests) without using any templating at all.

Check out our reference repository to get started: Kapitan Reference

Read our blog post Keep your ship together with Kapitan

Jsonnet or Kadet templates backends

For more complex scenarios, you have a choice of directly using our 2 main templating engines.

You can use either Jsonnet (tapping into an ever growing number of libraries and examples) or our Python based Kadet to create json/yaml based configurations (e.g. Kubernetes, Terraform);

Jinja2

Good old Jinja to create text based templates for scripts and documentation; Don't underestimate the power of this very simple approach to create templated scripts and documentation!

Kapitan Declarative Secrets

Use Kapitan to securely generate and manage secrets with GPG, AWS KMS, gCloud KMS and Vault.

Use Tesoro, our Kubernetes Admission Controller, to complete your integration with Kubernetes for secure secret decryption on-the-fly.

Quickstart

Docker (recommended)

docker run -t --rm -v $(pwd):/src:delegated kapicorp/kapitan -h

On Linux you can add -u $(id -u) to docker run to preserve file permissions.

For CI/CD usage, check out CI.md

Pip

Kapitan needs Python 3.6.

Install Python 3.6:

  • Linux: sudo apt-get update && sudo apt-get install -y python3.6-dev python3-pip python3-yaml
  • Mac: brew install python3 libyaml

Install Kapitan:

User ($HOME/.local/lib/python3.6/bin on Linux or $HOME/Library/Python/3.6/bin on macOS):

pip3 install --user --upgrade kapitan

System-wide (not recommended):

sudo pip3 install --upgrade kapitan

Standalone binary

From v0.24.0, kapitan is also available as a standalone binary which you can download from the releases page. The platform currently supported is Linux amd64.

Example

The example below compiles 2 targets inside the examples/kubernetes folder. Each target represents a different namespace in a minikube cluster.

These targets generate the following resources:

  • Kubernetes Namespace for the targets
  • Kubernetes StatefulSet for ElasticSearch Master node
  • Kubernetes StatefulSet for ElasticSearch Client node
  • Kubernetes StatefulSet for ElasticSearch Data node
  • Kubernetes Service to expose ElasticSearch discovery port
  • Kubernetes Service to expose ElasticSearch service port
  • Kubernetes StatefulSet for MySQL
  • Kubernetes Service to expose MySQL service port
  • Kubernetes Secret for MySQL credentials
  • Scripts to configure kubectl context to control the targets and helpers to apply/delete objects.
  • Documentation

demo

$ cd examples/kubernetes

$ kapitan compile
Compiled minikube-mysql
Compiled minikube-es

Documentation

Getting Started

Kapitan features

Miscellaneous

Examples

Credits

FAQ

Why do we prefer Kapitan to Helm?

Before developing Kapitan, we turned to Helm in an attempt to improve our old Jinja based templating system.

We quickly discovered that Helm did not fit well with our workflow, for the following reasons (which were true at the time of the evaluation):

  • Helm uses Go templates to define Kubernetes (yaml) manifests. We were already unsatisfied by using Jinja and we did not see a huge improvement from our previous system, the main reason being: YAML files are not suitable to be managed by text templating frameworks.
  • Helm does not have a solution for sharing values across charts, if not through subcharts. We wanted to be able to have one single place to define all values for all our templates. Sharing data between charts felt awkward and complicated.
  • Helm is component/chart based. We wanted to have something that would treat all our deployments as a whole.
  • We did not fancy the dependency on the tiller.

In short, we feel Helm is trying to be apt-get for Kubernetes charts, while we are trying to take you further than that.

Why do I need Kapitan?

With Kapitan, we worked to de-compose several problems that most of the other solutions are treating as one.

  1. Kubernetes manifests: We like the jsonnet approach of using json as the working language. Jsonnet allows us to use inheritance and composition, and hide complexity at higher levels.

  2. Configuration files: Most solutions will assume this problem is solved somewhere else. We feel Jinja (or your template engine of choice) have the upper hand here.

  3. Hierarchical inventory: This is the feature that sets us apart from other solutions. We use the inventory (based on reclass) to define variables and properties that can be reused across different projects/deployments. This allows us to limit repetition, but also to define a nicer interface with developers (or CI tools) which will only need to understand YAML to operate changes.

  4. Secrets: We manage most of our secrets with kapitan using the GPG, Google Cloud KMS and AWS KMS integrations. Keys can be setup per class, per target or shared so you can easily and flexibly manage access per environment. They can also be dynamically generated on compilation, if you don't feel like generating random passwords or RSA private keys, and they can be referenced in the inventory like any other variables. We have plans to support other providers such as Vault, in addition to GPG, Google Cloud KMS and AWS KMS.

  5. Canned scripts: We treat scripts as text templates, so that we can craft pre-canned scripts for the specific target we are working on. This can be used for instance to define scripts that setup clusters, contexts or allow running kubectl with all the correct settings. Most other solutions require you to define contexts and call kubectl with the correct settings. We take care of that for you. Less ambiguity, fewer mistakes.

  6. Documentation: We also use templates to create documentation for the targets we deploy. Documentation lived alongside everything else and it is treated as a first class citizen. We feel most other solutions are pushing the limits of their capacity in order to provide for the above problems. Helm treats everything as a text template, while jsonnet tries to do everything as json. We believe that these approaches can be blended in a powerful new way, glued together by the inventory.

Related projects

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].