Page MenuHomePhabricator

Update Kubernetes clusters to 1.34
Open, MediumPublic

Description

Umbrella task to track the work required towards upgrading our Kubernetes clusters to Kubernetes 1.34 (EOL: 2026-10-27)

We're currently running 1.31 which went EOL on 2026-02-28.

I've put together some general steps on how we planned/executed kubernetes updates in the past at https://wikitech.wikimedia.org/wiki/Kubernetes/Kubernetes_Infrastructure_Upgrade_Procedure

New update procedure

With this upgrade we're planning to change the way we do upgrades from re-initializing all clusters to rolling updates according to the Version Skew Policy. Since we have not done this yet, we should define the process first. I think we have two options, assuming we want to go from 1.31 to 1.36:

Conservative approach
Upgrade just one minor version to stay within the supported version skew for k8s control-plane components (apiserver, controller-manager, scheduler):

  • Update one control-plane, observe changed behavior, resource usage etc. to 1.32
  • If everything seems well, update all other control-planes to 1.32
  • Update workers in small to big batches to 1.32
  • Repeat until we're at 1.36

Pro:

  • Playing safe, multiple stages where we can stop and roll back or otherwise intervene
  • No control-plane downtime

Con;

  • Slow/more work since we need to package and upgrade to every minor version

Aggressive approach
Upgrade all control-planes at once, staying within the supported version skew for k8s worker components (kubelet, kube-proxy):

  • Upgrade all control-planes at once to 1.34
  • Update workers in small to big batches to 1.34
  • Repeat until we're at 1.36

Pro:

  • Faster: We may skip up to two k8s versions

Con:

  • Some risk involved upgrading all control-planes at the same time
    • Technically we can roll back as long as no incompatible API changes have been made to etcd (by users, kubernetes does not do that on it's own).
  • We might need a small window of control-plane downtime (not sure, might just work)

Middleground approach
We could combine both of the above:

  • Upgrade control-planes using the conservative approach to 1.32, then 1.33, then 1.34
  • Upgrade workers in small to big batches to 1.34
  • Repeat until we're at 1.36

Pro:

  • Playing safe, multiple stages where we can stop and roll back or otherwise intervene
  • No control-plane downtime

Con:

  • Slow/more work since we need to package and upgrade control-planes to every minor version

Together with the Kubernetes version we might need to update some components.

Core components (more or less on all clusters)

Operators/Addons (only on specific clusters)

Preparation for the Kubernetes update

  • Define target Kubernetes version
  • Ensure all our charts are compatible with the new Kubernetes version
  • Read Kubernetes changelogs (yellow/red flags just linked below each version. Tick the box if all action required items have been addressed, use ✅ for single items)

Changelogs can be found at:

Template per k8s minor version:

[] [[ https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-9.9.md | v9.9.99 ]]
* **Action Required**
  * **Metrics changes**
* **Node**

Upgrade process

Related Objects

StatusSubtypeAssignedTask
OpenJMeybohm
ResolvedBlake
ResolvedBlake
OpenNone
ResolvedRaine
DuplicateNone
DuplicateNone
ResolvedRequestJclark-ctr
ResolvedVRiley-WMF
DeclinedNone
ResolvedJhancock.wm
ResolvedJhancock.wm
OpenNone
ResolvedJMeybohm
ResolvedRaine
ResolvedRaine
OpenJelto
OpenBlake
OpenNone
OpenJMeybohm
OpenNone
ResolvedJelto
OpenBlake
OpenNone
Resolvedbrouberol
OpenNone

Event Timeline

JMeybohm triaged this task as Medium priority.May 22 2026, 1:40 PM
JMeybohm moved this task from Inbox to Scheduled (this Q) on the ServiceOps new board.

I think, as compared to aggressive, middle-ground mostly adds extra work without actually buying much safety or flexibility.

IMO let's try the aggressive approach :)

JMeybohm renamed this task from Update Kubernetes clusters to 1.3X to Update Kubernetes clusters to 1.34.May 27 2026, 2:34 PM
JMeybohm updated the task description. (Show Details)

Change #1298782 had a related patch set uploaded (by JMeybohm; author: JMeybohm):

[integration/config@master] helm-linter: Update k8s JSON schema

https://gerrit.wikimedia.org/r/1298782

Change #1298783 had a related patch set uploaded (by JMeybohm; author: JMeybohm):

[integration/config@master] helm-linter: Use version 0.8.1

https://gerrit.wikimedia.org/r/1298783

Change #1298799 had a related patch set uploaded (by JMeybohm; author: JMeybohm):

[operations/deployment-charts@master] Bump kubeconform checks to 1.34.8, remove 1.23.6

https://gerrit.wikimedia.org/r/1298799

Change #1298782 merged by jenkins-bot:

[integration/config@master] helm-linter: Update k8s JSON schema

https://gerrit.wikimedia.org/r/1298782

Change #1298783 merged by jenkins-bot:

[integration/config@master] helm-linter: Use version 0.8.1

https://gerrit.wikimedia.org/r/1298783

Change #1298799 merged by jenkins-bot:

[operations/deployment-charts@master] Bump kubeconform checks to 1.34.8, remove 1.23.6

https://gerrit.wikimedia.org/r/1298799

Change #1300115 had a related patch set uploaded (by JMeybohm; author: JMeybohm):

[operations/puppet@production] aptrepo: Add components for calico, istio and kubernetes

https://gerrit.wikimedia.org/r/1300115

Change #1300115 merged by JMeybohm:

[operations/puppet@production] aptrepo: Add components for calico, istio and kubernetes

https://gerrit.wikimedia.org/r/1300115