Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

why is explaining why kubernetes is so complex, so complex?

could somebody ELI-RP? (start with a collection of raspeberry pi's sitting on my desk and take it from there)



Kubernetes is very complex because the problem it is solving is far more complex than that. It is actually a simplification of the problem, with a (somewhat) simple solution.

The problem is: datacenter operational system.

That is, in other words: distributed operational system, or global scale software scheduling (because you have an operational system to run software).

Why we need something like that? Because is better (today) to connect millions of small computers rather than building a very big one. But you still need to operate and manage all those small computers.

A distributed operational system is a way to abstract away the fact that you have millions of small computers instead of a big one.

Now, bear in mind that this is a very hard problem, one people have been thinking about and trying solutions for decades.

Kubernetes is a solution to a simplified version of that problem, built while informed by the experience gathered by Google while running their own solution, called Borg.

With Google experience and knowledge gained after 12 (plus) years running Borg, they came to build a very good solution to the problem.

As a user, I believe Kubernetes is the closer we can get (right now) to a user interface where I can just ask to run my software.

Why this is not as simple as a double-click on a icon somewhere? Because software meant to be run in a global scale computer is not simple software (probably complex software composed of several small simple parts). So the usage is tuned for more complex software and thus is more complex.

As a system administrator, Kubernetes is very complex. But a smartphone hardware and software is far, far, far more complex than Kubernetes, it's just that you are not exposed to it.

So, Kubernetes is complex? Yes. You can probably figure out a simpler way to run a container? Yes.

Can you build a simpler solution to global scale software scheduling? Well, you can try.

So you don't need to run a global scale computer, just a tens-of-servers computer (or thousands-of-servers computer)? Maybe Kubernetes is overkill for you, but if you use it, you'll benefit from all the community built around it [1].

1 - Meaning: your own solution to a tens-of-servers computer maybe very good, but will be complex enough that you will have a hard time finding people willing to use it or teaching people how to use it than you would have finding people already familiar with Kubernetes.


I think this is a very good explanation.

I'd add a caveat though. Kubernetes is designed for extremely high reliability at datacenter scale. If you have a suite of applications that run at that kind of scale and require that level of uptime, then kubernetes is an excellent tool for managing that complexity.

If your application doesn't need that scale and reliabilty, kubernetes is probably overkill and adds more complexity than it saves. And frankly, your application probably doesn't need to operate at that scale and it probably doesn't need that level of uptime.

Of course, your mileage may vary. If you can handle kubernetes' upfront complexity, than scaling up is a solved problem.


thanks, lots of good pointers to follow up on, though I suspect there is a load of terminology who's precise meaning is more context dependend. For example the wikipedia distributed operational system [0] entry does not seem to really apply.

Turns out somebody did build (some version of) kubernetes cluster on rasbperry pi [1] so I might get to the bottom of it :-)

[0] https://en.wikipedia.org/wiki/Distributed_operating_system

[1] https://ubuntu.com/tutorials/how-to-kubernetes-cluster-on-ra...


It applies actually. I forgot to explain why Kubernetes solves a simplified version of the problem.

The simplification is that you can build a distributed operational system completely hiding the fact that you have millions of computers. This is, let’s say freacking hard.

But you can build one where this fact is not hidden, just alleviated. This is only super hard. This is what Kubernetes does.

Also you can break those millions of computers in small groups of thousands. This is what Kubernetes is aimed for. But you can still make those groups work together, using external tools, like load balancers and global dns zones and networks.

UPDATE:

a very interesting explanation of the problem and the solution used by Borg and kubernetes is on this lecture. https://youtu.be/0W49z8hVn0k It’s quite insightful and easy to understand actually.


Excellent question. Because it has plenty of unnecessary complexity.


Unnecessary complexity -for your use case-. Not for the set of use cases it's trying to solve. It's hard to view complexity caused by stuff you don't care about as anything but unnecessary.


it may be. can't really tell until somebody maps it to a universe that (I think) I understand...

but I suspect this seeming to be a hype of sorts within certrain tech circles (with associated professional incentives etc) there aren't many around that would have both the in-depth knowledge and the desire to really de-obfuscate and break it down


Because it's taking care of a complex problem with lots of necessary complexity (though how complex it seems depends on whether you learn it bottom up or top down, IMO)


> hype of sorts within certrain tech circles

The downvotes on my comments and the complains are telling.


Telling you that you don't know what you're talking about.


That's what you want to believe.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: