Skip to content

Quickstart

This walks through installing tuppr and running one Talos and one Kubernetes upgrade. It assumes you have granted Talos API access to the controller namespace - see Requirements.

Install

helm install tuppr oci://ghcr.io/home-operations/charts/tuppr \
  --namespace system-upgrade

Every chart value is documented in the generated Helm chart values reference.

Upgrade Talos

Create a TalosUpgrade. This is the minimal form - one target version applied to every node, sequentially:

apiVersion: tuppr.home-operations.com/v1alpha1
kind: TalosUpgrade
metadata:
  name: cluster
spec:
  talos:
    # renovate: datasource=docker depName=ghcr.io/siderolabs/installer
    version: v1.13.7

tuppr health-checks the cluster, then upgrades each node in turn: drain → talosctl upgrade → reboot → wait for the node to return Ready on the new version. Watch it:

kubectl get talosupgrade -w
kubectl describe talosupgrade cluster

Adding health checks, parallel batches, hooks, maintenance windows, and per-node overrides: Talos upgrades.

Single-node clusters

With one node, the upgrade pod runs on the node being rebooted. tuppr handles this automatically (issues the upgrade with --wait=false, skips the drain, and tracks completion by polling node readiness over the Talos API), then uncordons the node once the upgrade is verified.

Upgrade Kubernetes

Create the (single) KubernetesUpgrade:

apiVersion: tuppr.home-operations.com/v1alpha1
kind: KubernetesUpgrade
metadata:
  name: kubernetes
spec:
  kubernetes:
    # renovate: datasource=docker depName=ghcr.io/siderolabs/kubelet
    version: v1.36.2
kubectl get kubernetesupgrade -w

There is exactly one KubernetesUpgrade per cluster; to upgrade again, edit spec.kubernetes.version on it. Details: Kubernetes upgrades.

Both at once

You can apply both resources; tuppr never runs them concurrently. Whichever starts first runs to completion while the other waits in Pending, then the second starts automatically. See Upgrade coordination.