talos/docs/content/configuration/v1alpha1-reference.md
Brad Beam 7069f97eb4 docs: Add machine config docs
Restructure configuration section to highlight v0/v1alpha1 differences.
Removed old configuration material.

Signed-off-by: Brad Beam <brad.beam@talos-systems.com>
2019-10-07 17:30:55 -05:00

304 lines
7.6 KiB
Markdown

---
title: v1alpha1 Reference
date: 2019-10-04T19:40:55-07:00
draft: false
weight: 20
menu:
docs:
parent: 'configuration'
---
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.