Hacker News new | ask | show | jobs
by movedx 2326 days ago
Tell me about it. It's laziness if you ask me (not that anyone is, and that might be a good thing.)

I would have rather we (as an industry) focused on the developing better languages and frameworks to write our software with. Look at Go for example...

With Go I can create a single binary, produce a DEB or RPM and deploy it using Ansible. If I need to update the software I make a change and push it through the CI/CD stack, resulting in another binary, then another DEB/RPM, then an updated set of servers. I then restart a service... so hard /s

If I need to run micro services, then, you know, just run them? They're all statically linked, singular binaries on disk. If I need to run 500 of them, then I just run them. Each gets whatever port it can find and registers its self with (something like) Consul and just like that, I'm DNS query or an API call away from knowing what services I have, where they are and what port to talk to them on.

I believe we should be focusing on making those processes better, not just adding more complex layers on top of simple solutions.

I know K8s has its benefits, but I believe the same benefits can be realised easily enough without the complexities that K8s brings. Obviously I can't outline them here in a comment on HN, but I am working on providing a POC in the near future.

EDIT: and to those down voting me: that's also lazy. Cognitive laziness. Prove me wrong. Also, I don't care about Internet Points, I care about the truth and finding what's true. I wish you the best of luck though.

3 comments

> With Go I can create a single binary, produce a DEB or RPM and deploy it using Ansible. If I need to update the software I make a change and push it through the CI/CD stack, resulting in another binary, then another DEB/RPM, then an updated set of servers. I then restart a service... so hard /s

What's so hard about sticking the binary in a container? That way you don't need to worry about installing it or generating debs/rpms, everything it needs is in the image.

> If I need to run micro services, then, you know, just run them? They're all statically linked, singular binaries on disk. If I need to run 500 of them, then I just run them. Each gets whatever port it can find and registers its self with (something like) Consul and just like that, I'm DNS query or an API call away from knowing what services I have, where they are and what port to talk to them on.

So finding a free port and registering itself with Consul would need to be built into every service you run. Just run them in containers and let k8s handle the service discovery.

I see what you are saying, but k8s really makes the pattern you are describing easier. It also standardizes it so every company is not managing home-grown ansible and consul mash-ups.

If you don't need Kubernetes, don't use it.

Kubernetes runs more than tiny, statically linked Go apps. It also doesn't just run apps. It can schedule a wide variety of workloads in a cluster, managed their persistent storage, apply disruption policies, autoscale pods based on load or custom metrics, it can set up load balancing, it can run batch jobs, it can run time-scheduled jobs, it can control network traffic, it handles DNS lookups... the list goes on.

Kubernetes isn't particularly complex, but what complexity it does have can be explained. Any attempt to provide the same functionality will ultimately reinvent Kubernetes.

“Kubernetes is too complex” // proceeds to macgyver half of kubernetes in her own opinionated way...
> proceeds to macgyver half of kubernetes in her own opinionated way...

What, by suggesting we run a process on its own instead of wrapping it something that isn't required?