actions / actions/actions-runner-controller

Support a list of namespaces to watch rather than one or all

Open
#2,634 5 comments 13 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement gha-runner-scale-set
Dominant language
Go
Stars
6.5k
Forks
1.5k
Avg merge
2d 2h
Merged PRs (30d)
27

Description

What would you like added?

I want to be able to deploy a GitHub ARC in a Kubernetes cluster to watch a list of namespaces.

As a GitHub Administrator, my options today for deploying the GitHub Action Runner Controller are limited. Action Runner Controllers connect to a single GitHub instance target (Enterprise on-prem/AWS or GitHub.com), which makes sense. Many large enterprises have many instances of GHES and a GitHub EMU account.

The challenge with the ARC deployment is that within Kubernetes, a single ARC can either:

A. Watch ALL namespaces within the cluster
B. Watch a SINGLE namespace within the cluster

As an ARC administrator/engineer, this greatly limits my capabilities during deployment and management of the controller. The limitations in the two current deployment options are covered below.

Installing ARC to a single namespace
  • All customers Action Runner Deployments connect to a single controller in a single namespace
  • No native way to limit network connections between Action Runners in the same namespace
    • Utilization of Kyverno, Istio, OPA would solve this, but introduces additional complexity
    • Introduction of security controllers (see above) could introduce unexpected behaviors with ARC and or Action Runners
  • Can install multiple instances of ARC to multiple namespaces
    • This increases compute resource requirements for multiple controllers in multiple namespaces
    • Increases operational burden
Installing ARC Cluster-Wide
  • Requires one Kubernetes Cluster per GitHub instance target
    • 12 on-prem instances would require 12 Kubernetes Clusters
  • More clusters to manage; higher operational burden on platform engineers
Why is this needed?

As an ARC administrator/engineer, I would want to deploy a fewer number of ARCs into a fewer number of clusters and provide a scope of namespaces to watch.

  • Deploy ARCs to isolated namespaces
    • Example: wwwin-github-org-1, wwwin-github2-org-1, github-com-org-a, github-dmz1-org, etc
  • Have each of the ARCs map to a list of namespaces each without overlap
    • Example 1: wwwin-github-org-1 watching namespaces wwwin-gh-org-1-group-a, wwwin-gh-org-1-group-b, and wwwin-gh-org-1-group-c
    • Example 2: github-com-org-1 watching namespaces github-com-org-1-group-a, github-com-org-2-group-a, and github-com-org-2-group-b

This would allow us to:

  • Provide namespace isolation between customers for Enterprises/Orgs/Repos
  • Limit the number of required Kubernetes Clusters to manage
  • Control (and limit) the number of ARC deployments for us to manage
  • Reduce our operational burden of ARC deployments
Additional context

Add any other context or screenshots about the feature request here.

Contributor guide

Open the contributing guide

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.

Research direction

Start by reviewing the controller's current single-namespace and cluster-wide watch configuration and the Kubernetes reconciliation entry points. Define how a list of namespaces is configured and validated, then verify that separate ARC instances can watch non-overlapping namespace sets while existing single-namespace and all-namespace behavior remains supported.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, go, kubernetes
Domain
ci-cd, devops, infrastructure
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.