tvl-depot/docs/cluster-config.md
Vincent Ambo 4adc8f2c4c docs resource-sets: Document resource set structure
Documents the structure of resource sets and the fields necessary for including
them in cluster configurations.

Also adds some words about nested resource sets and the like.
2017-08-04 23:11:27 +02:00

2.3 KiB

Cluster configuration

Every cluster (or "environment") that requires individual configuration is specified in a very simple YAML file in Kontemplate.

An example file for a hypothetical test environment could look like this:

---
context: k8s.test.mydomain.com
global:
  clusterName: test-cluster
  defaultReplicas: 2
import:
  - test-secrets.yaml
include:
  - name: gateway
    path: tools/nginx
    values:
      tlsDomains:
        - test.oslo.pub
        - test.tazj.in
  - path: backend
    values:
      env: test
    include:
      - name: blog
        values:
          url: test.tazj.in
      - name: pub-service

Fields

This is documentation for the individual fields in a cluster context file.

context

The context field contains the name of the kubectl-context. You can list context names with 'kubectl config get-contexts'.

This must be set here so that Kontemplate can use the correct context when calling kubectl.

This field is required.

global

The global field contains a key/value map of variables that should be available to all resource sets in the cluster.

This field is optional.

import

The import field contains the file names of additional YAML or JSON files from which global variables should be loaded. Using this field makes it possible to keep certain configuration that is the same for some, but not all, clusters in a common place.

This field is optional.

include

The include field contains the actual resource sets to be included in the cluster.

Information about the structure of resource sets can be found in the resource set documentation.

This field is required.

External variables

As mentioned above, extra variables can be loaded from additional YAML or JSON files. Assuming you have a file called test-secrets.yaml which contains variables that should be shared between a test and dev cluster, you could include it in your context as such:

# test-secrets.yaml:
mySecretVar: foo-bar-12345

# test-cluster.yaml:
context: k8s.test.mydomain.com
include:
  - test-secrets.yaml

# dev-cluster.yaml:
context: k8s.dev.mydomain.com
include:
  - test-secrets.yaml

The variable mySecretVar is then available as a global variable.