Kubernetes: What is it, and why do I care?
So you’re a Java/C++/web developer and you’ve heard about all of these “cloud native” technologies, and containers, and you’re wondering “excuse me, what is a Kubernetes please, and why do I care?”
…or maybe you’re a general technologist – idly curious enough to wonder what all the fuss is about but not super interested in digging into the guts of the thing.
…or maybe you tend to understand technology more big-picture than detail and you wish someone would just tl;dr it for you.
Well…welcome to the first of our Technology TLDR posts! Kubernetes, you’re up.
Officially…
From the Kubernetes website/documentation:
Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.
You may also see it referred to as k8s – because of the 8 letters between the k and the s. Yes, seriously. Go ahead, count the letters. (Laine: I have to do this every time I see “k8s.” I think I’m suspicious that I counted wrong the first 15 times…) We’ll wait.
Translated: Kubernetes is a Platform
Just like the laptop/desktop/phone that you’re looking at, and just like a cluster/group of Java web servers or virtual machines (or a mainframe!), a Kubernetes cluster (a running instance of the Kubernetes product) is a place to run applications – specifically applications bundled within a container.
If you write an application to run in a Docker container (or more recently CRI-O, or several others), you can deploy that container to a Kubernetes cluster, and with the right magic spell (…commands, Kubernetes uses the kubectl command line interface), the application will start up, and run, and scale, and accept traffic, and also connect to stuff.
You can think of Kubernetes (and the technologies used at the same time to make Kubernetes a complete working platform) as a shiny new kind of virtualization. With this virtualization, you don’t have to worry about operating system config and setup, and you also don’t have to worry about allocating the necessary CPU and memory and storage to run the application(s).
Well…Kubernetes is a Really Nice Platform
Like we said, in the process of getting an application running on a Kubernetes cluster, you have to worry about a lot less stuff than other platforms. Just write up a Docker image, deploy it, set up ingress routing (routing into the application, a way to get to it) and TADA you have a fully-working application.
Usually, all of the setup and deployment can be fully automated, and the necessary resources from the cluster to run the application can be handed out on request as the application needs them. Without a platform like this, a VM typically needs to be set up as the alternate place to run the application, with resources specifically allocated ahead of time – unless there’s a mainframe, and that’s a whole different set of complications.
So basically, you write your app and deploy it onto the cluster using service requests to the Kubernetes API (the kubectl commands), and your app is running on the platform in minutes. This is what’s meant by the term Platform as a Service (PaaS) – Kubernetes allows for developers/devops people/choose your own implementation to self-serve the infrastructure (platform) necessary to run the applications.
Kubernetes is the De Facto Cloud Standard
Cloud: a bunch of servers organized and coordinated so you don’t have to worry about which server is running your application, you just get a big pile of computer resources to use.
A few years ago, there were many technologies competing to be the best at wrangling Linux servers into cloud technology. But none of them were as good as Kubernetes, and so open source contributors slowly stopped working on those and switched to contributing to Kubernetes.
At this point, Kubernetes is the leader and standard, and all of the new nerd hotness technology (Istio, Knative, OpenShift [tag]) is being built on Kubernetes. If you know how to deploy to Kubernetes, you can work with just about any major cloud provider, and people keep finding amazing, easier ways to do so.
So if you want to start taking advantage of simpler application builds and deployments with containers, or you want to learn more about the current and future of platforms in IT, Kubernetes is where it’s at.
Affects on a Company
We mentioned that a common alternative platform to run applications on is VM’s. If you’ve never waited for a VM to be set up from an infrastructure/operations group, trust us when we say that it takes a long time. Probably at least a week, and reasonably up to a month depending on the size and agility of the enterprise.
This is just one example of how bringing in PaaS technology like this can have a massive affect on a company. How massive will depend on where the company was before it was brought in – if developers were mostly trusted, things were mostly self-service, and there wasn’t a lot of red tape/check boxes/oversight, the affect will be less – not none, but less. If, however, the company is on the other end of that spectrum, a self-service platform like this will speed up basically everything IT does. This sounds awesome, and it is awesome.
It’s also a shock to the organization, a bit like the tortoise suddenly turning into the hare. It requires ownership, explanation, and support, and it requires modifications to the culture if the organization takes full advantage of the opportunities the technology offers.
TL;DR
Kubernetes is:
- a place (platform) where applications run
- a neat jump forward in virtualization technology
- the de facto standard for cloud-based containerization orchestration