GitHub Actions Runner Controller 0.15.0 reduces Kubernetes load and makes upgrades more predictable
Released on October 1, ARC version 0.15.0 swaps full updates for patches, moves status to metrics, and gives more control over the controller's reconciliation and shutdown.

On October 1, GitHub released version 0.15.0 of the Actions Runner Controller (ARC), the Kubernetes operator that manages self-hosted runners for GitHub Actions. According to InfoQ's coverage, the release's focus isn't a new feature but reducing the work the controller does to keep runners in sync, especially in environments with many runner scale sets running at the same time.
For anyone already running ARC in production, this matters more than it seems: a large organization's runner fleet generates a constant volume of lifecycle events (jobs enter the queue, runners spin up, the workload runs, the ephemeral pod dies), and each of these events turns into traffic on the Kubernetes API.
What ARC does, in one sentence
ARC is a Kubernetes operator that scales self-hosted GitHub Actions runners according to workflow demand, creating and destroying instances as jobs arrive and finish. It's the option for anyone who needs control over the build environment, network access, hardware, or workload isolation without keeping a pool of runners provisioned at all times.
Fewer requests, less API noise
The central point of 0.15.0 is how the controller talks to the Kubernetes API. Before, controller resource updates used full update requests; now they use patch requests, which reduces the size of the payload transferred. Status aggregation for EphemeralRunnerSet and AutoscalingRunnerSet also moved to metrics, cutting the number of status updates sent to the API.
In practice, this means less pressure on the cluster's control plane in exactly the environments where ARC is already most demanding: shared CI flows, with multiple teams and runners being created and destroyed all the time. Metrics also provide a better basis for observing the aggregate behavior of the controller and the runners than a sequence of status patches.
The controllers also started filtering incoming events to avoid unnecessary reconciliation. Two configuration adjustments come with this change:
- Listener API client rate limit, configurable via
queries-per-secondandburst; - Reconciliation concurrency, global or per controller, via
max-concurrent-reconcilesflags.
InfoQ's piece raises an important warning about these two parameters: they aren't simple performance knobs. Raising concurrency increases the rate at which the controller interacts with Kubernetes and with GitHub Actions services, so the adjustment needs to be validated against the real load pattern and cluster capacity, not assumed as "more is always better."
More predictable upgrades and shutdowns
The release also touches lifecycle. Patch version upgrades now update resources in-place, keeping the one-to-one mapping between autoscaling runner sets and ephemeral runner sets, which reduces disruption when updating a runner scale set that's already in production.
The controller's shutdown behavior also changed: terminationGracePeriodSeconds is now configurable and aligned with the controller manager's graceful-shutdown timeout. This gives the operator more control over how the controller exits during restarts or upgrades, instead of relying on a fixed value that might not match the shutdown policy of the rest of the cluster.
Two smaller adjustments, but ones that matter in ephemeral environments:
- ARC can now re-register a runner scale set when the locally recorded counterpart no longer exists in the GitHub Actions service, recovering the controller from a mismatch between the state in Kubernetes and the state kept by GitHub;
- Ephemeral runners can be deleted faster when the pod finishes successfully, because ARC now skips an additional server-side check for runner removal.
These are small changes on their own, but they become relevant when runner environments are created and destroyed all the time.
ARC isn't the only piece on this board
InfoQ places ARC within a broader movement toward dynamically managed CI execution infrastructure, citing CircleCI's Machine Runner Orchestrator as a comparable example. Both solve the same problem of matching execution capacity with CI demand, but with different models:
| ARC (GitHub) | Machine Runner Orchestrator (CircleCI) | |
|---|---|---|
| Platform integration | Native with Kubernetes | Machine-based runners |
| Runner model | Ephemeral scale sets | Resource classes (CPU, GPU, ARM) |
| Who operates it | Platform team manages the controller and cluster capacity | More abstracted management of the machine layer |
For organizations already standardized on GitHub Actions and Kubernetes, ARC offers a native way to manage runner capacity alongside the cluster's other resources. The trade-off is that the platform team also needs to operate the controller, manage Kubernetes capacity, and understand how runner scaling interacts with scheduling, API limits, and workflow demand.
What remains open
InfoQ itself describes 0.15.0 as an incremental release, without any major new feature. What it reveals is that, once CI infrastructure starts serving many repositories and teams at once, controller efficiency and lifecycle reliability stop being an operational detail and become, in practice, a delivery issue.
For anyone already running ARC on a shared cluster, the practical points of attention are clear: review the max-concurrent-reconciles flags and the queries-per-second/burst limits against the real load pattern before raising values, check whether the new terminationGracePeriodSeconds matches the shutdown policy of the rest of the cluster, and track the new EphemeralRunnerSet and AutoscalingRunnerSet metrics instead of relying only on the old status events.
Translated from the Brazilian Portuguese original · Read the original
Microsoft says AI agents are like insider threats and launches Guardian Agents
The company launched a system to monitor the very AI agents it sells, arguing that not even the market's most advanced models deserve full trust inside the enterprise.





