Learn how to migrate and modernize stateless applications and run them in a Kubernetes cluster.

In the '90s, server software came in boxes containing floppies and CDs that required expert knowledge and hours of setup before it was production-ready. Nowadays, launching server application and infrastructure software is just a few clicks away in all of the major cloud vendors’ marketplaces. However, some fundamental platform challenges around standardization still need to be solved, and Kubernetes seems to be the likely solution to overcome these issues.

First, a Little History

In the early days of computing, software and hardware were tightly coupled. Applications written for a specific computer would not work on machines from other vendors. Third-party application providers, also known as ISVs (Independent Software Vendors), that wanted to target multiple platforms typically had to rewrite or modify large chunks of their software to address differences in the underlying hardware. The arrival of cross-platform operating systems and languages changed all of this, allowing ISVs to write their software to a single set of APIs and offloading the responsibility of porting to different hardware platforms to the operating system vendor.

Though Unix was the pioneer, it was MS-DOS and later Windows that provided the ultimate example of the benefits of standardization around a common set of APIs. A rich ecosystem of both application makers and PC manufacturers emerged around the platform provided by Microsoft. Something similar occurred with Linux. Red Hat emerging as the standard operating system for corporate environments, with most commercial ISVs supporting it as their preferred Linux deployment platform. Android is another recent example of the benefit for application authors and hardware manufacturers of a standard operating system, in this case, for mobile computing platforms.

In nearly every case, the winning platforms did not emerge victorious because they were necessarily better or higher quality than the alternatives. Rather, it was because, at one point, they became the perceived or de-facto standard, which in turn unleashed a reinforcing virtuous circle of adoption by both app providers and end users.

In a similar vein, as cloud computing becomes mainstream, more and more ISVs and organizations want to leverage it to make their software available to others. This can happen both internally using service catalogs and through the cloud vendors’ own online marketplace offerings. One significant problem with this is that there is not a single standard cloud computing platform, but multiple competing ones, including AWS, Azure, Oracle, and Google, as well as many other specialized providers.

Though all major clouds have similar offerings in terms of compute, storage, and databases, there are still significant differences among them. Currently, this means that ISVs and IT organizations must account for those differences and look for ways to "port" their applications without losing the benefits of adopting cloud in the first place. As an example, commercial ISVs that want to target multiple clouds may need to provide a Cloud Formation Template for AWS that includes use of an Aurora database, and also maintain an Azure Resource Manager template for their customers wanting to run their software on Azure. While there are third-party solutions such as Hashicorp Terraform can support multiple platforms, these introduce yet another dependency and indirection layer that not all customers have in place or are ready to embrace.

Kubernetes to the Rescue

While competition is healthy, having a fragmented cloud marketplace creates a need for a common, a standard platform that everyone can rely on, a layer that fulfills the role that the operating system had in previous technology eras. The good news is that such a platform may already exist! Kubernetes has emerged as the preferred solution for managing production workloads of containers. Originally an open source project developed by Google, Kubernetes is now maintained by the Cloud Native Computing Foundation (CNCF) and thousands of contributors worldwide. Kubernetes has the backing of all the major industry leaders, both traditional enterprise software vendors such as VMware, IBM, and Red Hat, as well as all the major cloud providers which also offer their own Kubernetes-as-a-service offerings.

Kubernetes provides a standardized, industry-agreed-upon way of deploying applications, performing upgrades and rollbacks, scaling up and down, providing declarative configuration management, and many other important features for deploying software in production. While not magical and still in its early days of adoption, Kubernetes is a great base for ISVs and organizations to standardize around for application deployment. ISVs can provide ready to deploy packages for their apps that will work out of the box, while organizations can programmatically customize them and automate the entire application lifecycle using powerful, standardized APIs. This includes standardized hooks for using cloud-specific services such as databases or storage systems.

Multiple tools are built on top of Kubernetes that provide a convenient way to package and distribute applications. Among these, Helm is the dominant solution (disclaimer: Bitnami is a contributor to Helm and maintains its own application repository, Kubeapps.com). Hundreds of applications are already packaged as Helm charts, but a number of competing (and complementary) solutions exist such as KSonnet, Kustomize, and even multi-platform projects such as CNAB. The important thing to remember is that all of these solutions are built on top of a well-defined, programmatic API, allowing organizations to pick and choose the solution that will work best for them with the assurance that they are not locking themselves into the wrong platform.

Thanks to Kubernetes, cloud vendors today increasingly resemble the PC manufacturers of the ‘90s. Back then, no matter what hardware you chose, you knew you would be able to run your favorite apps on it, courtesy of OS standardization. Similarly today, regardless of which cloud you choose, you will be able to run Kubernetes on it and enjoy its thriving ecosystem of apps and vendors.