Skip to main content
Now in general availability

Enterprise orchestration.
No Kubernetes required.

Odysseus is a fully managed container orchestration platform. Sign up, connect your nodes with a one-liner, and get autoscaling, canary deployments, AI-powered operations, and CVE scanning — without the Kubernetes complexity.

Fully managed control plane · One-liner node setup · No dedicated platform team

2–3 min
Deployment time (down from 30–60 min)
~50 MB
Control plane RAM, measured in production
Instant
Rollback on failure (vs 15–30 min manual)
0
Dedicated platform engineers required
The problem

Stuck between too simple
and too complex?

Managing 50 or 100 containers shouldn't require a dedicated platform team. But it shouldn't be held together with shell scripts either.

Docker Compose hits its limits

No autoscaling, no high availability, no rolling deploys. One bad push can take down your entire service — and manual recovery takes the team away from shipping.

Kubernetes is overkill

A documented 2 GB minimum per machine, months of ramp-up, 1–2 dedicated engineers to maintain it. At this size you're paying an enterprise tax for features you'll never fully use.

Every deployment is a risk

No canary releases means bugs reach 100% of your users instantly. No audit trail means you can't answer "what changed and when?" for compliance reviews or post-mortems.

❌ Without Odysseus
  • 30–60 minutes of manual deployment steps
  • A bad deploy takes down 100% of users
  • Scale manually when traffic spikes hit
  • No audit trail — "who changed that?" is unanswerable
  • Secrets live in environment variables or bash scripts
  • Recovery from failure takes 15–30 minutes
✅ With Odysseus
  • 2–3 minute automated deployments, every time
  • Canary releases expose bugs to 10% before full rollout
  • Prometheus-driven autoscaling, no manual intervention
  • Complete audit trail with actor, timestamp, and outcome
  • Vault-backed secrets on tmpfs — never in env vars
  • Instant automated rollback on health check failure
How it works

Sign up, connect, deploy

Odysseus is fully managed. Sign up, run a one-liner to connect your nodes, and start deploying — the control plane is on us.

odysseus.delta-telematics.ca/nodes
Nodes view showing 2 connected nodes with health status, VPN, scheduling, containers, CPU and memory metrics
Connect your infrastructure in one command. After signing up, run a single install script on your server. The Odysseus agent installs automatically, connects via encrypted WireGuard VPN, and your node appears in the dashboard — ready for deployments.
Capabilities

Everything you need.
Nothing you don't.

Built for teams that have outgrown Docker Compose but don't want to build a platform team just to run their containers.

Docker Compose syntax you already know

Extend your existing docker-compose.yml files with an x-odysseus block. No new DSL to learn — your team ships on day one.

# my-app.yaml version: "3" services: web: image: myapp:v2.1.0 x-odysseus: replicas: 3 scaling: min: 2 max: 10 metrics: - type: cpu target: 70 canary: weight: 10 auto_promote: true
✓ Compatible with existing Compose files

Multi-network container attachment

Attach containers to multiple Docker networks simultaneously — a key limitation of Nomad and many other orchestrators that Odysseus solves natively.

Four-tier RBAC

Admin, Operator, Developer, and Read-only roles out of the box. Control exactly who can deploy, scale, or just observe — with JWT + mTLS authentication.

4
Access roles
mTLS
Inter-component auth

Lightweight agent, zero overhead

The Odysseus agent is a single Go binary that runs on your nodes — about 28 MB of resident memory, measured on live production and development nodes. Installs in seconds, auto-upgrades with health-check-gated rollback.

~28 MB
Agent RAM, per node
<1%
CPU at idle

Automated incident response

Odysseus detects container crashes, OOM kills, restart loops, and health check failures in real time — then executes remediation automatically. Self-healing infrastructure without on-call fatigue.

8
Incident types
6
Auto-remediation actions

Built-in CVE scanning

Dual-backend vulnerability scanning with Trivy and Grype. Define policies to block deployments with critical CVEs automatically. Get patch recommendations with severity-based prioritization.

✓ Policy-based deployment gating
AI-Powered Operations

Meet Athena — your AI ops assistant

Deploy, troubleshoot, and manage infrastructure through natural language. Athena connects to 61 orchestration tools with RBAC-scoped access and safety guardrails.

