# Deploy your app to Edera

Deploying to Edera requires one change: adding a `runtimeClassName` to your pod spec.

## Before and after

**Standard Kubernetes deployment:**

```yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-app
      image: my-app:latest
```

**With Edera isolation:**

```yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  runtimeClassName: edera  # This is the only change
  containers:
    - name: my-app
      image: my-app:latest
```

That’s it. Your container now runs in a dedicated virtual machine with hypervisor-level isolation.

## Configuring CPU allocation

For workloads that use multiple CPU cores, set the `dev.edera/cpu` annotation to match your CPU request:

```yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-app
  annotations:
    dev.edera/cpu: "4"       # Match to your CPU request
spec:
  runtimeClassName: edera
  containers:
    - name: my-app
      image: my-app:latest
      resources:
        requests:
          cpu: "4"
```

**Always set `dev.edera/cpu` for multi-core workloads.** Without this annotation, zones receive a default vCPU count that may not match your Kubernetes CPU request. See [CPU performance benchmarking](https://docs.edera.dev/guides/validate/cpu-benchmarking/) for details.

## What stays the same

- **Your container image** - No rebuilds, no modifications
- **Your Dockerfile** - No changes needed
- **Environment variables** - Work exactly as before
- **Networking** - Same ports, same service discovery
- **Volumes** - PersistentVolumes and ConfigMaps work normally
- **Resource limits** - CPU and memory limits are respected

## Verify it’s working

Check that your pod is using the Edera runtime:

```bash
kubectl get pod my-app -o jsonpath='{.spec.runtimeClassName}'
```

Expected output:

```text
edera
```

## Deploy a Deployment or StatefulSet

The same pattern works for any workload type. Add `runtimeClassName` to the pod template:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      runtimeClassName: edera  # Add this line
      containers:
        - name: my-app
          image: my-app:latest
```

## Next steps

- **[GPU support](https://docs.edera.dev/guides/gpu/)** - Run AI/ML workloads with GPU passthrough
- **[Troubleshooting](https://docs.edera.dev/support/troubleshooting/)** - Common issues and solutions
- **[How Edera works](https://docs.edera.dev/technical-overview/)** - Understand what happens under the hood

Last updated on 2026-03-19.
