Runner Pool
ImpVMRunnerPool manages ImpVM instances for CI/CD jobs. It currently supports GitHub Actions self-hosted runners.
Sections
- Under the Hood — source-backed runner path, implemented lifecycle, and live-evidence boundary
- Scaling
- E2E Runbook
- 20-Minute Technical Presentation
How it Works
The pool controller creates and removes ImpVM objects to match runner demand. Each VM receives one JIT registration setup, then runs as an ephemeral GitHub Actions self-hosted runner. The controller removes terminal VMs and reconciles replacement capacity.
GitHub Actions Visibility
GitHub only sees capacity after runners register. The pool keeps minIdle pre-registered runners available for fast job pickup. Monitor both the Kubernetes side (pool status, ImpVM count) and the GitHub side (runner inventory).
Minimal Example
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:latest
---
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: 30Create the github-runner-app Secret before applying this pool. The E2E runbook shows its required fields.
