Kubernetes
The standard open-source orchestrator: declare the containers you want, and controllers keep the cluster matching it.
- What it is
- Container orchestration
- Type
- Open source
- Made by
- Cloud Native Computing Foundation
- License
- Apache 2.0
- Facts checked
- 5 October 2026
What it is
A Kubernetes cluster has a control plane (an API server backed by the etcd key-value store, a scheduler and a set of controllers) and worker nodes, each running an agent called the kubelet. You submit objects to the API, such as a Deployment that asks for three replicas of a Pod. The scheduler picks a node with enough free CPU and memory for each Pod, the kubelet starts its containers, and controllers keep comparing what exists with what you asked for, replacing Pods that crash or whose node disappears.
Google open-sourced Kubernetes in 2014, and it is now run by the CNCF. Its real difference from simpler orchestrators is the API itself: everything (load-balanced Services, config, secrets, storage volumes, batch Jobs) is a declarative object, and you can add your own object types with controllers that manage them. That is why databases, autoscalers and deploy tools ship as Kubernetes “operators”, and why every major cloud sells a managed version (EKS, GKE, AKS).
Why teams pick it
- Self-healing, rolling updates and rollbacks, service discovery and bin packing built in
- Runs the same way on every cloud and on your own hardware
- Extensible API: custom resources and operators let other tools plug in as first-class objects
- Designed for clusters of up to 5,000 nodes and 150,000 Pods
Watch out for
- Many moving parts: networking, ingress, storage, upgrades and RBAC all need expertise
- The control plane and per-node agents cost money and attention even for a tiny app
- It doesn’t add or remove machines on its own; you need a node autoscaler such as Karpenter
- Containers on a node share its kernel, so mixing untrusted tenants needs extra sandboxing, such as gVisor or Kata Containers through a RuntimeClass
The Kubernetes family
14 technologies built from or on Kubernetes
Managed services
Amazon EKSAWSAWS runs the Kubernetes control plane for you; you choose how much of the worker side to hand over too.Distributions
MicroK8sOpen sourceCanonical’s Kubernetes in one snap package: installs with one command on Linux, forms a highly available cluster by itself at three nodes, and adds features as addons.
RKE2Open sourceSUSE’s security-focused Kubernetes distribution: one binary per node, hardened defaults, FIPS-validated crypto and close alignment with upstream.
Talos LinuxOpen sourceA Linux distribution that only runs Kubernetes: immutable, minimal, with no shell or SSH, and managed entirely through an API.For local development
kindOpen sourceKubernetes IN Docker: each cluster node is a container, so a conformant multi-node cluster starts and disappears inside a CI job.
minikubeOpen sourceA local Kubernetes cluster for developers on Linux, macOS or Windows, in a container, a VM or on the host itself, with laptop-friendly extras.Tools
Built on it
AgonesOpen sourceRuns dedicated multiplayer game servers on Kubernetes: keeps a fleet of them warm, hands one to each match, and never kills a server while players are on it.
KlutchOpen sourceA young open-source control plane, built on Crossplane, that lets many application clusters order databases from one central Kubernetes cluster.Alternatives
What all container orchestration have in common →How it fits with other technologies
What Kubernetes uses
What uses Kubernetes
- Gois the implementation language ofKubernetes
- Mintlifyself-hosts with a Helm chart onKubernetes
- Cloud Foundrycan run all its components onKubernetes
- Beta9is self-hosted onKubernetes
- Fissionruns functions as pods onKubernetes
- KubeVirtruns VMs as custom resources inKubernetes
- Kata Containersruns each pod in its own VM forKubernetes
- smolvmruns pods as microVMs (experimental) forKubernetes
- AWS Fargatecan stand in for EKS worker nodes inKubernetes
- gVisorsandboxes pods via a RuntimeClass inKubernetes
- Podmanplays and generates Pod YAML forKubernetes
- Amazon EKSruns a certified, upstream build ofKubernetes
- Azure Kubernetes Serviceruns a certified, upstream build ofKubernetes
- Google Kubernetes Engineruns a certified, upstream build ofKubernetes
- K3spackages as one small binaryKubernetes
- MicroK8spackages upstream binaries ofKubernetes
- Red Hat OpenShiftis an enterprise distribution ofKubernetes
- RKE2packages a hardened, conformantKubernetes
- Talos Linuxexists only to runKubernetes
- kindruns throwaway conformant clusters ofKubernetes
- minikuberuns local single- or multi-node clusters ofKubernetes
- kubeadmbootstraps the control plane ofKubernetes
- Ranchermanages any conformantKubernetes
- Agonesadds game server resources toKubernetes
- Klutchconnects many app clusters ofKubernetes
- Karpenteradds and removes worker nodes forKubernetes
- Akkaforms clusters by discovering pods inKubernetes
- Apache Pekkoforms clusters by discovering pods inKubernetes
- AWS Application Load Balancercan be the ingress forKubernetes
- NGINXcan route outside traffic intoKubernetes
- Envoyruns as sidecars and gateways onKubernetes
- HashiCorp Consulinjects Envoy sidecars into pods onKubernetes
- Istiomeshes the pods and services ofKubernetes
- gRPCcarries kubelet runtime calls and probes inKubernetes
- Apache Flussis deployed with a Helm chart onKubernetes
- Apache Pulsaris deployed with a Helm chart onKubernetes
- Apache Flinkruns jobs through its operator onKubernetes
- Arroyoschedules pipeline workers as pods onKubernetes
- Bytewaxruns as a multi-process cluster onKubernetes
- Felderaruns each pipeline as a pod (Enterprise) onKubernetes
- Quix Streamsruns in Quix Cloud onKubernetes
- RisingWaveruns through Helm or its operator onKubernetes
- Streamlingis restarted and scaled out as pods onKubernetes
- Prefectcan launch each flow run as a Job onKubernetes
- Temporalis commonly self-hosted onKubernetes
- Apache Ozonecan run onKubernetes
- Cephruns (through Rook) onKubernetes
- Garagecan run onKubernetes
- MinIOcan run onKubernetes
- PGSTY Silocan run onKubernetes
- RustFScan run onKubernetes
- SeaweedFScan run onKubernetes
- Versity S3 Gatewaycan run onKubernetes
- Velerobacks up objects and volumes ofKubernetes
- Alibaba Cloud PolarDBruns open-source PolarDB-X (operator) onKubernetes
- CloudNativePGkeeps cluster state in the API ofKubernetes
- CockroachDBis deployed by its own operator onKubernetes
- Patronican keep its leader key in the API ofKubernetes
- Percona Operatorsrun databases as custom resources onKubernetes
- PGO (Crunchy Postgres for Kubernetes)runs Postgres clusters as StatefulSets onKubernetes
- ScramDBis deployed with a Helm chart onKubernetes
- Vitessruns via its operator onKubernetes
- Apache Cassandraruns, via the K8ssandra operator, onKubernetes
- ScyllaDBruns, via ScyllaDB Operator, onKubernetes
- ArangoDBruns under its own operator onKubernetes
- Neo4jdeploys with official Helm charts onKubernetes
- GreptimeDBruns, through its operator, onKubernetes
- QuestDBruns, with a Helm chart, onKubernetes
- TDenginecan be deployed as a cluster onKubernetes
- Elasticsearchruns, via the ECK operator, onKubernetes
- OpenSearchruns, via the OpenSearch operator, onKubernetes
- Pineconeruns its BYOC data plane onKubernetes
- etcdstores all cluster state forKubernetes
- KurrentDBhas its own operator for running onKubernetes
- YAMLis the usual format of manifests forKubernetes
- Apache Polarisis deployed with a Helm chart onKubernetes
- Lakekeeperis deployed with a Helm chart onKubernetes
- Project Nessieis deployed with a Helm chart onKubernetes
- Unity Catalogruns the open-source server, via Helm, onKubernetes
- GizmoSQLruns on, with its own operator,Kubernetes
- Databendcan be deployed onKubernetes
- Apache Dorisruns, via an operator, onKubernetes
- Apache Druidcan run ingestion tasks as jobs onKubernetes
- Fireboltself-hosts through an operator onKubernetes
- StarRocksruns, via an operator, onKubernetes
- Apache Amororuns optimizer pods onKubernetes
- Dremiois self-managed (Enterprise) onKubernetes
- Airbyteruns each sync as pods onKubernetes
- Apache NiFielects a cluster coordinator throughKubernetes
- Dagsterlaunches each run as a Job onKubernetes
- OLakeis deployed with a Helm chart onKubernetes
- Argo CDruns inside and continuously deploys toKubernetes
- HCP Waypointcan run kubectl through agents againstKubernetes
- Terraformcan manage resources inKubernetes
- Better Stackinstalls its collector with Helm inKubernetes
- ClickStackis installed with a Helm chart onKubernetes
- Datadogruns its Agent as a DaemonSet inKubernetes
- OpenTelemetrytags telemetry with pod metadata fromKubernetes
- Fluentdcollects container logs as a DaemonSet inKubernetes
- Prometheusdiscovers and scrapes pods and nodes inKubernetes
- Dopplersyncs secrets with an operator intoKubernetes
- HashiCorp Vaultauthenticates pods with tokens fromKubernetes
- HCP Vault Radarruns its self-hosted scanning agent onKubernetes
- HashiCorp Boundaryproxies `kubectl` sessions toKubernetes
A Deployment that keeps three replicas running · yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
replicas: 3
selector:
matchLabels: { app: api }
template:
metadata:
labels: { app: api }
spec:
containers:
- name: api
image: registry.example.com/api:1.4.2
resources:
requests: { cpu: 250m, memory: 512Mi }See it in a real stack
Web app on Kubernetes →Worth exploring
kubectl on start) that runs kubectl commands against a cluster, used here to launch a Kubernetes Job in response to an event. It is written for Cloudfleet’s own managed Kubernetes and its CLI, so the authentication steps need changing for other clusters, and passing raw kubectl arguments in an event is fine for a demo but too permissive for production.kubectl apply a Function manifest that points at code in S3. It explains why you might (one GitOps and RBAC model for pods and functions) but, being AWS’s own post, not the drawbacks.aws-auth ConfigMap, and it routes application traffic through the cluster’s control plane.lambci/docker-lambda images (since deprecated in favour of AWS’s official Lambda base images) and to Knative; read it mainly for the question, which is a common one, rather than for current tooling.RuntimeClass that start each pod as its own VM (marked experimental, with its known blockers listed), or a whole k3s cluster, through k3d, inside one VM. Useful for the concrete details, such as per-pod overhead, the /dev/kmsg device the kubelet needs and why Docker’s storage must sit on ext4, but written to sell smolvm.Where it came from2013–2026
Google had started experimenting with containers more than a decade earlier to squeeze more work out of its servers, and ran them across huge clusters with an internal system called Borg and later its successor, Omega. Outside, Docker had just made containers easy to build and run on one machine in 2013, but there was no common way to run them across a fleet of machines. Meanwhile customers of Google Compute Engine were paying for a lot of CPUs with “extremely low” utilisation, because they were running whole VMs.
In summer 2013 Craig McLuckie, Joe Beda and Brendan Burns pitched Urs Hölzle, Google’s head of technical infrastructure, on a container manager for everyone else, built on Borg and Omega’s lessons; Eric Brewer helped win approval. Its codename, Project Seven of Nine, a nod to Borg via Star Trek, is why the Kubernetes logo has seven sides. The first commit landed on June 6, 2014, and the project was unveiled at DockerCon that month. Version 1.0 shipped on July 21, 2015, and Google worked with the Linux Foundation to create the Cloud Native Computing Foundation, with Kubernetes as its founding project.
Kubernetes became the common layer for running containers: Microsoft and AWS announced managed versions in 2017, and an ecosystem of tools is built on its API. It even outgrew Docker, dropping its built-in Docker support in version 1.24 (2022).
Why it’s built this way
- Declare the desired state; controllers converge on it
- You store what you want, and independent controllers keep comparing it with what exists. They react to the current state rather than to individual events, so a missed message or crashed component heals itself on the next pass.
- Every Pod gets its own IP address
- When apps share a machine’s IP they must coordinate ports, which the docs call “very difficult to do at scale”. One IP per Pod lets every app use the port it expects, at the cost of more networking work.
- Built-in features use the same API as add-ons
- Kubernetes exposes the same interfaces it uses itself, so custom resources and controllers (“operators”) can teach it about databases or certificates as if they were native objects.
- Open source, then a neutral foundation
- The founders wanted instant feedback and engineers from businesses that would actually deploy containers. Handing it to the CNCF in 2015 put it under neutral governance rather than Google’s alone.
Timeline
- 2013
McLuckie, Beda and Burns pitch the project inside Google
- 2014
First commit on June 6; unveiled at DockerCon
- 2015
Version 1.0 on July 21; donated to the newly formed CNCF
- 2017
Microsoft (AKS) and AWS (EKS) announce managed Kubernetes
- 2022
Version 1.24 removes the built-in Docker shim
- 2026
Version 1.37 released in August
- Craig McLuckie: From Google to the world, the Kubernetes origin story (2016)
- Burns et al.: Borg, Omega, and Kubernetes (ACM Queue, 2016)
- Kubernetes Blog: 10 years of Kubernetes (Jun 2024)
- Kubernetes design and architecture
- Azure Blog: Introducing AKS, managed Kubernetes (Oct 2017)
- AWS News Blog: Amazon Elastic Container Service for Kubernetes (Nov 2017)
- Kubernetes docs: Cluster networking (one IP per Pod)
- Kubernetes Blog: Kubernetes 1.24 removes dockershim (May 2022)
- Kubernetes v1.37.0 release on GitHub (Aug 2026)
Sources8 · facts checked 5 October 2026
- Kubernetes docs: Overview
- Kubernetes docs: Cluster components
- Kubernetes docs: Deployments
- Kubernetes docs: Operator pattern
- Kubernetes docs: Considerations for large clusters
- Kubernetes docs: Node autoscaling
- Kubernetes docs: Multi-tenancy (sandboxing containers)
- Kubernetes Blog: 10 years of Kubernetes (Jun 2024)