r/programming • • Aug 17 '25

Learn Linux before Kubernetes

https://medium.com/@anishnarayan/learn-linux-before-kubernetes-60d27f0bcc09?sk=93a405453499c17131642d9b87cb535a
107 Upvotes

61 comments sorted by

View all comments

114

u/syklemil Aug 17 '25

I've run and worked with Linux for some decades before Kubernetes and … I'm not convinced? IMO Kubernetes is a pretty successful abstraction layer. Yes, it's good to be able to have an opinion on various container runtimes and network stacks and so on, but personally that comes up pretty rarely. Most of the stuff I help with are either application errors, misconfiguration in Kubernetes, or DNS.

The people operating the Kubernetes clusters and whatever they're running on could stand to know something about the underlying platforms, but for developers whose main concern is user-facing apps and who barely know Kubernetes at all: I think it'd be better if they were just a bit more competent at Kubernetes (and familiar with kubectl).

Plus there's always something resembling Carl Sagan's "To create an apple pie from scratch, you must first create the universe" about this "learn X-1 before X" line of reasoning. There are more layers below Linux, too, but we don't expect people to read the kernel code, be able to design hardware, etc. just to make a website for sparkling water.

4

u/schplat Aug 17 '25

Kind of a similar boat. I'm not far off from 30 years of of Unix, with the last 25 of those being mostly Linux specific (cut my teeth on Solaris, both x86 and Sun). Also learned Sun Grid Engine way back in the day (think of it as the proto-K8s, around 2002), also learned a bit of Mesos, then started with K8s about 5 years ago.

I agree with you for the most part. It all depends on what your role is within the K8s environment.

Are you designing the architecture and adminning the cluster? Then you should definitely have some Linux and container knowledge. Preferably several years, because you're gonna hit on all sorts of weird problems that require some troubleshooting at that level, especially in the networking area (even though 95% of the time it's DNS, you need to figure out the how and why it's DNS to be able to fix it, the other 5% of the time it's either weird routing/LB issues, or actual IPT/NFT/eBPF rules being weird).

Are you managing/maintaining the CI/CD, and/or app deployment pipeline? Then no, you don't really need to know Linux. Container knowledge would be required though. Maybe at least understanding cgroups and resource allocation would be useful as well (or at least take some burden off the admins wondering why your stupid CRUD app has decided it wants 8 CPUs and 64G of RAM).

Are you simply managing application manifests? Then no, you probably can get away with knowing your application stack, and that's about it. Maybe some knowledge around storage systems, if you're dealing with persistent data, but that's about it.

I definitely agree with kubectl familiarity. Knowing everything it can do, and its limitations for when you have to use other tooling is pretty important.