Orkestia
Blog
Runners

Runner groups

Every runner group is a purpose, an integration, and a backend kind — the catalog of kinds you can create, and which page covers each one

A runner group is the long-lived pool you configure. Compute stays in your account (or on your laptop, for DevKit). Orkestia is the control plane.

The create wizard at runners.orkestia.dev asks three independent questions. The public docs used to collapse those into “AWS / Azure / Kubernetes.” This section names every kind the platform actually stores.

The conceptual model (control plane vs execution, warm pools, reconcile-loop scaling) stays on Runners concepts. The operational lifecycle (provision → scale → decommission) stays on Runner management. These pages are the kind catalog.

Three axes, not one

AxisFieldWhat it answers
PurposepurposeWhat work this pool is for
Integrationintegration_typeWhich job source (if any) the runner binary registers with
Backend kindbackend_typeWhere each execution physically runs

The create form keeps purpose and integration consistent (an agent pool forces integration=none; a GitLab pool sets purpose=gitlab_runner). The server stores them as separate enums — do not invent extra combinations in automation that the wizard would refuse.

Full purpose catalog: Purposes & integrations.

Backend kinds

backend_type is the kind. Discover required config keys with data.runner.list-provider-config-specs before you create a group. Exact workflow names live in the live catalog — treat the names below as orientation, not a contract.

Production

Kind (backend_type)ConnectionShapePage
fargateAWSECS / Fargate tasksFargate
ec2_auto_scalingAWSEC2 Auto Scaling group + ECS capacity providerEC2 Auto Scaling
ec2_vmAWSOne EC2 instance per executionEC2 VM
kubernetesKubernetesOne pod per execution in a namespace you nameKubernetes
azure_container_apps_jobAzureContainer Apps JobsAzure Container Apps
azure_vmssAzureVirtual Machine Scale SetAzure VMSS
azure_vmAzureOne Azure VM per executionAzure VM
devkitnoneLaptop / hosted broker — no cloud connectionDevKit

Kubernetes and Azure groups carry live production fleets today (including Orkestia's own agent pools). AWS Fargate and EC2 are the original GA CI path.

Beta

Kind (backend_type)ConnectionShapePage
gceGCPOne Compute Engine VM per executionGCE
cloud_runGCPCloud Run JobsCloud Run
do_app_jobDigitalOceanApp Platform JobDO App Job
do_dropletDigitalOceanOne Droplet per executionDO Droplet
mgc_vmMagalu CloudOne Magalu VM per executionMagalu VM

Treat beta kinds as partial: provisioning and launch exist in the provider libraries; warm-pool reconcile, health-reap, and multi-region are not uniformly GA. Confirm the current runner.* surface in reference.orkestia.dev before committing a production pipeline.

Reserved / do not create

Kind (backend_type)Why it existsWhat to use instead
eksLegacy label still accepted in the databaseKubernetes against an EKS cluster connection

New groups should use kubernetes for any conformant cluster — EKS, AKS, GKE, Magalu, or your own. The eks value is a reserved alias, not a second product.

Pick a kind

Fargate

Serverless AWS tasks. Default AWS CI and agent path.

EC2 Auto Scaling

Persistent ASG capacity behind ECS.

EC2 VM

Dedicated instance per execution, full warm-pool controller.

Kubernetes

Pods on any conformant cluster you already run.

Azure Container Apps

Job executions on an Azure Container Apps environment.

Azure VMSS

Scale-set capacity in Azure.

Azure VM

One Azure VM per execution.

GCE

Compute Engine VMs (beta).

Cloud Run

Cloud Run Jobs (beta).

DO App Job

App Platform Jobs (beta).

DO Droplet

One Droplet per execution (beta).

Magalu VM

Magalu Cloud VM (beta). Brazil-region data residency.

DevKit

Cloudless local (or hosted) coding broker.

Purposes & integrations

github_actions, gitlab_runner, agent, generic — and the job-source grant each one needs.

Create path

  1. Connect the cloud (or skip it for DevKit): AWS, GCP / Azure / Magalu / Kubernetes.
  2. Open Add runner group in the Runners app. Stage 2 is Runner type — that list is this catalog, filtered by the connection you picked.
  3. Set purpose + integration. Agent pools must be created as purpose=agent; you cannot flip a CI pool later. See Agent runner groups.
  4. Fill the backend's required config keys. The form is driven by data.runner.list-provider-config-specs.
  5. Submit. Provisioning is runner.group-creation / runner.environment-provision-*. The group is usable only after it reaches active.
A group binds to one backend kind and one connection. There is no cross-cloud spill inside a group. Multi-cloud orgs run multiple groups.