Runner Pool E2E Runbook
End-to-end validation of ImpVMRunnerPool against a real GitHub Actions organization.
Prerequisites
- Imp installed on a cluster with KVM-capable nodes
- A GitHub organization or repository for runner registration
- A GitHub PAT with
reposcope (for repo-scoped runners) ormanage_runners:org(for org-scoped)
Setup
1. Create the runner secret
bash
kubectl create secret generic github-runner-token -n default \
--from-literal=token=<your-github-pat>2. Create a VMClass and template
yaml
apiVersion: imp.dev/v1alpha1
kind: ImpVMClass
metadata:
name: runner-class
namespace: default
spec:
cpu: 2
memoryMiB: 2048
diskGiB: 10
---
apiVersion: imp.dev/v1alpha1
kind: ImpVMTemplate
metadata:
name: gh-runner
namespace: default
spec:
classRef:
name: runner-class
image: ghcr.io/syscode-labs/imp-runner:latest3. Create the runner pool
yaml
apiVersion: imp.dev/v1alpha1
kind: ImpVMRunnerPool
metadata:
name: ci-pool
namespace: default
spec:
templateName: gh-runner
platform:
type: github-actions
credentialsSecret: github-runner-token
scope:
repo: my-org/my-repo # or set org: my-org for org-scoped
scaling:
mode: polling
minIdle: 1
maxConcurrent: 5
scaleUpStep: 1
cooldownSeconds: 30Verify
Kubernetes side
bash
kubectl get impvmrunnerpool ci-pool -n default -o yaml
kubectl get impvm -n default -l imp.dev/pool=ci-pool
kubectl logs -n imp-system deploy/imp-controller-manager -c manager | grep runnerpoolGitHub side
Check that runners appear as online in your repo/org:
GitHub → Settings → Actions → RunnersTrigger a job
Create a workflow that targets your runners:
yaml
# .github/workflows/test-imp-runner.yml
on: workflow_dispatch
jobs:
run:
runs-on: self-hosted
steps:
- run: echo "running on imp runner $(hostname)"Dispatch it and confirm the job is picked up by one of the pool VMs.
Scaling validation
Set minIdle: 0 and queue multiple jobs. Confirm the pool scales up to maxConcurrent, respects scaleUpStep, and scales back down after cooldownSeconds.
Teardown
bash
kubectl delete impvmrunnerpool ci-pool -n default
kubectl delete secret github-runner-token -n defaultRunners deregister from GitHub automatically on VM deletion.
