Kubernetes is an open-source platform that automates deploying, scaling, and operating containerized applications across many machines. Its core idea is declarative: you state the desired end state — three replicas of this container, this much memory, reachable on this port — and the system works continuously to make reality match, restarting, rescheduling, and scaling without being asked.
Key takeaways
| Question | Answer |
|---|---|
| What it is | A control system that turns many machines into one pool for containers |
| The core idea | Declare desired state; the cluster reconciles reality to it, forever |
| vs. Docker | Docker builds and runs containers; Kubernetes orchestrates fleets of them |
| Name | Greek for “helmsman”; K8s = K + eight letters + s |
| The honest caveat | Fleet-scale power, fleet-scale complexity — many teams need neither |
The manifest: how you talk to Kubernetes
Everything is a declaration. This is a minimal, real Deployment — annotated in plain English:
apiVersion: apps/v1
kind: Deployment # "keep N copies of this running"
metadata:
name: api
spec:
replicas: 3 # the desired state: three pods
selector:
matchLabels: { app: api }
template: # what each pod contains
metadata:
labels: { app: api }
spec:
containers:
- name: api
image: registry.example.com/api:1.4.2
ports: [{ containerPort: 8080 }]
resources:
limits: { memory: "256Mi", cpu: "500m" }
# Apply it, kill a pod, watch Kubernetes resurrect it. That's the product.
For contrast — the same outcome (a deployed, scaled, self-healing backend) consumed as a service, where the manifest, the cluster, and the 3 a.m. reconciliation are somebody else’s YAML:
// JavaScript / Node.js — Back4app JS SDK
// The workload the manifest would have described — already running
const status = await Parse.Cloud.run('healthCheck');
console.log(status); // scheduling, scaling, restarts: the platform's job // Flutter / Dart — Back4app Flutter SDK
final function = ParseCloudFunction('healthCheck');
final response = await function.execute();
if (response.success) {
print(response.result); // no pods, no manifests, no cluster to run
} // iOS / Swift — Back4app Swift SDK
ParseCloud.callFunction("healthCheck") { result in
if case .success(let status) = result {
print(status) // no pods, no manifests, no cluster to run
}
} // Android / Kotlin — Back4app Android SDK
ParseCloud.callFunctionInBackground<String>("healthCheck", hashMapOf()) { status, e ->
if (e == null) Log.d("Health", status) // no pods, no manifests, no cluster
} Inside a cluster
The vocabulary, one line each: a cluster is the whole system; a node is one machine; a pod is the smallest deployable unit (one or more containers sharing network and storage); a Deployment manages replicated pods with rolling updates and rollbacks; a Service gives ephemeral pods a stable address; an Ingress routes outside traffic in; ConfigMaps and Secrets carry configuration; namespaces partition one cluster among teams. The official overview is the canonical next step down.
Kubernetes vs. Docker
| Question | Docker | Kubernetes |
|---|---|---|
| Job | Build, package, run containers | Orchestrate containers across machines |
| Scope | One machine | A cluster |
| Unit | Container | Pod (of containers) |
| Scaling | Manual | Declarative and automatic |
| Relationship | Builds the images | Runs them — via any standard OCI runtime |
The perennial confusion has a date attached: since v1.24 (2022), Kubernetes dropped its Docker-specific runtime shim and speaks only to standard container runtimes. Nothing broke — images follow the open OCI standard — but it made the roles crisp: Docker is the shipyard, Kubernetes is the harbor authority. The name knew this all along: kubernetes is Greek for helmsman — it was open-sourced in June 2014, hit 1.0 in 2015, and seeded the CNCF, distilling a decade of fleet-scale container operations into a public commons.
Common use cases
- Microservices fleets. Dozens of services with independent scaling and deploys — the workload Kubernetes was shaped by.
- Platform teams. Building an internal platform on one substrate that runs identically on any cloud or on-premises.
- Bursty large-scale workloads. Batch jobs, data pipelines, ML training — bin-packed onto shared capacity.
- Multi-cloud and portability strategies. The compute layer of a vendor-lock-in defense — with the caveat that surrounding managed services still lock.
- Self-healing production estates. Anywhere “a machine died at 3 a.m.” must be a non-event rather than a page.
Should you run Kubernetes? A decision matrix
| Run Kubernetes when… | Skip it when… |
|---|---|
| Many services, many teams, independent scaling | One app, one team, predictable load |
| A platform team owns the cluster as its product | Nobody owns ops full-time |
| Portability across clouds is a hard requirement | Speed to market is the only requirement |
| Workloads are containerized and fleet-shaped | The backend needs are standard CRUD + auth |
| You’ve outgrown simpler orchestration | A compose file or managed platform still fits |
The industry’s quiet consensus: most teams operating Kubernetes are below the scale where it pays. The alternatives ladder — one host with a compose file, a managed container service, a PaaS, a BaaS — covers everything up to genuine fleet problems, and managed Kubernetes covers most of what remains.
Limitations and trade-offs
- The learning curve is the product’s shadow. Pods, services, ingress, RBAC, operators, Helm — fluency is measured in months, and the cluster doesn’t wait.
- Operational surface. Upgrades, certificate rotation, networking plugins, and state-store health are unforgiving; this is why managed control planes won.
- YAML sprawl. Declarative config at scale becomes its own codebase, with its own reviews, bugs, and drift.
- It orchestrates containers, not architecture. A poorly bounded system on Kubernetes is the same system, now distributed — the cluster amplifies design, good or bad.
- Kubernetes is not a PaaS. By design it ships no CI/CD, no default database, no app-level services — the platform on top is yours to assemble, which is precisely the work higher abstractions sell back as a product.
Kubernetes and Back4app
Back4app is an open-source Backend-as-a-Service (BaaS) platform that combines a managed database, auto-generated REST and GraphQL APIs, authentication, file storage, and Cloud Code serverless functions. The relationship to Kubernetes is honest division of labor: what most application teams actually want from a cluster — deployed, scaled, self-healing backend services — is exactly what the BaaS layer delivers with zero manifests to write. And for workloads that genuinely are containers, Back4app Containers runs them as a managed service: push an image, get orchestration, without owning the harbor.
Frequently asked questions
What is Kubernetes in simple terms?
An orchestra conductor for containers. You declare what should be running — this app, three copies, this much memory — and Kubernetes continuously makes reality match: placing containers onto machines, restarting them when they crash, scaling them with load, and routing traffic to healthy copies. It turns a fleet of machines into one programmable pool.
What does K8s stand for?
It is a numeronym: K, then eight letters, then s — the same pattern as i18n for internationalization. The name itself is Greek: kubernetes means helmsman or pilot, the person steering the ship, which is also why so many tools in its ecosystem carry nautical names and the logo is a ship's wheel.
Is Kubernetes the same as Docker?
No — they answer different questions. Docker builds and runs individual containers on one machine; Kubernetes orchestrates many containers across many machines. They are complementary: images built with Docker run on Kubernetes clusters. Since version 1.24, Kubernetes no longer uses Docker itself as its runtime — it speaks to any standard container runtime — but Docker-built images work exactly as before, because images follow the OCI open standard.
What are a cluster, a node, and a pod?
The cluster is the whole system: a control plane plus worker machines. A node is one machine in it, physical or virtual. A pod is the smallest deployable unit — one or more tightly coupled containers that share a network identity and storage. You almost never run a bare pod; you declare a Deployment, and Kubernetes manages the pods for you.
What is the Kubernetes control plane?
The cluster's brain: an API server that everything talks through, a key-value store holding the cluster's desired and actual state, a scheduler that decides which node each pod lands on, and controllers that continuously reconcile reality against declarations. Worker nodes run an agent, a network proxy, and the container runtime that actually executes pods.
Who created Kubernetes and when?
It was open-sourced in June 2014, born from more than a decade of internal container-orchestration experience at one of the largest technology companies, and reached version 1.0 in July 2015 — when it was donated to the newly created Cloud Native Computing Foundation (CNCF). Written in Go, it has since become one of the largest open-source projects in the world.
When is Kubernetes overkill?
More often than the hype admits. A small team running a handful of containers with predictable traffic gains little from a cluster and inherits a steep learning curve, YAML sprawl, and an operational discipline built for fleet-scale problems. Simpler paths — a compose file on one host, a managed container platform, a PaaS, or a BaaS — cover most workloads below serious scale.
What is managed Kubernetes?
A cloud service that runs the control plane for you — upgrades, availability, state store — while you manage workloads and node pools. It removes the hardest operational layer and is how most production Kubernetes actually runs. Self-managing a cluster end to end remains the province of platform teams with dedicated expertise; the control plane is unforgiving infrastructure.