[Updated in October 2019]
Under pressure to deliver applications faster and ensure 24/7 runtime, organizations are increasingly adopting a cloud native technologies to deliver applications quicker and in an automated fashion. By now, most agree that Kubernetes should be at the core of your stack. But what are your options and what should you be looking for?
While it all started in the cloud — the cloud made automation, self-service and the standardization of testing, deployment, and production possible — cloud native is by no means cloud-bound. Today, everyone seems to want cloud-like services in their own data center, and cloud native technologies make that for the first time possible.
Tools like Kubernetes and Docker deliver a lot (yet by no means all) of the desired functionalities by default.
Docker, for example, is the best way to distribute software in a DevOps-enabled environment. It provides a thin layer of isolation and uses resources more efficiently than virtual machines do. Immutable and independent from the underlying infrastructure, Docker runs the same way on a developer machine as it does in a production environment.
Kubernetes is by now the indisputable container orchestration leader. Why? The answer seems to come down to community building. The Kubernetes open source community is vast and includes Google, Red Hat, Canonical, CoreOS, and Microsoft, to name a few. This has given the open source project the legs it needed to grow and mature faster than any other product on the market. And of course, being open source, it’s independent of corporate planning or constraints.
As the market continues to mature, organizations that adopt cloud native technologies will reap the rewards — transforming their IT operations, augmenting collaboration between ops and development, and increasing the overall agility of the business as a whole (here’s a tip: while it may seem overwhelming, there is no need to go all in at once, you can modernize your application iteratively).
But there are some hurdles along the way.
Kubernetes Challenges and Misconceptions
As much as it is beloved, managing Kubernetes is a time-consuming process requiring highly-skilled staff and a lot of time and effort. Why? Because Kubernetes is not a full-fledged enterprise-grade, ready to use platform. Like most cloud native technologies, it’s only a piece in the puzzle that you mix and match with different other pieces to build a platform that meets your needs. That’s why most enterprises — with the notable exception of software companies who dispose of a large, highly skilled IT team — generally select a vendor-supported enterprise platform.
Yet, many enterprises do still make the critical mistake of underestimating the level of effort involved in the configuration and additional development to adapt Kubernetes to their needs. Like Docker, Kubernetes has many default features that create the impression of ease-of-use. To the untrained eye, Kubernetes looks like it can be up and running in hours or days, but this is far from true for production environments where additional functionality is needed — security, high availability, disaster recovery, backups, and maintenance — everything you need to make Kubernetes “production-ready.”
The result is that organizations that go the Kubernetes route quickly realize that they are unable to deliver it without bringing in skilled and costly external resources.
Some Notable Vendor Differences
The market is evolving fast and you do have multiple choices. New Kubernetes management solutions are continuously appearing, yet they vary wildly. Finding the right tool with the needed flexibility to adapt in an ever-changing IT landscape can be a challenge. At first, the market may seem really crowded, but it isn’t, at least not as much if you break it down by capabilities you need. Here are three examples:
Simplified user interface (UI). Some vendors focus mainly on the UI to ease deployment on any infrastructure. While a pretty UI is nice, it won’t solve the fundamental problem of creating a production-ready environment. You’re still getting the same open-source Kubernetes — a cluster that is ready for your experimentation but isn’t ready to run in production.
Self-healing. Nearly every platform will promise you self-healing. But what most enterprises new to Kubernetes don’t realize, is that there are multiple layers to self-healing. There is self-healing infrastructure, cluster, pods, and Kubernetes. Kubernetes itself ensures only self-healing pods. For reliable applications, you’ll need self-healing on all levels.
Infrastructure provisioning. Kubernetes can’t provision infrastructure by default, so if a node crashes, there is no way for Kubernetes to provision a new one. All Kubernetes can do is re-organize pods within available nodes. Yet, if there isn’t enough available resources, there is nothing it can do. And here’s a little dirty secret, most solutions on the market do not (yet) provision the infrastructure.
Unfortunately, these significant differences are not always clearly stated on vendor websites. It’s left up to you to ask the right questions which, admittedly, can be challenging if you’re just wrapping your head around Kubernetes. Hopefully, this article will help you do that.
Kubernetes Platform Must-Haves
Here are some of the most important things to keep in mind as you shop for the right Kubernetes platform, and some potential pitfalls to look out for.
This is key. Kubernetes configuration can be complex and resource intensive, so you don’t want any of the configuration hassle left up to you. Production-ready means all features enterprises need to run reliable, secure clusters should be fully-automated. But beware, you’ll see lots of production-readiness promises that won’t stand the test. It’s really left up to you, to ask the right questions.
Here’s a quick Kuberentes production-readiness checklist:
- Security. Kubernetes itself has strong security features but look for a provider that can connect these features to your enterprise system.
- Full automation. The solution should handle all management tasks on the cluster. Automated backup, recovery, restore, etc. If it’s not automated, it falls to you to do it, which can quickly strain your resources and budget.
- High-availability, scalability, and self-healing. Remember our note above about self-healing and infrastructure provisioning? While Kubernetes does provide these abilities for your applications, it doesn’t for your cluster. That’s something your platform must take care of.
2. Future-Readiness (beware of opinionated open-source)
Considering the pace of technology change, it would be naive to think that your requirements today won’t change soon. Future readiness is thus a key ability that will allow you to pivot with market demands. Here are a few considerations:
Hybrid and multi-cloud. As the cloud and software become more sophisticated, where you host your apps will increasingly impact system performance. According to 451 Research, more than half of all enterprises have chosen hybrid cloud and multi-cloud as their ideal IT architecture, and about 63% are using two or more clouds.
One of Kubernetes’ key benefits is that it allows you to abstract from cloud or data center providers and build a common infrastructure between clouds, cloud regions, and the data center. Your apps can run anywhere and everywhere without the need to adapt them to a new hosting environment. However, this involves extensive configuration of Kubernetes and its underlying infrastructure which isn’t supported by all vendors. Make sure your Kubernetes platform can support these capabilities and help you configure them when you need them down the road.
Keeping the open source promise. A major benefit of open source is that it is open and flexible allowing rapid change of course when the market demands. Yet, many vendors are creating a new breed of opinionated open source offerings. While they make leveraging open source really easy, that convenience has a price: lock-in. And as we all know, lock-in significantly slows the pace of new technology adoption. Make sure your platform doesn’t tie you to a specific technology stack or infrastructure. Chances are your requirements will change again soon and you must be able to take advantage of new technologies as they hit the market, or risk to fall behind as the competition is able to adapt faster than you are.
Configurability. The whole idea about leveraging a vendor supported Kubernetes platform is that everything is pre-configured. Agreed. But you will need the ability to override parameters eventually. No platform can preconfigure for all possible use cases. And, while you may start with simple use cases that work perfectly with the default configuration provided by your vendor, you will mature and start using Kubernetes in more advanced use cases (e.g. data science workloads, edge computing, stateful applications, etc.). You’ll want the ability to change parameters to fit your needs.
3. Ease of Management
Especially when you’re getting started, it’s important to allow IT to adopt Kubernetes quickly, even if they haven’t yet build the internal expertise.
User-friendly UI. User-friendly UI is especially critical for enterprises new to Kubernetes. They simplify a lot of the deployment by offering convenient dropdown menus that make it nearly impossible to create a faulty cluster. This will allow your organization to adopt Kubernetes quickly while they start building their internal expertise.
Command line and API for advanced users. Once organizations mature, you’ll have team members that will prefer work via command line.
Intelligent monitoring and alerts. Kubernetes generates a mass of raw data that you must translate to understand what’s going on with your cluster. Early detection and intervention are essential to preventing disasters. If you can’t decipher what Kubernetes is telling you, you have a problem. By incorporating automated intelligent monitoring and alerts, such a solution can provide key information on status, errors, events, and warnings so that your team has the insight it needs to take action.
4. Support and Training
Finally, as your organization begins to acquire Kubernetes skills, it’s important to have a vendor that can provide 24/7 support and training to ensure your Kubernetes journey is a smooth one.
Enterprises are rushing to adopt Kubernetes and benefit from its speed and agility promise. Yet, we are seeing numerous teams who don’t fully understand their own requirements, aren’t asking the right questions, and end up with a tool that doesn’t meet their needs. Others understood their needs but bought a solution with one use case in mind just to realize it doesn’t fit the requirements of subsequent projects.
Our recommendation is to do your homework, understand the differences, and define your requirements which should include future readiness. Your goal should be to find a platform that adapts to your requirements, not the other way round.