Upsizing: Moving From Heroku to Kubernetes
When it’s time to grow and scale your business, Heroku can be limiting. Kubernetes may be a better choice
Heroku is a cloud platform that lets companies build, deliver, monitor and scale apps. By its own explanation, Heroku focuses relentlessly on apps and the developer experience around apps. Heroku lets companies of all sizes embrace the value of apps, not the distraction of hardware nor servers, virtual or otherwise.
Heroku is a great choice for companies developing basic, relatively siloed applications. It comes with automatic security compliance and workload automation built right in, so you can get an app working very quickly. Heroku is simple, easy to use and ideal for developers who just want to write code and ship it off to production. If your application consists of only a few features and just needs to scale up and down in response to latency, Heroku might be the perfect choice. If Heroku is meeting your app needs, stick with it—it’s a straightforward framework that lets you get code out the door quickly.
When it’s time to grow and scale your business, however, Heroku can be limiting. Heroku is optimized for ease at the expense of the ability to tweak things for complex configuration, fine-grained control to maintain performance as your application grows may be needed. It also lacks failover support across multiple physical regions, constraining the overall reliability and availability of the system. Because you’re paying for the ease of the platform in addition to the infrastructure costs, it can quickly become cost-prohibitive compared to cloud-native platforms, and the platform limitations (including its dyno system) are hard to scale. Finally, Heroku has been developed to dictate your app architecture, thus locking you into the platform; therefore, any future migration is impossible without a code rewrite.
With performance, reliability, availability and cost all hanging in the balance, it might be time to begin the process of migrating to Kubernetes.
Heroku Out, Kubernetes In
Kubernetes offers a portable and extensible platform for managing containerized workloads. With the right configuration, it gives you the ease of a PaaS, customized to your needs. This is key: Kubernetes gives you customized development infrastructure. You can set it up to model the best parts of Heroku in your new infrastructure without the limitations. You can scale your application in response to arbitrary events and create custom deployment strategies.
Kubernetes isn’t just a platform for scale. It can help you answer questions around how efficiently applications are running; whether you are over- or under-provisioning memory or CPU resources; how healthy your deployments are; and whether you need to improve security.
One of the biggest advantages of rolling out Kubernetes is that you can refine the infrastructure based on your business requirements. But as the saying goes, you only get what you put in. Migrating to Kubernetes requires preparation and expertise to ensure you implement a resilient and scalable infrastructure.
By Failing to Prepare, You Are Preparing to Fail
The first three steps to migration are preparation, preparation, preparation. If you’re used to having a very structured, opinionated infrastructure, the total freedom of a new paradigm such as Kubernetes can be overwhelming. Kubernetes is the foundation that you will use to build your platform, and there are design considerations that you need to examine before you start.
Kubernetes is (mostly) cloud-agnostic so the good news is you won’t necessarily be locked in to one of the major cloud providers. Some considerations include:
- How many clusters should you have in what regions and with how many AZs?
- What workloads should you run—and not run—inside Kubernetes?
- How should services communicate with or discover one another?
- Should security be addressed at the VPC, cluster or pod level?
- How will you handle upgrades?
- How will you keep up with security patches?
- How will you ensure uptime throughout?
Addressing Kubernetes’ Complexity
Kubernetes is complex; there is no way around it. You’ll be responsible for things such as configuring add-ons for ingress and certificate management, implementing a CI/CD process and creating deployment configurations. Without the guardrails and opinions of other platforms, this step alone can be overwhelming and time-consuming. But the complexity comes hand in hand with the flexibility to create the PaaS you need for your application. The complexity is only overwhelming as long as Kubernetes is “new” to you; the more familiarity you have with it, the less the complexity feels overwhelming.
So how do you get around this complexity? Thankfully, there is a solution to almost any problem on Kubernetes, whether that be an open source tool, a commercial service or a simple troubleshooting guide.
This leads us to the next challenge around expertise. There’s a steep Kubernetes learning curve. As Ankur Singla recently wrote for this publication, “The majority of IT pros are still used to relying on traditional virtual machines to deploy and run infrastructure and applications. Some have had an opportunity during the past few years to gain experience with containers, but they’ve had less time to try out Kubernetes specifically, which is more sophisticated than basic container technology.” This learning curve doesn’t mean you should avoid Kubernetes, it simply means you may need help to set up and deploy your production-grade infrastructure. You may even consider Kubernetes professional or managed services to get you started or run your infrastructure entirely.
Beyond Heroku: Kubernetes is the Future
The move toward cloud-native computing—where containers, microservices and serverless are king—requires orchestration. Kubernetes is the de facto standard, and it is the future. Migrating to Kubernetes to gain the benefits of resource efficiency, development velocity and portability will future-proof your application and enable your team to meet the demands of the next decade. With assistance, it can be done right the first time—and once you do Kubernetes well, you won’t want to look back.