Tanka is a composable configuration utility for Kubernetes. It leverages the Jsonnet language to realize flexible, reusable and concise configuration.
- 🔁
ksonnet
drop-in replacement: Tanka aims to provide the same workflow asksonnet
:show
,diff
andapply
are just where you expect them. - 🔩 integrates with the ecosystem: Tanka doesn't re-invent the
wheel. It rather makes heavy use of what is already there:
jsonnet-bundler
for package management andkubectl
for communicating with Kubernetes clusters. - 🔨 powerful: Being a
jsonnet
-compatibility layer for Kubernetes, it removes the limitations of static (or template-based) configuration languages. - 🚀 used in production: We use Tanka internally at Grafana Labs for all of our Kubernetes configuration needs.
- ❤️ fully open-source: This is an open-source project. It is free as in beer and as in speech and this will never change.
Head over to the Releases section and download the most latest release of Tanka for your OS and arch.
Then check everything is working correctly with
$ tk --version
tk version v0.3.0
It is also recommended to install Jsonnet bundler:
$ go get -u github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb
To start from scratch with the recommended directory structure, do the following:
# create a directory and enter it
$ mkdir poetry && cd poetry
# initialize the Tanka application
$ tk init
As an example, Promtail is being deployed using Tanka now.
After you initialized the directory structure, install the required libraries
using jb
:
# Ksonnet kubernetes libraries
$ jb install github.com/ksonnet/ksonnet-lib/ksonnet.beta.4/k.libsonnet
$ jb install github.com/ksonnet/ksonnet-lib/ksonnet.beta.4/k8s.libsonnet
# Promtail library
$ jb install github.com/grafana/loki/production/ksonnet/promtail
Then, replace the contents of environments/default/main.jsonnet
with the
following:
local promtail = import 'promtail/promtail.libsonnet';
promtail + {
_config+:: {
namespace: 'loki',
promtail_config+: {
clients: [
{
scheme:: 'https',
hostname:: 'logs-us-west1.grafana.net',
username:: 'user-id',
password:: 'password',
external_labels: {},
}
],
container_root_path: '/var/lib/docker',
},
},
}
As a last step, fill add the correct spec.apiServer
and spec.namespace
to
environments/default/spec.json
:
{
"apiVersion": "tanka.dev/v1alpha1",
"kind": "Environment",
"spec": {
"apiServer": "https://localhost:6443",
"namespace": "default"
}
}
Now use tk show environments/default
to see the yaml
, and
tk apply environments/default
to apply it to the cluster.
Congratulations! You have successfully set up your first application using Tanka 🎉
- https://jsonnet.org/, the official Jsonnet documentation provides lots of examples on how to use the language.
- https://github.com/grafana/jsonnet-libs: Grafana Labs' Jsonnet libraries are a rich set of configuration examples compatible with Tanka.
Licensed Apache 2.0, see LICENSE.