Bassem Dghaidi

A deep dive into ARC the Kubernetes operator to scale self-hosted runners

Stop manually managing runners. Get an on-demand, scalable GitHub Actions experience inside your own Kubernetes cluster with ARC.

A deep dive into ARC the Kubernetes operator to scale self-hosted runners
#1about 2 minutes

Introducing the Actions Runner Controller for GitHub Actions

Actions Runner Controller (ARC) is an open-source project, now maintained by GitHub, for managing and scaling self-hosted runners on demand.

#2about 2 minutes

A live demonstration of auto-scaling self-hosted runners

See how a queued GitHub Actions workflow automatically triggers the creation of new runner pods in a Kubernetes cluster.

#3about 3 minutes

Understanding the core concept of Kubernetes control loops

Kubernetes operators use control loops, also known as reconciliation loops, to continuously check and enforce a desired state for resources.

#4about 1 minute

The high-level architecture of ARC and GitHub Actions

The controller runs in your Kubernetes cluster and communicates with GitHub to manage runner scale sets based on workflow demands.

#5about 1 minute

Why you should run ARC in a dedicated Kubernetes cluster

Isolate ARC from production workloads to prevent noisy neighbor problems and security risks from running arbitrary code.

#6about 4 minutes

How ARC controllers and custom resources work together

ARC installs a controller manager with multiple control loops, each responsible for reconciling a specific custom resource like runner scale sets.

#7about 5 minutes

The role of runner scale sets and the listener pod

Runner scale sets are pools of homogeneous runners, and a dedicated listener pod makes scaling decisions based on messages from GitHub.

#8about 6 minutes

A step-by-step workflow for scaling up a new runner

A workflow trigger sends a message to the listener, which patches a resource to increase the runner count, prompting a controller to create a new runner pod.

#9about 5 minutes

Exploring the open-source ARC repository on GitHub

A tour of the Actions Runner Controller codebase highlights its structure and the distinction between legacy community modes and the new GitHub-supported mode.

#10about 5 minutes

Defining custom resources for the ARC controller

The controller uses custom resource definitions (CRDs) to extend the Kubernetes API, creating new resource types like AutoscalingRunnerSet.

#11about 5 minutes

A look inside the controller's reconciliation function

The core logic of the operator resides in the reconciliation function, which compares the current state to the desired state and applies necessary changes.

#12about 3 minutes

How the listener application uses a long-poll connection

The listener runs as a separate application that establishes a long-poll HTTPS connection to the GitHub Actions backend to receive job messages.

#13about 7 minutes

Packaging and publishing ARC with Helm and OCI images

ARC is distributed as OCI-compliant Helm charts and a container image containing the controller manager and listener applications.

#14about 3 minutes

Common challenges when scaling self-hosted runners

Key challenges include scaling quickly to meet demand, scaling down to zero, and managing resource limitations within the Kubernetes cluster.

#15about 4 minutes

Career advice for aspiring self-taught developers

Beyond learning a tech stack, focus on software engineering fundamentals like data structures, algorithms, and writing maintainable code.

Related jobs
Jobs that call for the skills explored in this talk.

Featured Partners

From learning to earning

Jobs that call for the skills explored in this talk.

DevOps Engineer

Arcus FM
Birmingham, United Kingdom

Remote
45K
Intermediate
JIRA
Bash
Unix
+11