How is this different from
Tanka aims to be a fully compatible, drop-in replacement for the main workflow
In general, both tools are very similar when it comes to how they handle Jsonnet and apply to a Kubernetes cluster.
ksonnet included a rich code generator for establishing a CLI based
workflow for editing Kubernetes objects. It also used to manage dependencies
itself and had a lot of concepts for different levels of abstractions. When
designing Tanka, we felt these add more complexity for the user than they
provide additional value. To keep Tanka as minimal as possible, these are not
available and are not likely to be ever added.
Why not Helm?¶
Helm relies heavily on string templating
.yaml files. We feel this is the
wrong way to approach the absence of abstractions inside of
yaml, because the
templating part of the application has to idea of the structure and syntax of yaml.
This makes debugging very hard. Furthermore,
helm is not able to provide an
adequate solution for edge cases. If I wanted to set some parameters that are
not already implemented by the Chart, I have no chance but modifying the Chart first.
Jsonnet on the other hand got you covered by supporting mixing (patching, deep-merging) objects on top of the libraries output if required.
What is Jsonnet?¶
Jsonnet is a data templating language, originally created by Google.
It is a superset of JSON, which adds common structures from full programming languages to data modeling. Because it being a superset of JSON and ultimately always compiling to JSON, it is guaranteed that the output will be valid JSON (or YAML).
By allowing functions and imports, rich abstraction is possible, even across project boundaries.
For more, refer to the official documentation: https://jsonnet.org/