# Migrate from Actions Runner Controller (ARC) to Managed Runners

> Running Actions Runner Controller on Kubernetes? Migrate to managed runners to drop the cluster, the scaling YAML, and the upkeep - keeping the same workflows.

Source: https://latchkey.dev/learn/migrate-ci/migrate-actions-runner-controller-arc-to-managed-runners  
Updated: 2026-06-26

ARC works, but you maintain a Kubernetes cluster, the controller, and scaling config to get ephemeral runners. Managed runners give you ephemeral runners with none of that.

Actions Runner Controller (ARC) runs self-hosted runners as pods and scales them with runner scale sets. It is real infrastructure: a cluster, the controller, listeners, and upgrade cycles. Managed runners replace the whole stack with a `runs-on:` label.

## What changes

| ARC | Managed (Latchkey) |
| --- | --- |
| `runs-on: arc-runner-set` | `runs-on: latchkey-medium` |
| You run a Kubernetes cluster | No cluster |
| You manage the controller + scale sets | Warm pools + autoscale built in |
| You handle controller/runner upgrades | Images maintained for you |

## Before and after

```Before: .github/workflows/ci.yml
jobs:
  build:
    runs-on: arc-runner-set   # ARC runner scale set
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test
```

## Managed equivalent

```After: .github/workflows/ci.yml
jobs:
  build:
    runs-on: latchkey-medium   # no cluster to run
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test
```

## Migration steps

1. Inventory which workflows target your ARC runner scale set labels.
2. Connect the managed-runner provider to your org.
3. Swap the ARC label for the managed label on one workflow.
4. Verify parity, roll out, then scale the ARC deployment to zero.
5. Tear down the controller and (if dedicated) the cluster.

## Gotchas

- If jobs relied on in-cluster services or node-local mounts, replace those with `services:` containers or steps.
- Container-mode ARC jobs may need `container:` on GitHub-managed runners.
- Keep ARC scaled down (not deleted) until you have run in parallel and trust the new path.

## What you gain

- A $0.0025/min rate at 2 vCPU against $0.006 than GitHub-hosted runners.
- Warm pools remove queue time - jobs start almost immediately.
- Self-healing detects, fixes, and auto-retries transient and mechanical failures.
- Zero ops: no agents, autoscalers, or controllers to patch and babysit.

## FAQ

### Migrate from Actions Runner Controller (ARC) to Managed Runners?

Actions Runner Controller (ARC) runs self-hosted runners as pods and scales them with runner scale sets. It is real infrastructure: a cluster, the controller, listeners, and upgrade cycles. Managed runners replace the whole stack with a runs-on: label.

---

Latchkey runs CI/CD that repairs its own failures. Agent entry points: https://latchkey.dev/agent.txt, https://latchkey.dev/openapi.json, https://latchkey.dev/llms.txt
