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 App installed for the target organisation, with a runner group available for the pool
Setup
1. Create the GitHub App secret
bash
kubectl create secret generic github-runner-app -n default \
--from-file=github-app-private-key=<app-private-key.pem> \
--from-literal=github-app-id=<app-id> \
--from-literal=github-app-installation-id=<installation-id>2. Create a VMClass and template
yaml
apiVersion: imp.dev/v1alpha1
kind: ImpVMClass
metadata:
name: runner-class
namespace: default
spec:
vcpu: 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-app
tokenSource: github_app
scope:
org: my-org
runnerGroup: imp-runners
scaling:
mode: polling
minIdle: 1
maxConcurrent: 5
scaleUpStep: 1
cooldownSeconds: 30
polling:
enabled: true
intervalSeconds: 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-app -n defaultRunners deregister from GitHub automatically on VM deletion.
