File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -48,3 +48,9 @@ output "talos_worker_ids" {
4848 description = " Server IDs of the hetzner talos workers machines"
4949 value = { for id , server in hcloud_server . workers : id => server . id }
5050}
51+
52+ output "autoscaler_worker_machine_config" {
53+ description = " Worker machine configuration for autoscaler use (generated when no workers are defined)"
54+ value = length (data. talos_machine_configuration . autoscaler_worker ) > 0 ? data. talos_machine_configuration . autoscaler_worker [0 ]. machine_configuration : " "
55+ sensitive = true
56+ }
Original file line number Diff line number Diff line change @@ -162,3 +162,19 @@ locals {
162162 client_key = base64decode (talos_cluster_kubeconfig. this [0 ]. kubernetes_client_configuration . client_key )
163163 }
164164}
165+
166+ # Generate a worker machine config template for autoscaler use.
167+ # This produces a valid worker config even when no worker nodes are defined,
168+ # using the same machine secrets and cluster configuration as real workers.
169+ data "talos_machine_configuration" "autoscaler_worker" {
170+ count = local. worker_count == 0 ? 1 : 0
171+ talos_version = var. talos_version
172+ cluster_name = var. cluster_name
173+ cluster_endpoint = local. cluster_endpoint_url_internal
174+ kubernetes_version = var. kubernetes_version
175+ machine_type = " worker"
176+ machine_secrets = talos_machine_secrets. this . machine_secrets
177+ config_patches = concat ([yamlencode (local. autoscaler_worker_yaml )], var. talos_worker_extra_config_patches )
178+ docs = false
179+ examples = false
180+ }
Original file line number Diff line number Diff line change @@ -88,3 +88,77 @@ locals {
8888 }
8989 }
9090}
91+
92+ # Worker YAML template for autoscaler (used when no real workers exist).
93+ # Same config patches as real workers but without node-specific values.
94+ autoscaler_worker_yaml = {
95+ machine = {
96+ install = {
97+ image = " ghcr.io/siderolabs/installer:${ var . talos_version } "
98+ }
99+ certSANs = local.cert_SANs
100+ kubelet = {
101+ extraArgs = merge (
102+ {
103+ " cloud-provider" = " external"
104+ " rotate-server-certificates" = true
105+ },
106+ var. kubelet_extra_args
107+ )
108+ nodeIP = {
109+ validSubnets = [
110+ local.node_ipv4_cidr
111+ ]
112+ }
113+ }
114+ network = {
115+ extraHostEntries = local.extra_host_entries
116+ kubespan = {
117+ enabled = var.enable_kube_span
118+ advertiseKubernetesNetworks : false
119+ mtu : 1370
120+ }
121+ }
122+ kernel = {
123+ modules = var.kernel_modules_to_load
124+ }
125+ sysctls = merge (
126+ {
127+ " net.core.somaxconn" = " 65535"
128+ " net.core.netdev_max_backlog" = " 4096"
129+ },
130+ var. sysctls_extra_args
131+ )
132+ features = {
133+ hostDNS = {
134+ enabled = true
135+ forwardKubeDNSToHost = true
136+ resolveMemberNames = true
137+ }
138+ }
139+ time = {
140+ servers = [
141+ " ntp1.hetzner.de" ,
142+ " ntp2.hetzner.com" ,
143+ " ntp3.hetzner.net" ,
144+ " time.cloudflare.com"
145+ ]
146+ }
147+ nodeLabels = {}
148+ registries = var.registries
149+ }
150+ cluster = {
151+ network = {
152+ dnsDomain = var.cluster_domain
153+ podSubnets = [
154+ local.pod_ipv4_cidr
155+ ]
156+ serviceSubnets = [
157+ local.service_ipv4_cidr
158+ ]
159+ cni = {
160+ name = " none"
161+ }
162+ }
163+ }
164+ }
You can’t perform that action at this time.
0 commit comments