Natural language deployments
"Deploy n8n with 2 replicas on n8n.my-domain.com"
Intelligent troubleshooting
"Why is redis-cache restarting?" — Athena investigates logs, metrics, and events
Operations at scale
"Scale web-frontend to 8 replicas" — with confirmation prompts for safety
Security-first
RBAC-scoped access, secret redaction, rate limiting, full audit trail
Athena AI — Cluster Overview
Athena answering 'How is everything looking?' with full cluster health status — 7 of 13 deployments running, 6 stopped, using cluster_health and deployment_list tools
61 tools across 11 categories: Deployments, Containers, Canary, Cluster, Config, Backup, Debug, Network, Volumes, Audit, and SRE. Each tool is permission-checked against your RBAC role before execution.
Autonomous Incident Response

SRE Orchestrator — self-healing infrastructure

Detect container crashes, OOM kills, health check failures, and performance anomalies in real time. An integrated LLM diagnoses root causes and executes safe remediations — with graduated rollout and human approval guardrails.

AI-powered diagnosis
The LLM analyzes logs, metrics, and container state to identify root causes — not just symptoms
Graduated rollout
Start in observe-only mode, graduate to low-risk auto-execution, then full automation — at your pace
Safety guardrails
Blacklist services, cap commands per incident, block dangerous patterns, require approval for high-risk actions
Real-time updates
WebSocket-powered live incident feed with Slack and email notification routing by severity
SRE Automation — Overview
SRE Automation dashboard showing orchestrator health status, incident statistics (23 total, 18 resolved, 4.2m avg resolution), and recent incidents with severity badges and real-time status updates
7 incident categories (health, performance, availability, security, configuration, resource, network) detected from Alertmanager, Consul, manual reports, and Athena. Each incident flows through AI diagnosis, risk-assessed remediation, and configurable approval gates.

LLM-powered analysis

Multi-turn AI analysis with configurable timeouts, token limits, and custom system prompts. The LLM investigates, diagnoses, and proposes commands — each tagged with a risk level.

3
Risk levels (LOW / MED / HIGH)
Multi-turn
Persistent investigation

Configurable guardrails

Set max commands per incident, cooldown periods, dangerous command patterns, and per-service blacklists. Control which severities and risk levels can auto-execute.

RBAC
sre:configure & sre:approve
Per-service
Blacklist protection

Full incident lifecycle

Incidents progress through open, in progress, awaiting approval, resolved, failed, or escalated — with deduplication, correlation, and resolution tracking (fixed, dismissed, external, no action needed).

6
Incident statuses
4
Resolution types
Comparison

The right tool at 50–100 containers per node — and up from there

Odysseus is purpose-built for the point where Docker Compose breaks down and Kubernetes is more machinery than the job needs — and it keeps going from there. Nomad is the closest peer in this table; where it matches us or beats us, the row says so.

Capability Docker Compose Odysseus Kubernetes Nomad[5]
Autoscaling Prometheus-driven Complex setup Separate Autoscaler agent
Zero-downtime deployments Rolling update block
Canary deployments Auto-promote + rollback Via Istio/Argo Auto-promote + auto-revert
Instant rollback Revert to last stable
RBAC 4 built-in roles Complex RBAC ACL policies and roles
Audit trail Built-in Via add-on Enterprise only
Vault secret injection tmpfs-mounted Via sidecar Native, tmpfs secrets dir
Geographic data residency Placement filter, by ISO country or region[1] Via node affinity on custom labels Region and datacenter constraints
Tenant isolation Nodes are enrolled to a tenant Namespaces; nodes are cluster-scoped Namespaces; nodes are shared
Multi-network containers Limited Native Via CNI plugin One network_mode per task
Control plane RAM None — CLI only 47–65 MB measured 2 GB minimum per machine[2] 8–16 GB per server, three or five servers
Per-node agent RAM None — CLI only ~28 MB measured 275 MB measured on K3s; 574 MB – 1.9 GB reserved by managed providers[3] No published figure
Learning curve Hours Days Months Days
AI operations assistant Athena (61 tools)
CVE scanning Trivy + Grype Via add-on Via add-on
Auto-incident response AI-powered SRE Via add-on Restart and reschedule policies
Dedicated platform staff 0 0 1–2 engineers You run the servers yourself
Containers per node 1–20 containers 50–100+ containers[4] — the platform total scales with the number of nodes 110 pods per node[4] — a pod holds one or more containers No published ceiling — about 330 per client in their own two-million-container run

