Skip to content
Snippets Groups Projects
README.md 2.84 KiB
Newer Older
Angus Lees's avatar
Angus Lees committed
# kubecfg

Angus Lees's avatar
Angus Lees committed
[![Build Status](https://travis-ci.org/ksonnet/kubecfg.svg?branch=master)](https://travis-ci.org/ksonnet/kubecfg)

Angus Lees's avatar
Angus Lees committed
A tool for managing Kubernetes resources as code.

`kubecfg` allows you to express the patterns across your
infrastructure and reuse these powerful "templates" across many
services, and then manage those templates as files in version control.
The more complex your infrastructure is, the more you will gain from
using kubecfg.

Angus Lees's avatar
Angus Lees committed
Status: Basic functionality works, and the tool is usable.  The focus
now is on clearer error reporting and advanced features.
Angus Lees's avatar
Angus Lees committed

Yes, Google employees will recognise this as being very similar to a
similarly-named internal tool ;)

## Install

Pre-compiled executables exist for some platforms on
the [Github releases](https://github.com/ksonnet/kubecfg/releases)
page.

Angus Lees's avatar
Angus Lees committed
To build from source:

```console
% PATH=$PATH:$GOPATH/bin
% go get github.com/ksonnet/kubecfg
Angus Lees's avatar
Angus Lees committed
```

Requires golang >=1.7 and a functional cgo environment (C++ with libstdc++).
Angus Lees's avatar
Angus Lees committed
Note that recent OSX environments
[require golang >=1.8.1](https://github.com/golang/go/issues/19734) to
avoid an immediate `Killed: 9`.
Angus Lees's avatar
Angus Lees committed

## Quickstart

```console
Angus Lees's avatar
Angus Lees committed
# Include <kubecfg.git>/lib in kubecfg/jsonnet library search path.
# Can also use explicit `-J` args everywhere.
Angus Lees's avatar
Angus Lees committed
% export KUBECFG_JPATH=/path/to/kubecfg/lib
Angus Lees's avatar
Angus Lees committed

# Show generated YAML
% kubecfg show -o yaml examples/guestbook.jsonnet
Angus Lees's avatar
Angus Lees committed

# Create resources
% kubecfg update examples/guestbook.jsonnet

# Modify configuration (downgrade gb-frontend image)
% sed -i.bak '\,gcr.io/google-samples/gb-frontend,s/:v4/:v3/' examples/guestbook.jsonnet
# See differences vs server
% kubecfg diff examples/guestbook.jsonnet
Angus Lees's avatar
Angus Lees committed

# Update to new config
% kubecfg update examples/guestbook.jsonnet

# Clean up after demo
% kubecfg delete examples/guestbook.jsonnet
Angus Lees's avatar
Angus Lees committed
```

## Features

- Supports JSON, YAML or jsonnet files (by file suffix).
- Best-effort sorts objects before updating, so that dependencies are
  pushed to the server before objects that refer to them.
- Additional jsonnet builtin functions. See `lib/kubecfg.libsonnet`.
Angus Lees's avatar
Angus Lees committed

## Infrastructure-as-code Philosophy

The idea is to describe *as much as possible* about your configuration
as files in version control (eg: git).

Changes to the configuration follow a regular review, approve, merge,
etc code change workflow (github pull-requests, phabricator diffs,
etc).  At any point, the config in version control captures the entire
desired-state, so the system can be easily recreated in a QA cluster
or to recover from disaster.

### Jsonnet

Kubecfg relies heavily on [jsonnet](http://jsonnet.org/) to describe
Kubernetes resources, and is really just a thin Kubernetes-specific
wrapper around jsonnet evaluation.  You should read the jsonnet
[tutorial](http://jsonnet.org/docs/tutorial.html), and skim the functions available in the jsonnet [`std`](http://jsonnet.org/docs/stdlib.html)
Angus Lees's avatar
Angus Lees committed
library.