v1alpha1 Reference

Talos User Data is responsible for the host and Kubernetes configuration, and it is independent of other cloud init data.

Differences from v0

The main driver in introducing a new configuration file format is to reduce the complexity and make it more approachable. The redesign proposal can be found here. The major change between these two versions is the introduction of machine and cluster configuration objects. Machine configuration data deals with the configuration of the host itself whereas cluster configuration data deals with the configuration of the cluster on top of Talos ( ex, Kubernetes configuration ).

Version

Version represents the Talos configuration version.

This denotes what the schema of the configuration file is.

version: v1alpha1

Machine Configuration

machine:
  type: string
  token: string
  ca:
    crt: string ( base64 encoded certificate )
    key: string ( base64 encoded key )
  kubelet: (optional)
    image: string
    extraArgs: []string
  network: (optional)
    hostname: string
    interfaces:
      - interface: string
        cidr: string
        dhcp: bool
        ignore: bool
  install: (optional)
    disk: string
    extraKernelArgs: []string
    image: string
    bootloader: bool
    wipe: bool
    force: bool

machine.type

type defines the type/role of a node.

Acceptable values are: -init -controlplane -worker

Init

Init node type designates the first control plane node to come up. You can think of it like a bootstrap node. This node will perform the initial steps to bootstrap the cluster – generation of TLS assets, starting of the control plane, etc.

Control Plane

Control Plane node type designates the node as a control plane member. This means it will host etcd along with the Kubernetes master components such as API Server, Controller Manager, Scheduler.

Worker

Worker node type designates the node as a worker node. This means it will be an available compute node for scheduling workloads.

machine.token

token is used for authentication to trustd to confirm the node’s identity.

machine.kubelet

kubelet is used to provide some additional options to the kubelet.

machine.kubelet.image

image is used to supply a hyperkube image location.

machine.kubelet.extraArgs

extraArgs is used to supply kubelet with additional startup command line arguments.

machine.ca

ca handles the certificate configuration for Talos components (osd, trustd, etc.).

machine.ca.crt

crt provides the CA Certificate for OSD.

machine.ca.key

crt provides the CA Certificate Key for OSD.

machine.network

network defines the host network configuration.

machine.network.hostname

hostname can be used to statically set the hostname for the host.

machine.network.interfaces

interfaces is used to define the network interface configuration. By default all network interfaces will attempt a DHCP discovery. This can be further tuned through this configuration parameter.

machine.network.interfaces.interface

This is the interface name that should be configured.

machine.network.interfaces.cidr

cidr is used to specify a static IP address to the interface. This should be in proper CIDR notation ( 192.168.2.5/24 ).

Note: This option is mutually exclusive with DHCP.

machine.network.interfaces.dhcp

dhcp is used to specify that this device should be configured via DHCP.

The following DHCP options are supported:

  • OptionClasslessStaticRoute
  • OptionDomainNameServer
  • OptionDNSDomainSearchList
  • OptionHostName

Note: This option is mutually exclusive with CIDR.

machine.network.interfaces.ignore

ignore is used to exclude a specific interface from configuration. This parameter is optional.

machine.network.interfaces.routes

routes is used to specify static routes that may be necessary. This parameter is optional.

Routes can be repeated and includes a Network and Gateway field.

machine.install

install provides the details necessary to install the Talos image to disk. This is typically only used in bare metal setups.

machine.install.disk

disk is the device name to use for the /boot partition and /var partitions. This should be specified as the unpartitioned block device.

machine.install.extraDevices

extraDevices contains additional devices that should be formatted and partitioned.

machine.install.extraKernelArgs

extraKernelArgs contain additional kernel arguments to be appended to the bootloader.

machine.install.image

image is a url to a Talos installer image.

machine.install.bootloader

bootloader denotes if the bootloader should be installed to teh device.

machine.install.wipe

wipe denotes if the disk should have zeros written to it before partitioning.

machine.install.force

force will ignore any existing partitions on the device.

Cluster Configuration

cluster:
  controlPlane:
    ips: []string
  clusterName: string
  network:
    dnsDomain: string
    podSubnets: []string
    serviceSubnets: []string
  token: string
  ca:
    crt: string
    key: string
  apiServer:
    image: (optional) string
    extraArgs: map[string]string
    certSANs: []string
  controllerManager: (optional)
    image: string
    extraArgs: map[string]string
  scheduler: (optional)
    image: string
    extraArgs: map[string]string
  etcd: (optional)
    image: string

cluster.controlPlane

cluster.controlPlane.endpoint

endpoint defines the address for kubernetes ( load balancer or DNS name ).

cluster.controlPlane.ips

ips lists the trustd endpoints. This should be a list of all the control plane addresses.

cluster.clusterName

clusterName is the name of the cluster.

cluster.network

cluster.network.dnsDomain

dnsDomain is the dns domain of the cluster.

cluster.network.podSubnets

podSubnets is a list of the subnets that Kubernetes should allocate from for CNI.

cluster.network.serviceSubnets

serviceSubnets is a list of the subnets that Kubernetes should allocate service addresses from.

cluster.token

token is the kubeadm bootstrap token used to authenticate additional kubernetes nodes to the cluster.

cluster.ca

ca represents the ca certificate and key pair for Kubernetes use.

cluster.ca.crt

cluster.ca.key

cluster.apiServer

cluster.apiServer.image

image defines the container image the Kubernetes API server will use.

cluster.apiServer.extraArgs

extraArgs provides additional arguments to the Kubernetes API server.

cluster.apiServer.certSANs

certSANs are a list of IP addresses that should be added to the API server certificate.

cluster.controllerManager

cluster.controllerManager.image

image defines the container image the Kubernetes API server will use.

cluster.controllerManager.extraArgs

extraArgs provides additional arguments to the Kubernetes API server.

cluster.scheduler

cluster.scheduler.image

image defines the container image the Kubernetes API server will use.

cluster.scheduler.extraArgs

extraArgs provides additional arguments to the Kubernetes API server.

cluster.etcd

cluster.etcd.image

image defines the container image the Kubernetes API server will use.