temporalio / temporalio/temporal-worker-controller

Expose Deployment rollingUpdate strategy (maxUnavailable/maxSurge) on TemporalWorkerDeployment

Open
#496 3 comments 1 reaction 1 assignee View on GitHub

@jaypipes is already working on this.

Since Sep 17, 2026.

crd-change
Dominant language
Go
Stars
187
Forks
70
Avg merge
4d 1h
Merged PRs (30d)
31

Description

Summary

The controller creates and manages the child Deployment for each worker version, but there's no way to configure that Deployment's rolling-update strategy. Since the controller never sets spec.strategy, owned Deployments fall back to the Kubernetes default (RollingUpdate, maxUnavailable/maxSurge 25%/25%). On large fleets this makes in-place rolling restarts of a Current version disruptive: up to ~25% of pods can go unavailable at once, which spikes schedule_to_start.

Users would like a field on the WorkerDeployment spec to set maxUnavailable/maxSurge, which the controller then applies to the Deployments it owns and reconciles.

Current behavior

TemporalWorkerDeploymentSpec exposes replicas, template, minReadySeconds, progressDeadlineSeconds, rollout, sunset, and workerOptions — there is no Deployment-level strategy field. rollout.strategy (Manual/AllAtOnce/Progressive) controls Temporal traffic routing across versions, not how pods roll within a single version's Deployment. The builder in internal/k8s/deployments.go doesn't set spec.strategy on the owned Deployment, so it inherits the cluster default of 25%/25%.

Why this matters

Users may periodically do in-place rolling restarts of Current workers with the same build ID (e.g. non-workflow config/bug-fix changes — the UnsafeCustomBuildID path, plus ordinary pod-template drift on the current version). In those cases the restart happens on the same Deployment, so its own strategy.rollingUpdate is the only thing governing availability. With 25% of a large fleet cycling at once, they lose enough pollers to build a backlog. They'd like to declare something conservative like maxUnavailable: 5% and have it stick.

Filing on behalf of a Temporal Cloud customer running large worker fleets in production.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.