How these numbers and claims were arrived at

  1. Geographic data residency is a placement filter, and it ships switched off. A deployment carries odysseus.io/data-residency-country — an ISO 3166-1 alpha-2 code such as CA or DE — or odysseus.io/data-residency-region, which names an operator-defined set of those codes, or odysseus.io/blocked-countries. The scheduler compares each against the node’s own country and region labels before it places anything, and a node that does not satisfy the requirement is dropped from the candidate set — so the deployment cannot land outside its permitted geography, rather than being found there afterwards. It is switched on per installation in the control plane’s configuration and is off by default; the regions are the operator’s own definitions, not ours. Kubernetes can express the same constraint: it ships topology.kubernetes.io/region and topology.kubernetes.io/zone as well-known node labels, and node affinity to select on them, but no country or residency label of its own — so residency there is assembled from custom labels and affinity rules — kubernetes.io. The difference is where the concept lives, not whether it can be done. Nomad needs no such assembly and this row is not a differentiator against it: region and datacenter are first-class in its architecture, and a job constrains placement on ${node.datacenter}, ${node.region} or any operator-set ${meta.<key>} value. What differs there is vocabulary rather than power — ours is a named residency label carrying ISO country codes and region membership, theirs a general-purpose constraint pointed at whatever the operator wrote on the node.
  2. Odysseus memory figures are measured, not modelled. Both are resident memory (RSS) of the running process, sampled over a 14-minute window on 20 August 2026 across two live installations: production (control plane 47–51 MB over 19 samples, node agent 26–28 MB) and development (control plane 49–64 MB over 18 samples, node agent 26–28 MB). The control plane runs once per installation; the agent runs once per node. The control plane publishes the figure itself as process_resident_memory_bytes on its Prometheus /metrics endpoint, so it can be checked directly rather than taken on trust. We quote RSS rather than docker stats because the latter includes reclaimable page cache, which on a freshly started container reads several times higher without any of it belonging to the orchestrator. The Kubernetes figure is the documented minimum in the upstream kubeadm install guide: “2 GB or more of RAM per machine” — kubernetes.io.
  3. Per-node comparison. Upstream Kubernetes publishes no default reserve for its node agents — kubeReserved and systemReserved both ship empty — so there is no single official number to quote. The profiled figure is SUSE’s published K3s resource profiling, which puts the Kubernetes components on an agent (worker) node — its words, “the kubelet and k3s agent” — at 275 MB on an Intel 8375C, from 95th-percentile readings at steady state — docs.k3s.io. K3s is a single merged binary with its own embedded runtime, so this is a floor for upstream Kubernetes running the same components as separate processes, not an equivalent. The reserved figures are capacity that managed providers withhold from every worker node before any application container is scheduled, computed from their own published formulas: AWS EKS reserves (11 × max-pods) + 255 MiB (574 MiB on an m5.large, which supports 29 pods) — docs.aws.amazon.com; Google GKE reserves 25% of the first 4 GiB and 20% of the next 4 GiB plus 100 MiB (≈1.9 GiB on an 8 GiB node) — cloud.google.com. Reserved capacity is an allowance the scheduler withholds, not measured consumption; we label it as such because the two are not the same thing.
  4. Container counts are per node, and ours is a statement of fit, not a cap. The range describes where Odysseus is designed to sit — above the point where Docker Compose runs out of road, below the point where Kubernetes earns its complexity. It is positioning, not a benchmark result, and we do not present it as one. A platform total is that per-node figure across however many nodes a control plane manages — an architectural consequence, not something we have measured at fleet scale, so we publish no fleet number either. The Kubernetes figure is that project’s own documented ceiling for a supported cluster: “No more than 110 pods per node”, stated alongside “No more than 5,000 nodes” and “No more than 300,000 total containers” — kubernetes.io. The two columns do not count the same unit — Kubernetes limits pods, a pod holds one or more containers, and we count containers — so read them as adjacent rather than interchangeable. We do not convert between them, because the ratio depends on how the pods are built. Managed distributions cap lower again: AWS EKS derives the per-node pod cap from the machine’s network interfaces rather than from that documented figure, and its own worked example is 29 pods on a two-vCPU machine — the document cited in note 3. Nomad publishes no per-node ceiling at all, which is why its cell says so rather than carrying a figure. The largest run HashiCorp publishes is its own demonstration: 2,000,000 containers across 6,100 clients — Nomad’s word for a node running its agent — in 10 AWS regions, scheduled in 22 minutes by three servers — hashicorp.com — an average of about 330 containers per client. That is a demonstration rather than a supported limit, and it is a larger number than anything we have run.
  5. The Nomad column is sourced, and it wins several rows. Nomad is the nearest peer to Odysseus in this table — a single binary, light on resources, and built to integrate with the same Consul this platform runs on — so a framing that works against Kubernetes would be unfair here, and we have not used one. Rolling updates, canaries with auto_promote, automatic revert of a failed deployment and reverting to the last stable job are all in the job specification’s update block in the Community Edition — developer.hashicorp.com. Autoscaling is real, and arrives as a second daemon to run: the Nomad Autoscaler is “built and released separately to Nomad”, covers horizontal application and cluster scaling, and reads Prometheus among its metrics sources — developer.hashicorp.com. Secret handling is at least our equal: a task’s secrets/ directory is backed by an in-memory filesystem and mounted noexecdeveloper.hashicorp.com. ACL policies and roles are Community Edition. What is not: audit logging, resource quotas and Sentinel policy are Nomad Enterprise, as is deploying one job across federated regions — federating the regions themselves is not — developer.hashicorp.com. Namespaces are Community Edition, and they segment jobs, allocations, deployments and evaluations; the documentation is explicit that “Nomad does not namespace objects that are shared across multiple namespaces. This includes nodes” — developer.hashicorp.com. Kubernetes draws the same line — “low-level resources, such as Nodes … are not in any namespace” — kubernetes.io; on this platform a node is enrolled to a tenant, which is what that row records. The server figure is HashiCorp’s own reference architecture — “A Nomad cluster typically comprises three or five servers”, at 2–4 cores and 8–16 GB of memory each for a small production deployment — developer.hashicorp.com. That is machine sizing a reader should treat the way we treat the Kubernetes figure in note 2: a recommendation, not measured process memory. We found no published figure for the client agent, so the column says there is none rather than guessing at one, and the row on learning curve is our estimate rather than anyone’s measurement.
