Quickstart
Imp installs as a Kubernetes operator + node agent stack and exposes VM workflows through CRDs. This quickstart uses the versioned OCI chart for v0.9.0.
Prerequisites
- Kubernetes cluster (Kind supported for e2e)
kubectl,helm, and cluster-admin context- Nodes with
/dev/kvmand capabilities for Firecracker runtime operations - At least one Ready, schedulable node labeled
imp/enabled=true
Label the target node pool (Talos/Omni: via machine config patch, not kubectl label ad-hoc):
kubectl label node <node-name> imp/enabled=true --overwrite
kubectl get nodes -l imp/enabled=trueInstall
Imp's node agent mounts /dev/kvm and narrow host paths for Firecracker and the guest kernel. It requires a dedicated privileged namespace. Do not relax Pod Security Admission for application namespaces.
kubectl create namespace imp-system --dry-run=client -o yaml | kubectl apply -f -
kubectl label namespace imp-system pod-security.kubernetes.io/enforce=privileged --overwrite
helm upgrade --install imp oci://ghcr.io/syscode-labs/charts/imp --version 0.9.0 -n imp-system --create-namespace
kubectl -n imp-system get podsAlternative (pull then install from local archive):
helm pull oci://ghcr.io/syscode-labs/charts/imp --version 0.9.0
helm upgrade --install imp ./imp-0.9.0.tgz -n imp-system --create-namespaceThe chart defaults agent.nodeSelector and kvm.preflight.nodeSelector to imp/enabled=true. Keep that required selector when adding placement constraints.
Pin images by digest in production values (agent.image.digest, operator.image.digest). Verify digests before promotion.
Tiny Profile (Constrained Nodes)
For nodes with 1 vCPU / 1 GiB RAM, disable webhooks and cert-manager:
helm upgrade --install imp oci://ghcr.io/syscode-labs/charts/imp --version 0.9.0 -n imp-system \
--set webhook.enabled=false \
--set certManager.enabled=false \
--set serviceMonitor.enabled=falseTiny profile is for smoke validation only — one VM at a time. Expect swap pressure and slower reconcile.
Recommended baseline for stable operation: >= 2 vCPU, >= 4 GiB RAM.
Create a Network and VM
Every ImpVM requires an ImpVMClass and a classRef.
kubectl apply -f quickstart.yamlapiVersion: imp.dev/v1alpha1
kind: ImpVMClass
metadata:
name: tiny
namespace: default
spec:
cpu: 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
dns:
enabled: true
---
apiVersion: imp.dev/v1alpha1
kind: ImpVM
metadata:
name: quick-vm
namespace: default
spec:
image: ghcr.io/syscode-labs/imp-guestbook:latest
classRef:
name: tiny
networkRef:
name: quick-netFirst 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.
apiVersion: imp.dev/v1alpha1
kind: ImpVM
metadata:
name: quick-vm-ephemeral
namespace: default
spec:
image: ghcr.io/syscode-labs/imp-guestbook:latest
classRef:
name: tiny
networkRef:
name: quick-net
expireAfter: 1hResolution precedence: ImpVM.spec.expireAfter → creator pool (ImpVMRunnerPool / ImpWarmPool) → ImpVMTemplate.spec.expireAfter → disabled.
Verify
Replace default with your namespace if different.
kubectl get impvm -A
kubectl describe impvm quick-vm -n default
kubectl get impnetwork quick-net -n default -o yamlA successful deployment shows quick-vm in Running phase.
Optional: Sandbox
Imp is complete without it. For isolated AI-agent sandbox tenants, extend with the optional imp-sandbox add-on:
Optional: imp-sandbox →
/sandbox/— multi-tenant isolation with standard/hard tenancy, gateway data-plane, and per-sandbox tokens. Install:oci://ghcr.io/syscode-labs/charts/imp-sandbox:0.9.0.
See Sandbox Overview and Sandbox Install — or continue to base Imp.
