Deploy Grafana Mimir with Jsonnet and Tanka

You can use Tanka and jsonnet-bundler to generate Kubernetes YAML manifests from the jsonnet files.

  1. Install tanka and jb:

    Follow the steps at If you have go installed locally you can also use:

    # make sure to be outside of GOPATH or a go.mod project
    go install
    go install
  2. Set up a Jsonnet project, based on the example that follows:

    • Initialize Tanka
    • Install Grafana Mimir and Kubernetes Jsonnet libraries
    • Set up an environment
    #!/usr/bin/env bash
    # SPDX-License-Identifier: AGPL-3.0-only
    set -e
    # Initialise the Tanka.
    mkdir jsonnet-example && cd jsonnet-example
    tk init --k8s=1.21
    # Install Mimir jsonnet.
    jb install
    # Use the provided example.
    cp vendor/mimir/mimir-manifests.jsonnet.example environments/default/main.jsonnet
    # Generate the YAML manifests.
    export PAGER=cat
    tk show environments/default
  3. Generate the Kubernetes YAML manifests and store them in the ./manifests directory:

    # Generate the YAML manifests:
    export PAGER=cat
    tk show environments/default
    tk export manifests environments/default
  4. Configure the environment specification file at environments/default/spec.json.

    To learn about how to use Tanka and to configure the spec.json file, see Using Jsonnet: Creating a new project.

  5. Deploy the manifests to a Kubernetes cluster, in one of two ways:

    • Use the tk apply command.

      Tanka supports commands to show the diff and apply changes to a Kubernetes cluster:

      # Show the difference between your Jsonnet definition and your Kubernetes cluster:
      tk diff environments/default
      # Apply changes to your Kubernetes cluster:
      tk apply environments/default
    • Use the kubectl apply command.

      You generated the Kubernetes manifests and stored them in the ./manifests directory in the previous step.

      You can run the following command to directly apply these manifests to your Kubernetes cluster:

      # Review the changes that will apply to your Kubernetes cluster:
      kubectl apply --dry-run=client -k manifests/
      # Apply the changes to your Kubernetes cluster:
      kubectl apply -k manifests/

    Note: The generated Kubernetes manifests create resources in the default namespace. To use a different namespace, change the namespace configuration option in the environments/default/main.jsonnet file, and re-generate the Kubernetes manifests.

    Note: A Jsonnet-based installation uses etcd for the HA tracker by default. The Jsonnet-based installation creates the etcd using the etcd-operator. Before applying the tk apply or kubectl apply command , make sure that you have the etcd-operator running in your Kubernetes cluster.