Kubernetes is complex because you want complex things

updated on 12 April 2022

By Natan YellinRobusta.dev co-founder

About once a day someone tells me that Kubernetes is too complex.

“You can deploy shell scripts to an Ubuntu machine,” they say. “Install your dependencies with apt-get.”

“What about scaling”, I ask? “Add another Ubuntu server.”

“And service discovery?” I ask. “Have you heard of DNS?”

Is the critic right? Have we all gone mad and invested time and money in complex alternatives to simple components? Is it just a conspiracy to improve our resumes?


Why no-one uses apt-get on the host anymore

This isn’t about Kubernetes, but why did containers become popular anyway?

Containers make your dependencies explicit and decouple the app’s environment from the machine it runs on.

If you forget a dependency on a library, you’re going to discover that the first time you run the app locally, not when you deploy. Containers make the local environment behave like the servers you deploy to.

So we can forget about installing dependencies on the host. Docker - or at least containers - are here to stay until something superior replaces them.

Complex requirements require complex solutions

You have a Docker container and want to run in the cloud. There really is no need for Kubernetes. You can take a VM, put the Docker daemon on it, and you’re done.

There’s only one problem. The requirements have changed. Your boss doesn’t want a single wordpress instance and ten visitors a second any more. He wants an app that can handle amount of load, is SOC2 compliant, has backups, and can recover if something goes wrong.

In other words, you’re expected to deliver Google-level infrastructure.

You also have requirements. You don’t want to stay up at night watching the graphs and worrying if you need to add a new caching layer or not.

What does Kubernetes provide anyway?

If you spend enough time around haters, you know the following:

Kubernetes is unnecessary because autoscaling is easy, systemd does self-healing, the cloud provider has APIs for persistent volumes, backups should be done with cronjobs, secrets are done with MyFavoriteSecretVault, Consul does configuration management, service discovery is DNS but don’t ask how you update the DNS records, health checks aren’t necessary, and a dude on Reddit wrote a 3000 line Perl script for rolling updates at his last company so clearly Kubernetes is unnecessary.

To these people, I can only say good luck.

Also, you’ve re-invented Kubernetes.

Reducing cloud complexity

Docker doesn’t get enough credit.

I deployed my first LAMP stack at age fourteen. The process went something like this:

  1. Google “How do I install Apache on Ubuntu”.
  2. Follow step one of the 10-step guide
  3. Follow step two of the 10-step guide
  4. And so on

Nowadays, you run one Docker command and the machines do it all.

So deploying applications is easy. Troubleshooting them is another story.

Ironically, by making it so easy to deploy software at scale, we’ve made the maintenance harder. You can deploy software stacks and databases that you have no experience with. It’s almost too easy. You don’t pay the price, but the poor developer who comes after you and needs to maintain it does.


We’re trying to change all that with Robusta.dev.

Automating troubleshooting the way we automate deployments

Robusta is a troubleshooting platform for Kubernetes with built-in knowledge about common errors, like OOMKills, crashing pods, and more. 

We're adding to Robusta knowledge about specific applications and databases. Our goal is to write troubleshooting workflows for every popular Docker container in existence. 

The core of Robusta is an automations engine  (think Zapier/IFTTT but in YAML) that automatically collects data when errors and alerts fire. For example, if a pod was CPU throttled then we collect system data, analyze it, and tell you why the throttling occured and how to prevent it in the future.

Of course automations can't cover everything, so Robusta includes manual troubleshooting tools too. You can use Robusta to run CPU profilers, hunt memory leaks, and attach debuggers to your pods without restarting your applications or setting anything up in advance.

Robusta is open source (MIT licensed) and has integrations with Slack, Microsoft Teams, Prometheus, Alert Manager, DataDog, and more.

If we succeed at our goal, you’ll still have to learn Kubernetes, but everything that comes afterwards will be simple and boring.

Star us on GitHub or get started by learning more about Robusta.

According to Twitter, it takes 60 seconds to install Robusta. 

Still reading? Just do the 60 second install. You can send over your existing Prometheus alerts and see value right away.

Read more