Skip to content

Migrate the Talos machine config onto the v1.14 configuration documents #3850

Description

@devantler

🤖 Generated by the Agentic Engineer

Evidence

#3626 establishes that Kubernetes cannot advance past v1.36 until Talos moves to the v1.14 line, and states the prerequisite as "Talos moves to the v1.14 line first". That prerequisite has never been specified, and it is considerably more than a version bump.

#3713 (chore(deps): update dependency siderolabs/talos to v1.14.0) now demonstrates what it actually costs. With the stale talosctl digest fixed (commit a8203d4d, so setup-talosctl.sh succeeds and talosctl gen config runs), 🧪 Validate Talos Machine Config fails on the talos (cloud) overlay with 8 conflicts — job 104627163211:

8 errors occurred:
	* UnattendedInstallConfig config is incompatible with v1alpha1 config (.machine.install)
	* .machine.nodeAnnotations is already set in v1alpha1 config
	* kubelet config is already set in v1alpha1 config (.machine.kubelet)
	* cluster network config is already set in the v1alpha1 config (.machine.cluster.network). Please remove it and use only the new KubeNetworkConfig document to avoid conflicts
	* kube-apiserver config is already set in v1alpha1 config (.cluster.apiServer)
	* kube-controller-manager config is already set in v1alpha1 config (.cluster.controllerManager)
	* cluster proxy config in v1alpha1 config (.machine.cluster.proxy) can't be used with KubeProxyConfig document, please remove it to avoid conflicts
	* cluster network config in v1alpha1 config (.machine.cluster.network) can't be used with KubeFlannelCNIConfig document, please remove it to avoid conflicts

Preceded by WARNING: .machine.files is deprecated; use dedicated configuration documents instead.

Every other check on that head is green — 🔐 Validate Production Authorization, 🧪 Validate Manifests, kubescape, CodeQL and the rest. This one check, and CI - Required Checks as its consequence, are the only failures.

The problem

Talos v1.14 moves settings out of the monolithic v1alpha1 document into dedicated configuration documents, and refuses to validate when both describe the same thing. Our machine-config patches still set all eight in v1alpha1. So the Talos upgrade cannot land as a version bump, and while it cannot land, #3534 (Kubernetes v1.37) stays permanently unmergeable — that is the whole of #3626's cost, and this is its root.

The same upstream restructuring is breaking KSail independently (ksail#6776 — MachineConfig.Kubelet and seven sibling accessors removed), so this is one upstream change surfacing in two products.

Expected behaviour

The Talos machine-config patches are migrated onto the v1.14 documents, talosctl validate passes for both overlays, and #3713 (or its successor) can go green on the version bump alone.

Acceptance criteria

  1. .machine.installUnattendedInstallConfig
  2. .machine.kubelet → the dedicated kubelet document
  3. .machine.cluster.networkKubeNetworkConfig (and the KubeFlannelCNIConfig conflict resolved with it)
  4. .machine.cluster.proxyKubeProxyConfig
  5. .cluster.apiServer → the dedicated kube-apiserver document
  6. .cluster.controllerManager → the dedicated kube-controller-manager document
  7. .machine.nodeAnnotations moved off v1alpha1
  8. .machine.files moved off the deprecated field
  9. 🧪 Validate Talos Machine Config passes for both the talos (cloud) and talos-local (container) overlays
  10. The rendered config is diffed against the current one to show the migration is settings-preserving — no grant, no mount, no network setting silently dropped

Size and risk

Medium, and higher risk than its size suggests: this rewrites the machine config that provisions production nodes. It wants its own reviewed change with a rendered before/after diff — not an adaptation commit folded into a Renovate version bump.

Part of #3626.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions