Kubernetes controller to upgrade Talos and Kubernetes
See the codeA Kubernetes controller for automated, orchestrated upgrades of Talos Linux and Kubernetes. Declare a target version in a custom resource; tuppr plans and executes the rollout - draining, upgrading, rebooting, and health-checking each node in turn (or in parallel batches) - always driving the upgrade from a healthy node, so it never self-upgrades the node it runs on.
📖 Docs site: https://tuppr.home-operations.com/ - requirements, quickstart, upgrade coordination, Talos and Kubernetes upgrade options, notifications (Apprise + chaski), monitoring, operations, and chart values.
talosctl upgrade by hand.tuppr manages two kinds of upgrade in the tuppr.home-operations.com/v1alpha1
API group. Only one upgrade ever runs at a time cluster-wide: multiple
TalosUpgrade plans queue, and the two kinds never run concurrently (see
Upgrade coordination).
| Resource | Upgrades | Reboot | Per cluster |
|---|---|---|---|
TalosUpgrade | Talos Linux on nodes | Yes | Many (queued), node-selectable |
KubernetesUpgrade | The Kubernetes version | No | Exactly one |
Grant the controller's namespace os:admin Talos API access (apply to every
node), then install the chart. Full prerequisites:
Requirements.
# machine config, on every node
machine:
features:
kubernetesTalosAPIAccess:
enabled: true
allowedRoles: [os:admin]
allowedKubernetesNamespaces: [system-upgrade]
helm install tuppr oci://ghcr.io/home-operations/charts/tuppr \
--namespace system-upgrade
Upgrade Talos (rolls the version across matching nodes, health-gated):
apiVersion: tuppr.home-operations.com/v1alpha1
kind: TalosUpgrade
metadata:
name: cluster
spec:
talos:
# renovate: datasource=docker depName=ghcr.io/siderolabs/talos
version: v1.14.1
Upgrade Kubernetes (one resource per cluster; edit the version to upgrade again):
apiVersion: tuppr.home-operations.com/v1alpha1
kind: KubernetesUpgrade
metadata:
name: kubernetes
spec:
kubernetes:
# renovate: datasource=docker depName=ghcr.io/siderolabs/kubelet
version: v1.37.0
Then kubectl get talosupgrade -w. Health checks, parallel batches, hooks,
maintenance windows, and per-node overrides:
Talos upgrades.
Tooling is pinned with mise: mise run test,
mise run lint, mise run build, mise run manifests. The docs site builds
with mise run docs (strict link checking) and serves locally with
mise run docs-serve. See
Development.
AGPL-3.0. Inspired by Talos Linux and the System Upgrade Controller.
Go
60.2%
YAML
28.6%
JSON
6.7%
Go Template
2.2%
Kubernetes controller to upgrade Talos and Kubernetes
See the codeA Kubernetes controller for automated, orchestrated upgrades of Talos Linux and Kubernetes. Declare a target version in a custom resource; tuppr plans and executes the rollout - draining, upgrading, rebooting, and health-checking each node in turn (or in parallel batches) - always driving the upgrade from a healthy node, so it never self-upgrades the node it runs on.
📖 Docs site: https://tuppr.home-operations.com/ - requirements, quickstart, upgrade coordination, Talos and Kubernetes upgrade options, notifications (Apprise + chaski), monitoring, operations, and chart values.
talosctl upgrade by hand.tuppr manages two kinds of upgrade in the tuppr.home-operations.com/v1alpha1
API group. Only one upgrade ever runs at a time cluster-wide: multiple
TalosUpgrade plans queue, and the two kinds never run concurrently (see
Upgrade coordination).
| Resource | Upgrades | Reboot | Per cluster |
|---|---|---|---|
TalosUpgrade | Talos Linux on nodes | Yes | Many (queued), node-selectable |
KubernetesUpgrade | The Kubernetes version | No | Exactly one |
Grant the controller's namespace os:admin Talos API access (apply to every
node), then install the chart. Full prerequisites:
Requirements.
# machine config, on every node
machine:
features:
kubernetesTalosAPIAccess:
enabled: true
allowedRoles: [os:admin]
allowedKubernetesNamespaces: [system-upgrade]
helm install tuppr oci://ghcr.io/home-operations/charts/tuppr \
--namespace system-upgrade
Upgrade Talos (rolls the version across matching nodes, health-gated):
apiVersion: tuppr.home-operations.com/v1alpha1
kind: TalosUpgrade
metadata:
name: cluster
spec:
talos:
# renovate: datasource=docker depName=ghcr.io/siderolabs/talos
version: v1.14.1
Upgrade Kubernetes (one resource per cluster; edit the version to upgrade again):
apiVersion: tuppr.home-operations.com/v1alpha1
kind: KubernetesUpgrade
metadata:
name: kubernetes
spec:
kubernetes:
# renovate: datasource=docker depName=ghcr.io/siderolabs/kubelet
version: v1.37.0
Then kubectl get talosupgrade -w. Health checks, parallel batches, hooks,
maintenance windows, and per-node overrides:
Talos upgrades.
Tooling is pinned with mise: mise run test,
mise run lint, mise run build, mise run manifests. The docs site builds
with mise run docs (strict link checking) and serves locally with
mise run docs-serve. See
Development.
AGPL-3.0. Inspired by Talos Linux and the System Upgrade Controller.
Go
60.2%
YAML
28.6%
JSON
6.7%
Go Template
2.2%