# yaml-language-server: $schema=https://raw.githubusercontent.com/budimanjojo/talhelper/master/pkg/config/schemas/talconfig.json --- # renovate: datasource=docker depName=ghcr.io/siderolabs/installer talosVersion: v1.6.3 # renovate: datasource=docker depName=ghcr.io/siderolabs/kubelet kubernetesVersion: v1.29.1 clusterName: &cluster home-kubernetes endpoint: https://#{ bootstrap_kube_api_addr }#:6443 clusterPodNets: - "#{ bootstrap_cluster_cidr.split(',')[0] }#" clusterSvcNets: - "#{ bootstrap_service_cidr.split(',')[0] }#" additionalApiServerCertSans: &sans - "#{ bootstrap_kube_api_addr }#" - 127.0.0.1 #% for item in bootstrap_kube_additional_tls_sans %# - "#{ item }#" #% endfor %# additionalMachineCertSans: *sans cniConfig: name: none nodes: #% for item in bootstrap_nodes.master %# - hostname: "#{ item.name }#" ipAddress: "#{ item.address }#" #% if item.talos.disk_device.startswith('/') %# installDisk: "#{ item.talos.disk_device }#" #% else %# installDiskSelector: serial: "#{ item.talos.disk_device }#" #% endif %# controlPlane: true networkInterfaces: - interface: eth0 dhcp: false addresses: - "#{ item.address }#/#{ bootstrap_node_cidr.split('/') | last }#" mtu: 1500 routes: - network: 0.0.0.0/0 gateway: "#{ bootstrap_node_cidr | nthhost(1) }#" vip: ip: "#{ bootstrap_kube_api_addr }#" #% endfor %# #% for item in bootstrap_nodes.worker %# - hostname: "#{ item.name }#" ipAddress: "#{ item.address }#" #% if item.talos.disk_device.startswith('/') %# installDisk: "#{ item.talos.disk_device }#" #% else %# installDiskSelector: serial: "#{ item.talos.disk_device }#" #% endif %# controlPlane: false networkInterfaces: - interface: eth0 dhcp: false addresses: - "#{ item.address }#/#{ bootstrap_node_cidr.split('/') | last }#" mtu: 1500 routes: - network: 0.0.0.0/0 gateway: "#{ bootstrap_node_cidr | nthhost(1) }#" #% endfor %# controlPlane: patches: # Configure containerd - &containerdPatch |- machine: files: - op: create path: /etc/cri/conf.d/20-customization.part content: |- [plugins."io.containerd.grpc.v1.cri"] enable_unprivileged_ports = true enable_unprivileged_icmp = true [plugins."io.containerd.grpc.v1.cri".containerd] discard_unpacked_layers = false [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] discard_unpacked_layers = false # Disable search domain everywhere - &disableSearchDomainPatch |- machine: network: disableSearchDomain: true # Enable cluster discovery - &discoveryPatch |- cluster: discovery: registries: kubernetes: disabled: false service: disabled: false # Configure kubelet - &kubeletPatch |- machine: kubelet: extraArgs: rotate-server-certificates: true nodeIP: validSubnets: - "#{ bootstrap_node_cidr }#" # Enable KubePrism - &kubePrismPatch |- machine: features: kubePrism: enabled: true port: 7445 # Force nameserver - &nameserverPatch |- machine: network: nameservers: - "#{ bootstrap_dns_server }#" # Configure NTP - &ntpPatch |- machine: time: disabled: false servers: - time.cloudflare.com # Custom sysctl settings - &sysctlPatch |- machine: sysctls: fs.inotify.max_queued_events: 65536 fs.inotify.max_user_watches: 524288 fs.inotify.max_user_instances: 8192 # Cluster configuration - |- cluster: allowSchedulingOnMasters: true controllerManager: extraArgs: bind-address: 0.0.0.0 proxy: disabled: true scheduler: extraArgs: bind-address: 0.0.0.0 # ETCD configuration - |- cluster: etcd: extraArgs: listen-metrics-urls: http://0.0.0.0:2381 advertisedSubnets: - "#{ bootstrap_node_cidr }#" # Disable default API server admission plugins. - |- - op: remove path: /cluster/apiServer/admissionControl worker: patches: - *containerdPatch - *disableSearchDomainPatch - *discoveryPatch - *kubeletPatch - *kubePrismPatch - *nameserverPatch - *ntpPatch - *sysctlPatch