Lokomotive Tinkerbell configuration reference

Introduction

This configuration reference provides information on configuring a Lokomotive cluster on bare metal using Tinkerbell with all the configuration options available to the user.

Prerequisites

  • lokoctl installed locally
  • kubectl installed locally to access the Kubernetes cluster.

Configuration

To create a Lokomotive cluster, we need to define a configuration.

Example configuration file:

# mycluster.lokocfg
variable "state_s3_bucket" {}
variable "state_s3_key" {}
variable "state_s3_region" {}
variable "lock_dynamodb_table" {}

backend "s3" {
  bucket         = var.state_s3_bucket
  key            = var.state_s3_key
  region         = var.state_s3_region
  dynamodb_table = var.lock_dynamodb_table
}

# backend "local" {
#   path = "path/to/local/file"
#}

variable "asset_dir" {}
variable "cluster_name" {}
variable "dns_zone" {}
variable "ssh_public_keys" {}
variable "controller_ip_addresses" {}
variable "controller_clc_snippets" {}
variable "controller_flatcar_install_base_url" {}
variable "os_channel" {}
variable "os_version" {}
variable "hosts_cidr" {}
variable "flatcar_image_path" {}
variable "pool_path" {}
variable "enable_aggregation" {}
variable "enable_reporting" {}
variable "pod_cidr" {}
variable "service_cidr" {}
variable "cluster_domain_suffix" {}
variable "certs_validity_period_hours" {}
variable "network_mtu" {}
variable "disable_self_hosted_kubelet" {}
variable "ip_addresses" {}
variable "flatcar_install_base_url" {}
variable "clc_snippets" {}
variable "labels" {}
variable "taints" {}

cluster "tinkerbell" {
  asset_dir = var.asset_dir

  name = var.cluster_name

  dns_zone = var.dns_zone

  ssh_public_keys = var.ssh_public_keys

  controller_ip_addresses = var.controller_ip_addresses

  controller_clc_snippets = var.controller_clc_snippets

  controller_flatcar_install_base_url = var.controller_flatcar_install_base_url

  os_channel = var.os_channel

  os_version = var.os_version

  experimental_sandbox {
    hosts_cidr         = var.hosts_cidr
    flatcar_image_path = var.flatcar_image_path
    pool_path          = var.pool_path
  }

  enable_aggregation = var.enable_aggregation

  disable_self_hosted_kubelet = var.disable_self_hosted_kubelet

  enable_reporting = var.enable_reporting

  pod_cidr = var.pod_cidr

  service_cidr = var.service_cidr

  cluster_domain_suffix = var.cluster_domain_suffix

  certs_validity_period_hours = var.certs_validity_period_hours

  network_mtu = var.network_mtu

  disable_self_hosted_kubelet = var.disable_self_hosted_kubelet

  worker_pool "pool1" {
    ip_addresses = var.ip_addresses

    ssh_public_keys = var.ssh_public_keys

    os_channel = var.os_channel

    os_version = var.os_version

    flatcar_install_base_url = var.flatcar_install_base_url

    clc_snippets = var.clc_snippets

    labels = var.labels

    taints = var.taints
  }
}

Attribute reference

Argument Description Default Type Required
asset_dir Location where Lokomotive stores cluster assets. - string true
name Name of the cluster. - string true
dns_zone DNS Zone name which will be used for cluster DNS entries. E.g. If you set it to “example.com”, then <name>.example.com must be set to point to controller_ip_addresses. With experimental_sandbox DNS entries are set automatically. - string true
ssh_public_keys List of SSH public keys for user core on controller nodes. Each element must be specified in a valid OpenSSH public key format, as defined in RFC 4253 Section 6.6, e.g. “ssh-rsa AAAAB3N…”. - list(string) true
controller_ip_addresses List of IP addresses of Tinkerbell hardware to be used for controller nodes. With experimental_sandbox, machines will be created with these IP addresses. - list(string) true
controller_clc_snippets Controller Flatcar Container Linux Config snippets. [] list(string) false
controller_flatcar_install_base_url URL passed to the flatcar-install script to fetch Flatcar images from. - string false
os_channel Flatcar Container Linux channel to install from (stable, beta, alpha, edge). “stable” string false
os_version Flatcar Container Linux version to install. Version such as “2303.3.1” or “current”. “current” string false
experimental_sandbox Configuration block for experimental local Tinkerbell sandbox setup using libvirt. - object false
experimental_sandbox.hosts_cidr CIDR for all hosts in the cluster, which will be NATed to the outside world for internet access. - string true
experimental_sandbox.flatcar_image_path Absolute path on the local filesystem to an unpacked Flatcar QEMU image, which will be used as a base OS image for Tinkerbell provisioner server. - string true
`experimental_sandbox.pool_path | Absolute path on the local filesystem where all VM disk images will be stored. At least 25GB of free disk space is required. | - | string | true |
enable_aggregation Enable the Kubernetes Aggregation Layer. true bool false
enable_reporting Enables usage or analytics reporting to upstream. false bool false
pod_cidr CIDR IPv4 range to assign Kubernetes pods. “10.2.0.0/16” string false
service_cidr CIDR IPv4 range to assign Kubernetes services. “10.3.0.0/16” string false
cluster_domain_suffix Cluster’s DNS domain. “cluster.local” string false
certs_validity_period_hours Validity of all the certificates in hours. 8760 number false
network_mtu Physical Network MTU. 1500 number false
disable_self_hosted_kubelet If true, self-hosted kubelet won’t be installed on the cluster. false bool false
worker_pool Configuration block for worker pools. There can be more than one. - list(object) true
worker_pool.ip_addresses List of IP addresses of Tinkerbell hardware to be used for worker pool nodes. With experimental_sandbox, machines will be created with these IP addresses. - list(string) true
worker_pool.ssh_public_keys List of SSH public keys for user core on worker pool nodes. Each element must be specified in a valid OpenSSH public key format, as defined in RFC 4253 Section 6.6, e.g. “ssh-rsa AAAAB3N…”. [] list(string) false
worker_pool.os_channel Flatcar Container Linux channel to install from (stable, beta, alpha, edge). “stable” string false
worker_pool.os_version Flatcar Container Linux version to install. Version such as “2303.3.1” or “current”. “current” string false
worker_pool.flatcar_install_base_url URL passed to flatcar-install script to fetch Flatcar images from. - string false
worker_pool.clc_snippets Flatcar Container Linux Config snippets for nodes in the worker pool. [] list(string) false
worker_pool.labels Map of extra Kubernetes Node labels for worker nodes. - map(string) false
worker_pool.taints Map of Taints to assign to worker nodes. - map(string) false

Applying

To create the cluster, execute the following command:

lokoctl cluster apply

Destroying

To destroy the Lokomotive cluster, execute the following command:

lokoctl cluster destroy --confirm