Leveraging a Platform as a Service (PaaS) is a great way to quickly build, innovate, and deploy a new product or service. By leveraging a PaaS vendor’s servers, load balancing, application scaling, and 3rd-party integrations, your engineering team can focus on building customer-facing features that add value to your business.
There comes a point, however, where many organizations outgrow their one-size-fits-all PaaS. Some common reasons include:
We recently completed a migration for one such client from Heroku to Kubernetes on AWS.
This client had seen phenomenal growth and was struggling with some of the constraints and performance issues with a true PaaS. In addition, they had requirements to run sensitive workloads that are completely isolated from their normal application workload, and the PaaS provider couldn’t accomodate this need.
Their previous architecture leveraged Heroku for client-facing websites and APIs and a separate instance on a leading managed hosting provider to handle their secure transactions. Having to manage two infrastructure stacks as well as independent logging, monitoring, and deployment pipelines was slowing their development process.
Finally, they were in the processes of breaking up several monolith applications into a collection of microservices. These microservices would enable increased code reuse and reduced application complexity. Our client knew that microservices shift complexity from applications to the infrastructure and wanted an implementation that would provide critical features like service discovery, traffic routing, and secret management.
Besides relying on our fully-managed DevOps-as-a-Service, our client’s technological requirements were to have a modern cloud architecture including:
After a thorough evaluation of the existing infrastructure and legacy applications as well as their CTO’s vision for their next-generation applications, our team proposed a solution based on the open-source Kubernetes container orchestration engine deployed to Amazon Web Services.
If you haven’t heard of Kubernetes before, stop reading and go visit the project website.
Then read Why Kubernetes could be crowned king of container management. And Google Kubernetes Is an Open-Source Software Hit.
Back? The buzzwords are not a lie.
To summarize:
"Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications."
From an application developer point of view, Kubernetes provides a robust mechanism to easily deploy and applications (like you might with a PaaS), without the constraints and vendor lock-in of an actual PaaS. This is exactly what our client was looking for and was a perfect functionality fit.
Out of the box, Kubernetes provides a number of essential features for modern cloud architectures:
However, there are several operational capabilities that are not batteries-included with Kubernetes:
We already have plenty of experience working with tools and SaaS platforms to handle the capabilities not included with Kubernetes. We made our recommendations for this client based on what they already using elsewhere and which services provided the best value in terms of features and capabilities.
The completed deployment included:
Our client has been running their new infrastructure in staging for a few months now and has begun the production transition. Working with their engineering team, we have automated the process for deploying a new microservice to the Kubernetes infrastructure. What used to take a developer a few hours to over a day to hack into their old infrastructure, now takes less than 20 minutes - and the platform provides all the features to do it right.
As we scale up their production workload, we are identifying several new requirements that we are folding into the Fairwinds DevOps-as-a-Service product: