Operators and Kubernetes in Production

Kubernetes's deepest idea isn't its built-in objects — it's that the reconciliation model is extensible. You can teach Kubernetes new concepts and automate operating them, which is what operators do. This closing post covers that extension model, the realities of running Kubernetes in production, and the honest verdict on when its power is worth its complexity.

The series built Kubernetes from the reconciliation core up through pods, controllers, networking, config/state, and scheduling. This final post covers two things: the extension model (Custom Resources and operators — how Kubernetes grows beyond its built-in objects) and the production realities of running it. It closes with the honest fit question the series opened with. Understanding that Kubernetes is extensible — and what operating it actually demands — completes the picture.

The extension model: Custom Resources

Kubernetes’s built-in objects (pods, deployments, services…) are not a fixed set — the API is extensible. Custom Resource Definitions (CRDs) let you add your own object types to Kubernetes, which the API server then treats like any built-in resource:

But a CRD alone is just data — declaring kind: Database doesn’t create a database. Something must reconcile it. That something is a controller for your custom resource — which combined with the CRD is an operator.

Operators: automating operations

An operator is a custom controller that reconciles a custom resource — encoding operational knowledge about running a specific application into software. It’s the reconciliation model (post four) applied to your concept, automating the work a human operator would otherwise do:

CRD:       defines "kind: Database" (the new desired-state vocabulary)
Operator:  a controller that watches Database resources and reconciles them —
           provisions the DB, configures replication, takes backups, handles failover,
           does upgrades — the operational tasks a human DBA would do, automated

The operator pattern is Kubernetes’s deepest idea realized: because the platform is reconciliation over declarative resources, and that’s extensible, you can teach Kubernetes to manage anything by defining a resource and writing a controller. Kubernetes becomes not just a container orchestrator but a platform for building control planes — which is why so much cloud-native software is built as operators. Understanding CRDs + operators is understanding that Kubernetes is extensible all the way down: its own built-in controllers and third-party operators are the same pattern.

Kubernetes in production: the realities

Running Kubernetes in production is more than deploying pods; several realities matter (many connecting to earlier series):

This is why managed Kubernetes (GKE, EKS, AKS) is the common choice: the cloud provider operates the control plane, handles upgrades, and provides integrations, so you focus on your workloads rather than running the Kubernetes machinery yourself. Self-hosting Kubernetes means taking on all of the above; managed offerings remove much of it. For most teams, managed Kubernetes is the right call — you get the orchestration without operating the orchestrator.

The honest verdict: when Kubernetes is worth it

Closing the fit question from the first post, honestly:

The balanced framing: Kubernetes solves a real, hard problem with a powerful, extensible model, and it’s the standard for cloud-native at scale — but that power is complexity to take on deliberately, ideally managed and platform-abstracted, only when your scale warrants it.

The series in one arc

Kubernetes, end to end: it exists to solve containers at scale, via declarative desired state plus continuous reconciliation (post one) — the core idea everything instantiates. It orchestrates containers (isolated, constrained processes, not VMs — post two), wrapped in pods (co-located, ephemeral units — post three), managed by controllers running reconciliation loops (Deployments, StatefulSets, etc. — post four), reached via Services and Ingress (stable networking over ephemeral pods — post five), configured and made stateful with ConfigMaps/Secrets and PersistentVolumes/StatefulSets (post six), placed and bounded by the scheduler and resource requests/limits (post seven), and extended via CRDs and operators while operated with real production discipline (this post). The unifying thread is the reconciliation model — declare desired state, and controllers make and keep it real — which, being extensible, turns Kubernetes into a platform for building control planes. Learn it as instances of that one idea, use it (ideally managed and platform-abstracted) when scale warrants, and it becomes comprehensible rather than mysterious.

Key takeaways

Further reading

Sources & References