Skip to content

Runner Pool ​

ImpVMRunnerPool manages ImpVM instances for CI/CD jobs. It currently supports GitHub Actions self-hosted runners.

Sections ​

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: 30

Create the github-runner-app Secret before applying this pool. The E2E runbook shows its required fields.