DevOps and cloud native go hand-in-hand but that doesn’t mean the journey is straightforward, particularly when it comes to storage. Here’s everything you need to know about cloud-native storage if you’re just getting started.
What is cloud-native software development?
Boiled down, the term cloud native simply means taking advantage of the power of the cloud and doing so from the beginning of the software development lifecycle. Flexibility, speed, and “always on” capabilities make the cloud an ideal place for modern software development.
Although containers aren’t limited to just the cloud, they are a key part of cloud native software development because they make it simple to move chunks of code from cloud to cloud using the same set of tools and processes. Containers can be created, moved or deleted with just the click of a mouse. Kubernetes is an increasingly popular open source tool for managing containers.
Why storage is the stumbling block
So far, so good, but what about storage? The features that make containers so ideal for cloud native (flexible, portable, disposable) are the same things that make them a storage nightmare. Developers finished with containers can just kill them – but for most apps to work, they need access to reliable storage that can’t be eliminated.
And that’s the big hiccup when it comes to cloud native storage, says Brendan O’Leary, senior developer evangelist at GitLab. “Almost every app in existence needs database storage,” Brendan explains. “But in a cloud native world things come and go but storage can’t do that. Storage has to stick around and solving for that is the hardest part of cloud native. That’s the thing we need to conquer next.”
The Cloud Native Computing Foundation says the goal is to create "persistent information" that exists no matter what’s going on around it. Ideally the CNCF recommends that information not be stored in what it calls "volatile" containers.
Solutions on the horizon
The good news is that a number of companies are trying to solve the tricky problem of cloud native storage. Here’s a quick look in no particular order (Cockroach and Rancher are GitLab partners):
- OpenEBS is a Kubernetes-based tool to create stateful applications using Container Attached Storage.
- Also Kubernetes-based, Rook offers self-managed, scaling, and healing storage services.
- Cockroach Labs uses Distributed SQL to make databases portable and scalable.
- Rancher Longhorn offers persistent storage for Kubernetes.
A Gartner Group report, “Top Emerging Trends in Cloud-Native Infrastructure”, advises clients to “choose storage solutions aligned with container-native data service requirements and the standard storage interface, Container Storage Interface (CSI). CSI is an API that lets container orchestration platforms like Kubernetes seamlessly communicate with stored data via a plug-in.
And finally, there’s no shame in choosing something straightforward, Brendan suggests, particularly if you’re just getting started in the Kubernetes world. “You can go with a cloud provider’s data storage options,” he says. “That’s still cloud native but it’s even simpler to just use the tools that exist. Don’t try to reinvent the wheel.”