Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/nightly-benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ jobs:
name: "${{ matrix.model.id }} / single-${{ matrix.variant.id }}"
needs: build-wheel
if: ${{ !cancelled() }}
runs-on: ["k8s-runner-gpu", "4-gpu-h100"]
runs-on: 4-gpu-h100
timeout-minutes: 1440
strategy:
fail-fast: false
Expand Down Expand Up @@ -188,7 +188,7 @@ jobs:
name: "${{ matrix.model.id }} / multi-${{ matrix.variant.id }}"
needs: build-wheel
if: ${{ !cancelled() }}
runs-on: ["k8s-runner-gpu", "4-gpu-h100"]
runs-on: 4-gpu-h100
timeout-minutes: 1440
strategy:
fail-fast: false
Expand Down
135 changes: 135 additions & 0 deletions scripts/k8s-runner-resources/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# ARC (Actions Runner Controller) Deployment Guide

## Prerequisites

- Kubernetes cluster (v1.28+)
- `kubectl` configured with cluster access
- `helm` v3 installed

## 1. Create a GitHub App

1. Go to **GitHub Organization Settings > Developer settings > GitHub Apps > New GitHub App**
2. Set the following:
- **GitHub App name**: e.g. `smg-k8s-arc-app`
- **Homepage URL**: any valid URL
- **Webhook**: uncheck "Active" (not needed)
3. Grant **Repository permissions**:
- **Actions**: Read and Write
- **Administration**: Read and Write
- **Checks**: Read and Write
- **Metadata**: Read-only
4. Click **Create GitHub App**
5. Note the **App ID** from the app's settings page
6. Generate a **Private Key** (PEM file) and save it

## 2. Install the GitHub App

1. From the GitHub App settings, click **Install App**
2. Select the organization and choose the target repository (e.g. `lightseekorg/smg`)
3. Click **Install**
4. Note the **Installation ID** from the URL: `https://github.com/organizations/<org>/settings/installations/<installation-id>`

## 3. Create the Kubernetes Secret

Edit `arc-secret-template.yaml` with the values collected above:

```yaml
apiVersion: v1
kind: Secret
metadata:
name: github-arc-secret
namespace: actions-runner-system
type: Opaque
stringData:
github_app_id: "<your-app-id>"
github_app_installation_id: "<your-installation-id>"
github_app_private_key: "<contents-of-your-pem-file>"
```

Create the namespace and secret:

```bash
kubectl create namespace actions-runner-system
kubectl apply -f scripts/k8s-runner-resources/arc-secret-template.yaml

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The file path scripts/k8s-runner-resources/arc-secret-template.yaml is relative to the repository root. This also applies to the paths used in the helm install commands below. It would be clearer to instruct the user to run these commands from the root of the repository to avoid 'file not found' errors. Consider adding a note at the beginning of the section, for example: Note: All commands should be run from the root of the repository.

```

## 4. Install the ARC Controller

```bash
helm install arc \
--namespace actions-runner-system \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller
```

Verify the controller is running:

```bash
kubectl get pods -n actions-runner-system -l app.kubernetes.io/name=gha-runner-scale-set-controller
```

## 5. Install Runner Scale Sets

Install each runner set using its values file:

```bash
# CPU runners
helm install k8s-runner-cpu \
--namespace actions-runner-system \
-f scripts/k8s-runner-resources/runner-values-cpu.yaml \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set

# 4x GPU H100/A10 runners
helm install k8s-runner-gpu \
--namespace actions-runner-system \
-f scripts/k8s-runner-resources/runner-values-4-gpu-general.yaml \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set

# 4x GPU H100 runners
helm install 4-gpu-h100 \
--namespace actions-runner-system \
-f scripts/k8s-runner-resources/runner-values-4-gpu-h100.yaml \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set

# 2x GPU H100 runners
helm install 2-gpu-h100 \
--namespace actions-runner-system \
-f scripts/k8s-runner-resources/runner-values-2-gpu-h100.yaml \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set

# 1x GPU H100 runners
helm install 1-gpu-h100 \
--namespace actions-runner-system \
-f scripts/k8s-runner-resources/runner-values-1-gpu-h100.yaml \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
```

## 6. Verify

Check that listener pods are running for each runner set:

```bash
kubectl get pods -n actions-runner-system
```

Each runner set should have a listener pod in `Running` state. Runner pods will be created on-demand when workflows target the corresponding `runs-on` label (matching `runnerScaleSetName` in each values file).

## Upgrading

To update a runner set (e.g. after changing values):

```bash
helm upgrade <runner-set-name> \
--namespace actions-runner-system \
-f scripts/k8s-runner-resources/<runner-set-values-file>.yaml \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
```

## Uninstalling

```bash
# Remove a runner set
helm uninstall <runner-set-name> -n actions-runner-system

# Remove the controller (after all runner sets are removed)
helm uninstall arc -n actions-runner-system
```
57 changes: 0 additions & 57 deletions scripts/k8s-runner-resources/arc-runner-autoscaler.yaml

This file was deleted.

27 changes: 0 additions & 27 deletions scripts/k8s-runner-resources/arc-runner-cpu.yaml

This file was deleted.

Loading