An easy-to-understand analysis of the pros and cons of the container orchestrator Kubernetes.
The container orchestration software Kubernetes (“k8s”) is one of the top open-source projects of all times and its adoption has continuously grown in recent years. After working in a company that has been building and scaling software with Kubernetes since 2015, I have seen our engineers go though all phases of the Kubernetes adoption cycle, from unbroken enthusiasm about the possibilities this technology offers to sleepless nights resolving issues with our clusters and deployments. If you are at the beginning of this journey or just considering to adopt Kubernetes for your cloud infrastructure, this post will hopefully help you evaluate some of Kubernetes’ major advantages and disadvantages.
Advantages of Kubernetes
1. Using Kubernetes and its huge ecosystem can improve your productivity
If Kubernetes is properly implemented into your engineering workflows, it can lead to great productivity gains. Especially the huge Kubernetes ecosystem, which can best be shown with the CNCF Landscape, helps to use Kubernetes more easily and efficiently reducing the negative impact of its general complexity. By relying on some existing tools specifically made for cloud-native software, you can get solutions that you could hardly ever build yourself.
As an example: Our company recently added the open-source development tool DevSpace to CNCF which lets you set up and standardize the deployment and testing workflow for every developer on your team. Other tools such as Drone let you quickly create CI/CD pipelines for Kubernetes and tools like Prometheus make monitoring easier than ever. This plethora of tools available in the ecosystem shortens release cycles drastically, professionalizes engineering workflows and eventually improves the software quality from development to production. Of course, this huge selection of technologies also helps you to customize everything exactly to your needs. As an additional bonus, most of the tools in the k8s ecosystem are open-source and thus free to use.
2. Kubernetes and a cloud-native tech stack attracts talent
Many software engineers want to work in companies that use modern and interesting technologies. Kubernetes is definitively one of them being ranked as the 3rd most wanted platforms in the Stack Overflow Developer Survey 2019. Combined with an efficient workflow with other cloud-native tools, your technology stack and processes will be very attractive for potential applicants. Also for your current workforce, it can be very motivating to work with something new, which improves the general satisfaction in your dev teams and can even reduce employee turnover in the long run. This advantage of Kubernetes is often overlooked, but given the shortage of tech talent, it can be a material benefit for your organization.
3. Kubernetes is a future proof solution
If you decide to use Kubernetes, you can be pretty sure that this solution is feasible for many years for several reasons:
- All major cloud vendors are supporting Kubernetes providing out-of-the-box solutions for it.
- Alternative container orchestration solutions are far behind k8s in terms of adoption, support by cloud vendors and their ecosystems. Even companies previously focused on competing technologies are now endorsing Kubernetes: Docker is offering Docker Kubernetes Service instead of just Docker Swarm solutions and Mesosphere changed its name to D2IQ to be more open for Kubernetes and not purely focused on Apache Mesos.
- And of course: The Kubernetes ecosystem is growing incredibly fast and new products supporting different needs on top of the Kubernetes platform are being released every day.
Kubernetes is also future proof from an individual perspective: If you expect your user base to grow even to a huge audience, you can be sure that Kubernetes can handle it because it is designed to support large, distributed systems and it was originally developed by Google engineers and backed by their experience in building scalable platforms like Borg. The same goes if your application itself grows and becomes more complex. Here, microservice architectures often come into play and for these, Kubernetes is clearly the technology of choice as of today. And finally, if you want to switch your cloud vendor for some reason, e.g. moving from Amazon Web Services (AWS) to Microsoft Azure, you can easily find a very similar Kubernetes service from a different provider and Kubernetes itself makes such a switch relatively seamless preventing you from vendor lock-in.
4. Kubernetes helps to make your application run more stable
If you need to be sure that your application is up and running very reliably, Kubernetes can support you in this. For example, it allows you to have rolling updates to change your software without downtime. It is further possible to set up Kubernetes in a way that it supports high availability applications and if you are using the public cloud services of major vendors, you can be pretty sure to reach a very high uptime. (However, this is of course also possible with other technologies and infrastructures but often involves considerably more effort.)
5. Kubernetes can be cheaper than its alternatives
Another advantage of k8s is that it can sometimes be cheaper than other solutions (depending on your application). Since the platform itself has some general computing needs, it is usually more expensive for very small applications. However, the larger your computing resource needs, the less important are these basic infrastructure needs for the overall cost calculation. In such cases, other factors become more important. For example, Kubernetes is able to auto-scale depending on the needs of your application and the incoming traffic and load processed by your applications. That means, that Kubernetes can scale up your applications and its required resources during peak times but also scale down your infrastructure during less busy times of the year, week or even hours of the day. That means you pay less if there is not much going on. Overall, this leads to high utilization and prevents you from paying for resources that you do not need.
Overall, Kubernetes can thus be cheaper in some cases and more expensive in others and there is always potential to reduce the cost of running it. For this, you need to evaluate it for your specific application and compare the different providers for your needs (however, for the choice of your cloud provider, more factors than just cost will usually play a role).
While all these advantages sound pretty attractive, not every company is using Kubernetes and a decision against Kubernetes may be the result of an evaluation of its drawbacks. So let's take a look at some of the main disadvantages of Kubernetes for businesses next.
Subscribe to get an email about new articles if you are interested in reading my next post.
Drawbacks of Kubernetes
1. Kubernetes can be an overkill for simple applications
Kubernetes is a complex but powerful technology that allows you to run software in a cloud environment at a massive scale pretty efficiently. However, if you do not intend to develop anything complex for a large or distributed audience (so, you are not building a worldwide online shop with thousands of customers for example) or with high computing resource needs (e.g. machine learning applications), there is not much benefit for you from the technical power of k8s. Let’s say you just want to develop a website showing the opening hours and location of your business. Then you should not use Kubernetes because this is not what it was made for. However, one cannot generally say that every machine learning software should run with Kubernetes and no simple website should. It is just way more likely that it will be beneficial in the first case than in the other one.
2. Kubernetes is very complex and can reduce productivity
Kubernetes is infamously known for its complexity. Especially for developers not familiar with infrastructure technologies, it can be very hard to work with. However, if you want to practice the DevOps approach, developers need to get access to and deploy to Kubernetes as early as possible during the development lifecycle, so they can test their code quickly and early on to prevent costly mistakes later on in production. Even though there is a clear tendency to make Kubernetes easier and more accessible (DevSpace is, for example, striving to be the easiest and fastest Kubernetes tool for developers), it is still advisable to have at least one Kubernetes expert with a very deep understanding of k8s on every engineering team. Someone with this skill can either be hired, which is still relatively expensive - the average salary in the US for people with k8s skills is more than $140,000, or be trained, which will take a while.
In any case, your development team will have to adapt some of its processes to become truly cloud-native. At least in the short term, this may result in reduced productivity and longer release cycles. (However, k8s can also boost your productivity in the long run, if done right)
3. The transition to Kubernetes can be cumbersome
Since most companies cannot start on a green field, your existing software needs to be adapted to run smoothly with Kubernetes or at least alongside newly built application that will run on Kubernetes. It is hard to estimate how much effort this requires as this depends heavily on the software (e.g. is it already containerized, which programming language is used,...). Additionally, some processes need to be adapted to the new environment, especially deployment processes. Even with experienced staff on site, the adoption of Kubernetes might still be a challenge and requires quite some effort and time.
4. Kubernetes can be more expensive than its alternatives
I have already described that Kubernetes can be cheaper than using alternative technologies. However, it can also be more expensive. This is because all of the previously mentioned disadvantages cost time of your engineers that is not spent on creating new “tangible” business value.
If your engineers are spending their time getting an existing, running application to run in Kubernetes, their goal is to reach the status quo with a different technology.
And if they reach this goal, the users of this application will not immediately see any benefits of this migration (however, there might be some subtle advantages, such as improved stability). Since engineering time is a highly valuable resource, this should be considered for your decision to adopt Kubernetes.
Besides this indirect cost, sometimes the infrastructure cost of running Kubernetes is simply higher than for alternative infrastructures, especially for small applications as Kubernetes itself has some computing needs. Again, taking the simplified example of a plain website, it might just be cheaper to choose a much simpler infrastructure, such as a single VM or hosting platforms such as Heroku or Netlify.
There is no easy answer if adopting Kubernetes is the right choice for you or not. It depends on your specific needs and priorities and many technical reasons were not even mentioned here. If you are starting with a new project, if you work in a startup that intends to scale and wants to develop more than just a quick MVP or if you need to upgrade a legacy application, Kubernetes might be a good choice giving you a lot of flexibility, power and scalability. However, it always requires an investment of time because new skills have to be acquired and new workflows have to be established in your dev team.
If done right, however, investing the time to learn and adopt Kubernetes will often pay off in the future due to better service quality, a higher productivity level and a more motivated workforce.
In any case, you should make an informed decision and there are many good reasons to go for Kubernetes or leave it. I hope this post will help you in getting closer to making the right decision for you.