Pricing

Simple, transparent pricing

Base fee + per-node pricing that scales with you. Start free, upgrade as you grow.

Monthly
Annual Save up to 20%
Community
$ 0
Free forever

For indie developers, home labs, and evaluation use.

  • Up to 3 nodes
  • 1 user
  • Full Docker Compose compatibility
  • WireGuard VPN mesh
  • Basic Prometheus metrics
  • 2-tier RBAC
  • Community support
  • No Athena AI
  • No CVE scanning
Get started free
Starter
$ 10
/month base fee
+ $10 per node/month

For solo developers and tiny teams running small production workloads.

  • Up to 5 nodes
  • Up to 3 users
  • Athena AI (100 queries/mo)
  • Weekly CVE scanning
  • Canary deployments
  • Vault secret injection
  • Basic SRE automation
  • 30-day audit trail
  • Email support (48h SLA)
Start free trial
Enterprise
$ 99
/month base fee
+ $20 per node/month

For multi-site organizations with compliance and custom SLA needs.

  • Unlimited nodes
  • Everything in Pro
  • Multi-datacenter federation
  • SSO / SAML / LDAP / OIDC
  • 1-year audit trail
  • SOC 2 & ITSG-33 compliance
  • Volume discounts (50+ nodes)
  • Dedicated account manager
  • 1h SLA + 24/7 on-call support
Contact sales
14-day free trial on all paid tiers — no credit card required
Cancel anytime · Save ~20% with annual billing
Free migration support from Docker Compose, Swarm, or K8s
99.9% uptime SLA on Enterprise

Start orchestrating
in under 10 minutes.

Sign up, connect your first node, and deploy — all in under 10 minutes. No Kubernetes expertise, no dedicated platform team.

No credit card required · 14-day free trial · Cancel anytime