Skip to content

Keel vs Kubernetes ​

Kubernetes is a general-purpose orchestration platform with a large ecosystem and broad portability. Keel targets a narrower use case: deploying common web application components to managed AWS services without operating a Kubernetes cluster.

Same job, less work ​

What you wantKubernetesKeel
Three copies of a web appDeployment → ReplicaSet → Pods, requests, limits, three kinds of probetype: web, cpu, memory, health_check
HTTPS on your own domainService + Ingress + an ingress controller + cert-manager + external-dns + issuersdomain: — load balancer, auto-renewing ACM certificate, DNS records, and HTTP→HTTPS redirect
Scale on CPUmetrics-server + HPA + Karpenterautoscaling: { min, max, target_cpu }
A background workerA second Deployment, no Service, plus a PodDisruptionBudgettype: worker
A nightly jobCronJob, concurrencyPolicy, backoffLimittype: scheduled
A Postgres databaseAn operator to run, or wire up RDS yourselfdatabase: { engine: postgres }
Migrate before traffic shiftsAn init container or Job, plus a Helm hookrelease:
Let the app read a bucketOIDC provider, ServiceAccount annotation, trust policy, IAM rolebindings:
Secrets from AWSExternal Secrets Operator, SecretStores, sync failureskeel config set
Logs and metricsPrometheus, Grafana, Fluent Bitkeel logs, keel ps, built-in dashboard
Roll back a bad releasehelm rollback, or an Argo sync to a past revisionkeel rollback
Know what it costsKubecost, or a spreadsheetkeel cost
Keep it all runningControl plane, add-on, and node upgrades, several times a yearNothing to upgrade

The whole config ​

yaml
name: store
region: us-east-1

pipeline:
  source: github
  repo: acme/store

services:
  web:
    type: web
    port: 3000
    health_check: { path: /up }
    cpu: 512
    memory: 1024
    autoscaling: { min: 2, max: 10, target_cpu: 60 }
  worker:
    type: worker
    command: ["worker"]
    cpu: 256
    memory: 512

database:
  engine: postgres
  version: "16"
  instance: db.t4g.small

release:
  command: ["bundle", "exec", "rails", "db:migrate"]

keel up provisions the infrastructure and keel deploy releases the application. There is no Kubernetes control plane or add-on stack to operate.

Control-plane cost ​

An EKS cluster carries an hourly control-plane charge even when no workloads are running. ECS has no separate cluster fee, though the Fargate tasks and other AWS resources still incur charges.

When Kubernetes is the better fit ​

Choose Kubernetes when you need its portability, custom controllers, scheduling controls, or ecosystem. Choose Keel when the standard AWS application stack covers your needs and you want a smaller operational surface.

Get started → · Back to comparisons

Keel — the missing platform layer for AWS.