--- title: 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](https://github.com/talos-systems/talos/blob/master/docs/proposals/20190708-MachineConfig.md). 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. ```yaml version: v1alpha1 ``` ## Machine Configuration ```yaml 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 ```yaml 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.