TNS
VOXPOP
As a JavaScript developer, what non-React tools do you use most often?
✓
Angular
0%
✓
Astro
0%
✓
Svelte
0%
✓
Vue.js
0%
✓
Other
0%
✓
I only use React
0%
✓
I don't use JavaScript
0%
NEW! Try Stackie AI
Kubernetes / Operations

Understanding the Kubernetes Operator Pattern

Operators empower a 'configure it and forget it' paradigm. Once you declare your app’s desired state, the operator takes care of the rest continuously.
May 14th, 2025 9:30am by
Featued image for: Understanding the Kubernetes Operator Pattern
Image from Growtika on Unsplash.

Kubernetes is a powerful tool for deploying, managing and scaling software, enabling organizations to ingest, store and analyze log data at petabyte scale. Behind the scenes, enterprises can use the Kubernetes operator pattern to extend Kubernetes and make it easier to automate and build consistency into their Kubernetes infrastructure.

This post will provide a high-level view of Kubernetes operators, including:

  • What is a Kubernetes operator?
  • The current state of Kubernetes operators in the field.
  • Why we use the Kubernetes operator pattern.

If you’re early in your journey when it comes to learning about Kubernetes, hopefully this will give you a better understanding of the operator pattern. And even if you’re a Kubernetes expert, gaining insights on why and how we use the operator pattern might be helpful for Kubernetes application planning and development.

If you’re interested in reading more about the architecture of how we built our custom operator, how we used the operator to tackle complex problems and how the operator affects just about every aspect of the Kubernetes life cycle in Hydrolix, check out “Smooth Operator: How Hydrolix Uses the Kubernetes Operator.”

What Is a Kubernetes Operator?

In simple terms, an operator is a piece of software that extends Kubernetes capabilities to manage a specific application automatically. In other words, tasks that site reliability engineering or DevOps engineers might normally do by hand — like deploying an app, configuring it, monitoring its health or upgrading it — are built into an operator program that runs inside the Kubernetes cluster. This operator continuously watches over the app and makes adjustments in real time, acting as an autonomous sysadmin that never sleeps​.

Here’s how it works in practice: Kubernetes has an API-centric view of the world; everything is a resource that can be created or updated via the API. Operators take advantage of this by introducing new resource types called custom resource definitions (CRDs) that represent the desired state of an application. For example, we use the Kubernetes operator pattern to add a CRD for a Kubernetes cluster. You, the user, can submit a single YAML cluster config file that describes your ideal setup, such as specifying how many of each component should be deployed, what configuration to use and so on​.

The operator, running in the cluster, will then work on reconciling reality to match that spec​. It might create deployments for various services, set up ConfigMaps with the config you provided, ensure the right number of pods are running and so on. If it finds the cluster drifting from the spec (say a pod died or someone tweaked a setting manually), it will course-correct to bring the state back in line. This check-and-fix cycle is known as the reconcile loop​.

It’s helpful to compare operators with something like Helm charts, a common way to deploy apps on Kubernetes using templates. A Helm chart is basically a static blueprint: You install it and it creates the resources, but after that, Kubernetes default controllers take over and Helm is out of the picture. If you want to change something, you tweak values and run a Helm upgrade, but Helm itself isn’t actively watching your app.

In contrast, an operator is a live controller inside the cluster: It’s always running, continuously making sure the app is configured as intended​. Operators can also handle complex logic that Helm can’t. For instance, an operator can orchestrate ordered rollouts, making sure database pods start before app pods.

The Current State of Kubernetes Operators in the Field

Kubernetes operators have become a standard approach for running complex applications on Kubernetes. Today, you’ll find operators for all sorts of systems: databases like PostgreSQL, big data tools like Kafka or Spark, and monitoring systems like Prometheus. The appeal is clear: As Kubernetes adoption grew, so did the need to automate Day 2 operations — not just initial deployments, but scaling, healing, updating and integrating apps.

Companies are migrating from static deployment methods to operators at scale. Operators have proven they can handle enterprise scale; they watch over clusters with thousands of nodes, making decisions in seconds or less. Crucially, they empower a “configure it and forget it” paradigm. Once you declare your app’s desired state, the operator takes care of the rest continuously​. This is increasingly important as systems grow too complex for manual tuning in production.

Our custom Kubernetes operator is very much aligned with these modern practices. We built it to be cloud native and robust, using the same Kubernetes patterns that power other successful operators. And it’s evolving too: We continually improve the operator to add more automation and intelligence (for example, upcoming autoscaling features). In the Kubernetes ecosystem of 2025, operators are no longer a niche idea; they’re a proven tool for reliability.

Why We Use the Operator Pattern

Our deployments could have been just a bunch of Helm charts or scripts, but we chose to build our own Kubernetes operator for a number of reasons. At the core, it comes down to automation, resilience and simplicity in managing a complex distributed system. Hydrolix isn’t a single service; it’s a suite of over 30 microservices (such as ingestion, query and merge) plus databases and third-party components. Orchestrating all of that by hand would be error-prone and tough to scale. The Kubernetes operator lets us encode all the best practices and dependencies of the platform into a single controller that takes care of deployment and day-to-day adjustments automatically​.

Automation

The operator pattern allows us to drastically simplify installation and configuration of clusters. Instead of manually deploying each component, it’s only necessary to provide one spec for a cluster and then the operator launches everything​.

To change a setting or scale out part of the cluster, a user just needs to update the custom resource, and the operator applies the changes. This automation extends to things like ensuring the proper order of operations. As an example, if our ingest service depends on a message broker, the operator can make sure the broker is up first. If certain components only run at cluster initialization (like a DB initialization job), the operator handles kicking those off and then cleaning them up once done.

Resilience

In a distributed system at the scale we work at, things will fail. Pods will crash or nodes might go down. Kubernetes by itself restarts pods, but the “using the operator” pattern provides an extra layer of resilience by monitoring the holistic state of a deployment. If anything deviates from the desired state, the operator notices and acts.

For instance, suppose someone accidentally deleted an ingest pod or changed a config on a running deployment. The operator will see that the actual state no longer matches the spec and will recreate the pod or revert the config to maintain consistency.

In fact, by default, the operator will overwrite manual changes to managed resources during its next reconcile loop to prevent drift. It also has an ignore-diff flag you can set on a resource if you intentionally want to opt out of operator control​. The result is a system that self-heals and stays true to the intended configuration, ensuring that the cluster remains in a good state.

Simplicity

Perhaps the biggest win is how much simpler the user experience becomes. We can generate both an operator config and a cluster config, apply them and voila: We have a running cluster​. All the heavy lifting — creating services, setting correct inter-component settings, watching for failures — is abstracted away by the operator. This means users can focus on high-level needs such as “I need a cluster with X GB memory for queries and Y ingest nodes.” There’s no need to worry about the low-level Kubernetes objects to make that happen.

In short, the operator transforms the process of deploying a cluster from a complicated checklist into a one-stop, declarative operation. By using an operator, even non-Kubernetes experts can deploy and run our platform, whether that’s members of the customer success team, customers or other stakeholders.

Group Created with Sketch.
TNS DAILY NEWSLETTER Receive a free roundup of the most recent TNS articles in your inbox each day.