How Kubernetes Simplified Our Cloud and Development Platform
Nowadays, applications generate more data than ever as businesses figure out what insights they want from their data. Not only must businesses manage and store their data in the most cost-effective way, they also need to leverage that data in a functional manner. InfluxData’s InfluxDB provides both the database to store time-series data and the development platform to build applications that use that data.
Data has gravity, which means it can be costly to move between regions and clouds. Therefore, location matters. If a company generating data in New York has a database in Los Angeles, then transferring that data to servers in a different geographic location can be costly, even if it’s between two different regions of the same cloud provider. The physical distance between a company’s data source and its databases can also cause latency. Reducing the cost of storing and moving data as well as the latency when accessing it improves the customer experience.
To accomplish this, our engineers knew they needed to make their application widely accessible to address these challenges. However, using multiple cloud providers with each in multiple regions presented additional hurdles to us. To be on all three major cloud providers (AWS, Google and Microsoft Azure), InfluxData developers would need to write three different bespoke applications and maintain them all.
The Kubernetes Solution
To address these challenges, our team uses Kubernetes as a cloud abstraction layer, giving us the flexibility to deploy a Kubernetes cluster on any cloud provider in any region.
The advantage here is that our developers only need to worry about writing a single application that they can stand up in any region on any of our cloud providers. This makes scaling and expanding into new regions much faster and easier.
“Without Kubernetes, InfluxData would have had to create and maintain multiple versions of the core application, one for each cloud provider. The development teams would have lost time developing the same functionalities in parallel. Instead, with the Kubernetes-powered cloud abstraction layer, they can focus on delivering value and benefits to users in a single application.”
– Ryan Betts, vice president of engineering at InfluxData
InfluxData’s Kubernetes solution cut deployment time to a new cloud region from one month to two days. Developing a solution with Kubernetes helped us solve a mission-critical problem. Now, we can deploy our application to a cloud provider and in a region that is close to where our customers generate and use that data.
The Kubernetes solution also generated a number of unanticipated benefits for our team.
Using Kubernetes enabled our reliability team to optimize productivity by standardizing the delivery of resources and infrastructure, all while adhering to best practices. Kubernetes provided our site reliability engineers (SREs) and development team a standard framework and common terminology for collaboration. This also streamlined and accelerated onboarding for new engineering hires who are already familiar with Kubernetes. Their ability to hit the ground running because of their familiarity with the technology makes the whole team more effective and efficient.
Another unanticipated benefit resulting from the Kubernetes cloud abstraction layer is that it allowed software engineers to develop and test in a production-like environment with a minimal impact on their own systems.
A critical development that contributes to faster code deployment is a remote-local development environment (“remocal” for short) that our team created. In practice, the “remocal” development environment lets each developer spin up a near-production remote environment within an internal Kubernetes cluster where they can develop and test code.
The old method our team used involved running a local copy of the application using Docker and Kind. This used a lot more resources, leading to frustration as local machines got bogged down and feature development slowed.
By contrast, the Kubernetes “remocal” method allows the team to build, test and ship code faster, while using fewer resources. It takes less than three hours to deploy code to production once a code change enters CI. Our developers have the flexibility and freedom to test their changes in real time in their own environment that parallels the production environment.
Solutions that Scale
Through our creative use of Kubernetes, InfluxData is able to provide multicloud, multiregion data storage to customers and maintain a single codebase internally. Our Kubernetes solution provides the simplification and flexibility to meet the needs of developer customers with an elastic, scalable time-series platform.
Our solution shows that it’s possible to run Kubernetes itself at scale, comprising more than 9,400 production pods, more than 500 production nodes and 17 total clusters. Having put in the effort to use Kubernetes in this manner, we are well-positioned to meet our customers’ demands as they evolve and expand.
“Kubernetes allows us to dramatically accelerate the time required to roll out a new cluster with automation. The first region took at least a month to set up, but now we can spin up a new region in just two days.”
– Balaji Palani, director of product management, Cloud at InfluxData
In short, Kubernetes enables us to deliver our application with closer proximity to customer data sources, resulting in less latency and better performance. Internally, Kubernetes allows our developers to spend more time building new features and improvements to our application, to keep it relevant and useful to our customers.