Skip to content

Quickstart

IMP adds virtual-machine resources to Kubernetes. The operator decides which VMs should exist, and the node agent starts them on KVM-capable nodes.

Prerequisites

  • Kubernetes cluster
  • kubectl, helm, and cluster-admin context
  • Nodes with /dev/kvm and capabilities for Firecracker runtime operations
  • At least one Ready, schedulable node labeled imp/enabled=true

Use your normal cluster configuration to label the nodes that should run Imp:

bash
kubectl label node <node-name> imp/enabled=true --overwrite

Install

From the IMP source checkout, create the dedicated runtime namespace and install the chart:

bash
kubectl create namespace imp-system --dry-run=client -o yaml | kubectl apply -f -
kubectl label namespace imp-system \
  pod-security.kubernetes.io/enforce=privileged \
  pod-security.kubernetes.io/audit=privileged \
  pod-security.kubernetes.io/warn=privileged \
  --overwrite
kubectl get nodes -l imp/enabled=true
helm upgrade --install imp ./charts/imp -n imp-system --create-namespace
kubectl -n imp-system get pods

The chart schedules the node agent only onto nodes labelled imp/enabled=true.

Create a Network and VM

Each ImpVM needs exactly one compute source: either a direct classRef, as in this example, or a reusable templateRef.

Save the following manifest as quickstart.yaml, then apply it:

bash
kubectl apply -f quickstart.yaml
yaml
apiVersion: imp.dev/v1alpha1
kind: ImpVMClass
metadata:
  name: tiny
  namespace: default
spec:
  vcpu: 1
  memoryMiB: 512
---
apiVersion: imp.dev/v1alpha1
kind: ImpNetwork
metadata:
  name: quick-net
  namespace: default
spec:
  subnet: 192.168.100.0/24
  nat:
    enabled: true
---
apiVersion: imp.dev/v1alpha1
kind: ImpVM
metadata:
  name: quick-vm
  namespace: default
spec:
  image: docker.io/library/nginx:1.27-alpine
  classRef:
    name: tiny
  networkRef:
    name: quick-net

First VM with expireAfter

Imp can auto-delete a VM after a fixed window anchored to status.runningAt. 0 or unset means disabled; minimum enabled value is 60s.

yaml
apiVersion: imp.dev/v1alpha1
kind: ImpVM
metadata:
  name: quick-vm-ephemeral
  namespace: default
spec:
  image: docker.io/library/nginx:1.27-alpine
  classRef:
    name: tiny
  networkRef:
    name: quick-net
  expireAfter: 1h

Resolution precedence: ImpVM.spec.expireAfter → creator pool (ImpVMRunnerPool / ImpWarmPool) → ImpVMTemplate.spec.expireAfter → disabled.

Verify

Replace default with your namespace if different.

bash
kubectl get impvm -A
kubectl describe impvm quick-vm -n default
kubectl get impnetwork quick-net -n default -o yaml

A successful deployment shows quick-vm in Running phase.

Optional: Sandbox

Imp does not require sandbox. Use imp-sandbox for isolated AI-agent tenants:

Optional: imp-sandbox → /sandbox/ — multi-tenant isolation with standard and hard tenancy.

See Sandbox Overview and Sandbox Install. Otherwise, continue with base Imp.

Next