Engineer Discussions - Rhys Powell

Kubernetes, the next big thing?

Everywhere you look kubernetes is being hailed as the next great thing in the DevOps arsenal. So many jobs are now asking for people with experience in running it but, at many meetups, a quick show of hands gives the idea that many people are “playing” not many companies have committed to running it in production. As managed services move from just google out into the other major and minor cloud suppliers, Azure with their AKS in preview and Amazons EKS due GA any time soon are we likely to see more companies move to using it? Will the uptake be much greater now there is less management.

So what is kubernetes?

From the kubernetes website

‘’’Kubernetes is a portable, extensible open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available.’’’

OK……

What is it really?

Kubernetes was delivered out of Google from their years spent building their Borg platform. As most can imagine, Google have to run an awful lot of servers and services, Borg is years of work in efficiently managing these services and systems at the scale and availability they required. For more information check out here.

At its most basic it allows you to run containers like docker and rkt or any other OCI compatible container. Not just stand them in a

Docker run nginx

idea of run containers but to deploy multi-container apps in one, scale up the containers as required, provide networking, service discovery and storage, roll out a new version of an app without downtime... and all of this can be done in your own DC, out in the public cloud, even on your laptop should you wish to play with it. None of the underlying low level components are replaced by a kubernetes deployment it is just used to manage these things, via an api, while staying out of the way. The whole management system can get taken down, and while that affects your ability to add, remove or scale the running applications, the apps themselves will still function as expected.

Why would I want to run Kubernetes?

Its open source and has a lot of big companies backing it and it has a lot of momentum, Docker even includes it in their desktop versions and the juggernaut that is AWS are to release their managed version (EKS) and it will be vanilla kubernetes, not something aws often do. A sign that it’s destined for big things and greater usage in many places.

It can make deploying complex apps and service discovery far easier.

You have to worry less about how to manage and scale your apps.

Multiplatform. Your client wants to run it in Google, you develop in AWS, no longer an issue.

With the above point, a true from developer machine to production pipeline is possible.

Microservice architecture, no problems, Kubernetes can certainly help manage that complexity.

Why wouldn’t I want to run it?

Its complex, really complex to run. Even if you move to a managed service there are still a fair few hurdles to overcome (at the moment)

It feels like it’s not really ready for production. While there is a clear road map and things such as user access management, easy persistent storage are there or on their way, some of these types of things that many would consider minimal for enterprise are in alpha, beta or only just rolled out as GA

You only run one or two containers, things like swarm, ECS and fargate might be a better option as they are less complex.

You have a monolithic stack, containers as a whole might not be right, you would need to do some investigations for that first.

You don’t move fast. The support cycle for releases is three version, with a release cycle of a new version every three months, so yes 9 months before your version drops from support!

Roundup

Is it the next big thing? I think we have passed that point and it’s certainly here to stay for a long time, many longer term container builders and PaaS providers are now committing to it, AWS with their managed service, Rancher moving away from their own system to being a K8s builder, as two big examples. It certainly looks like the world has decided that it’s the right tool for most people. Is it right for you and your company is a very different thing. The ability to work with containers and the immutability they provide, is a wonderful thing, what DevOps culture has driven to provide is even more accessible now, really removing much of the worries about platforms and versions from developers and allowing them to deliver laptop to production code with ease. Great if you are microservices and have that architectural understand but getting to that point is a mission of its own. The other side is the complexity. As mentioned the managed platforms will hide that from you, no need to understand or care how the masters work, great if you are already running somewhere that provides the service or it makes no difference where you run your platform but for those with constraints, building and managing kubernetes is a complex thing that will demand a good chunk of time from your Ops team, it’s very much the deeper you dig the more you realise you don’t understand.

Look at your current situation, decide if it’s right for you now, if you have the time to commit, if you don’t, certainly keep an eye how it progresses as it will only get easier to use.